使用产品:iserver 10.2.1i
操作系统:win10 x64
数据类型: postgres
我现在的原始需求,其实简单,就是读取一份工作空间文件,将里面的数据集、地图完整得复制到我当前的pg数据库的工作空间下,但是要处理 地图下的图层集及专题图和风格,好复杂,gis小白不知道如何处理
1、图层集如何读取?
2、专题图如何处理?
3、如何保存原始的地图的风格和布局?
4、我单单使用 toXML()保存不行,保存的都是之前旧的数据集,我另外自己写了个方法,只能保存普通的数据集,但是复杂的业务不能处理, 大佬可以给出一些思路 和 提供相应的处理业务方法?
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();
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();
}
}