使用SuperMap iObjects for Java更新模型缓存

172 篇文章 55 订阅

作者:dongyx

一、背景
在工程实施过程中,可能会出现某个区域内建模模型的增加、修改或者移除。对模型数据集修改后我们是不是也需要重新对整个模型数据集切缓存发布服务呢?如果业务数据过于庞大,重新切缓存肯定不是一个最优的解决方案了,我们需要有某个功能或者某种实现方法来完成对修改区域的模型进行缓存更新,这样既不用重新对整个模型数据集切缓存,也不用修修改加载模型缓存的代码。下面我们来看一下使用SuperMap iObjects for Java如何对模型缓存进行更新。
二、数据准备
原始模型数据集:datasetA;
修改区域内的模型数据集:datasetB
修改过后的模型数据集:datasetAB
三、实现思路
1.对原始模型数据集切缓存
在iDesktop桌面软件中右键模型数据集datasetA–生成缓存,在生成缓存弹出框中设置好相关参数(需要记住生成缓存时设置的文件类型、模型定位点、瓦片边长等参数,在后续代码书写中需要使用)。
在这里插入图片描述

缓存生成结果如图:
在这里插入图片描述

2.使用Java组件对缓存进行更新
(1).打开工作空间获取相关数据源中的数据集

WorkspaceConnectionInfo connectionInfo = new WorkspaceConnectionInfo(wsPath);
Workspace workspace = new Workspace();
workspace.open(connectionInfo);
Datasource datasource = workspace.getDatasources().get(datasourceName);
datasetA  = (DatasetVector) datasource.getDatasets().get("datasetA");
datasetB = (DatasetVector) datasource.getDatasets().get("datasetB");
datasetAB  = (DatasetVector) datasource.getDatasets().get("datasetAB");

(2).获取修改数据集datasetB的范围

Rectangle2D bounds_B = datasetB.getBounds();

(3)设置模型生成缓存的相关参数

OSGBCacheBuilder builder = new OSGBCacheBuilder();
builder.setDataset(datasetAB);//设置生成缓存的数据集
builder.setOutputFolder(cachePath);//设置缓存输出路径,与原始缓存一致
builder.setCacheName(cacheName);//设置缓存名称,与原始缓存一致
builder.setFileType(CacheFileType.S3MB);//设置缓存文件类型
builder.setBounds(bounds_B);//
builder.setTileWidth(300);
builder.setPosition(new Point3D(datasetA.getBounds().getCenter().x,datasetA.getBounds().getCenter().y,0));
builder.buildWithoutConfigFile();
builder.setBounds(datasetAB.getBounds());
String config = _dataPrefix + builder.getCacheName() + "\\" +builder.getCacheName()+ ".scp";
boolean isSuccess = builder.toConfigAndIndexFile(config);

生成结果如图:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值