使用产品:iserver 10.2.1i 操作系统:win10 x64 数据类型: postgres
我通过 toXML()方法获取字符串,使用Maps.add()方法保存,最后保存工作空间,但是为什么工作空间的地图为空白呢,只有复制地图名,其他的复制了个寂寞?
然后 fromXML() 方法是不需要用到的嘛
最后导入后却是空白的
好的, 那我想请问
1、fromXML() 这个方法,我们是用不到是吗?
2、地图的名称是不是得和 数据集名称+数据源名称一一对应 才能显示?
我现在的原始需求,其实简单,就是读取一份工作空间文件,将里面的数据集、地图完整得复制到我当前的pg数据库的工作空间下
1、现在我参考文档,自己写出如下代码,可以实现复制普通的数据集,想问一下我这样子写的思路有无问题,有无改善的地方
log.info("数据源打开成功!"); // 现在需要将工作空间下面的数据源下的数据集全部给加到现有的数据库中 Datasources datasourceSrcList = workspaceSrc.getDatasources(); String caption = workspaceSrc.getCaption(); log.info("工作空间显示名称为" + caption); List<String> dataSetNameList = new ArrayList<>(); for (int i = 0; i < datasourceSrcList.getCount(); i++) { Datasource datasourceSrc = datasourceSrcList.get(i); Datasets datasets = datasourceSrc.getDatasets(); for (int j = 0; j < datasets.getCount(); j++) { Dataset dataset = datasets.get(j); // 返回一个可用的目标数据集的名称,复制数据集 String datasetName = datasourceDesc.getDatasets() .getAvailableDatasetName(IMPORT_DATASET_SUFFIX + dataset.getName()); Dataset newDataset = datasourceDesc.copyDataset(dataset, datasetName, EncodeType.INT32); dataSetNameList.add(datasetName); log.info("数据集" + newDataset.getName() + "类型为" + newDataset.getType() + "添加成功"); } Maps maps = workspaceSrc.getMaps(); Datasets datasets1 = datasourceDesc.getDatasets(); for (int k = 0; k < maps.getCount(); k++) { Map srcMap = new Map(workspaceSrc); srcMap.open(workspaceSrc.getMaps().get(k)); // 将XML格式的地图对象转换为地图对象 Map targetMap = new Map(workspaceDesc); Layers layers = srcMap.getLayers(); log.info("图层计数为:" + layers.getCount()); for (int j = 0; j < layers.getCount(); j++) { Layer layer = layers.get(j); String name = layer.getName(); log.info("图层名称为:" + name); LayerGroup parentGroup = layer.getParentGroup(); if (null != parentGroup) { for (int l = 0; l < parentGroup.getCount(); l++) { Layer childLayer = parentGroup.get(l); String childLayerName = childLayer.getName(); String[] split = childLayerName.split("@"); Dataset dataset = datasets1.get(IMPORT_DATASET_SUFFIX + split[0]); if (null != dataset) { targetMap.getLayers().insert(j, dataset); } } } else { String[] split = name.split("@"); Dataset dataset = datasets1.get(IMPORT_DATASET_SUFFIX + split[0]); if (null != dataset) { log.info("数据集名称为:" + dataset.getName()); // targetMap.getLayers().insert(j, dataset); targetMap.getLayers().add(dataset, true); } } } workspaceDesc.getMaps().add(IMPORT_DATASET_SUFFIX + srcMap.getName(), targetMap.toXML()); workspaceDesc.save(); //释放资源 srcMap.close(); srcMap.dispose(); } } dataSourceVO.setDataSourceName(datasourceDesc.getAlias()); dataSourceVO.setDataSetNameList(dataSetNameList); if (saveFlag) { // 封装为当前nacos配置下的工作空间 WorkspaceConnectionInfo workspaceConnectionDesc = vectorFileHandleService.assignWorkspace(connectionDTO.getName()); boolean saveResult = workspaceDesc.saveAs(workspaceConnectionDesc); if (saveResult) { log.info("导入工作空间成功"); } else { return R.fail("另存失败!"); } }
2、但是样式这些并没有复制到,是不是得特殊处理??
(左边入库后的,右边是原文件) 导致地图显示不完整
您好,请可参考相同问题对您的回复, https://ask.supermap.com/137046