三维空间插件客户端矢量更新操作文档
作者:桔子
综述
在许多应用场景中需要对数据进行更新操作,包括对数据增加、删除、修改,以及属性数据的修改。当前版本的SuperMap iClient3D 8C for Plugin插件客户端(以下简称“插件客户端”)只支持对二维的点、线、面矢量数据进行更新操作,暂不支持三维点、线、面矢量及模型的更新操作。本文主要讲解在插件客户端实现对二维矢量数据的更新思路和流程,若后续版本支持对三维矢量、模型等的更新操作,再另做文说明。
一、数据准备
1、将矢量数据添加到场景中,设置好风格并保存场景,如图1。
2、对场景切场景缓存,并对需要进行更新的二维矢量图层勾选生成预缓存,如图2。
生成的预缓存数据与缓存数据的区别在于:
预缓存:生成的预缓存文件中的工作空间,以数据源和数据集的形式保留数据信息,便于通过SuperMap iSever 8C(以下简称“iSever”)的数据服务,实现矢量数据的增加、删除、修改,以及属性数据的修改。
非预缓存:生成的缓存文件中的工作空间,以场景缓存形式保存场景中的数据信息,没有保存源数据的数据集。
二、发布服务
启动iSever,将生成的缓存发布成rest-数据服务和rest-三维服务,数据服务中勾选允许编辑,如图3和图4。
三、对象更新
对象的更新操作包括对矢量数据的增加、删除、修改,以及属性数据的修改。插件客户端更新操作的实现思路是插件客户端向iSever提交对象更新请求,通过iSever的数据服务,更新数据集中的对象之后,插件客户端通过三维图层的数据更新操作,从iSever返回新的缓存,最终在客户端进行渲染,展示更新后的效果,实现思路如图5。
这里以二维矢量点的更新操作为例,如图5-8所示。具体实现代码参考范例:http://pan.baidu.com/s/1kVERx8z密码:yukd
四、相关需求解决方案
1、三维矢量点更新
当前版本不支持对三维矢量的更新,那对于三维点数据更新的实现思路仍是转换将三维矢量点为通过二维矢量点进行更新。首先在SuperMap iDesktop8C中通过类型转换工具,将三维点转换为二维点(图10),并且在SuperMap iDesktop8C中配置好场景,设置图层的高度模式为绝度高度,设置其底部高程为高程字段,以达到三维的效果。然后生成场景缓存、发布服务和更新操作都和上述的实现方式相同。
2、模型属性更新
在实际项目应用的需求是更新对象的属性信息,但当前版本不支持模型对象的更新,针对这个需求,提供如下方案来解决。
首先需要提取模型的中心点,该步操作需要通过SuperMap iObjects .net开发实现。在提取模型中心点时需要注意提取的模型中心点是和模型一一对应,且有原来模型的所有属性信息,以保证最终查询时获取到正确的模型属性信息。然后在SuperMap iDesktop8C中通过类型转换工具,将三维点转换为二维点,发布数据服务即可(勾选允许编辑),不需要将转换得到的二维矢量点配置到场景中,只是作为数据服务即可。在模型属性更新时,直接更新二维矢量点的属性。查询模型属性时通过查询数据服务查询二维矢量点的属性获得。