数字城市三维系统动态加载科技创新

时间:2022-10-22 03:01:16

数字城市三维系统动态加载科技创新

[摘要]随着GIS的普及,三维空间信息的应用也趋于广泛,数字城市的发展方兴未艾,解决海量三维模型的浏览、查询与更新是三维系统平台正常运行的关键。

[关键词]数字城市 三维模型动态加载缓存生成

中图分类号:F291.1文献标识码:A 文章编号:

1项目背景信息

目前对于城市级别大众化的三维GIS应用,还存在一定的限制,如对机器的配置要求比较高,尤其对于城市级的模型展示及业务应用,存在着相当大的限制,也是GIS发展的一个新需求,既要求客户用低配置机器能够展示城市级的三维模型场景,又要求能够在这个三维场景中实现客户的业务逻辑,这是一个不小的挑战,同时也是一个巨大的市场,也促使我们解决基于缓存的ArcGIS三维解决方案的形成,其优势在于能够在低配置客户机上实现城市级三维模型场景的展示,实现用户的业务逻辑,如查询、分析、模型更新等。

2需要解决的问题

方案要解决的问题是在普通的PC机上实现海量城市三维数据库系统的运行。解决的技术关键点为:动态分块的大小、批量缓存的生成、动态加载浏览方式、基于缓存的模型选择、基于缓存的模型查询、客户端部署方式。

3数据组织方式

(1)数据组织

一个完整的三维系统需要数据源予以支持,数据种类包括影像数据、高程数据、矢量基础数据(行政区划、街坊、宗地、房屋、道路、注记等)、矢量业务数据(以国土部门为例,包括建设用地批、供、用、补的矢量数据)、三维模型等。

(2)数据组织形式

影像数据:成ArcGIS Server地图服务(MapService)供各个客户端通过ArcEngine调用,作为底图使用。

高程数据:成ArcGIS Server地图服务(GlobeService)供各个客户端通过ArcEngine调用,作为高程使用。

矢量基础数据:成ArcGIS Server地图服务(MapService)供各个客户端通过ArcEngine调用,作为底图使用。

矢量业务数据:通过ArcEngine直接从ArcSDE中调用,是业务图层。

三维模型:以一平方公里左右的范围进行分块分图层,进行编号,然后分别创建缓存,该缓存需要部署到客户端本地。

4三维数据加载与浏览

根据数据的组织方式,除了三维模型其他数据的加载方式全部得到解决,这里重点设计实现海量三维模型的加载和浏览。

首先,要解决的问题是如何确定三维模型图层分块加载的大小,根据实际的测试,加载1平方公里的缓存模型数据加载和浏览的效果是较为合理的(我们的测试范围分别按5、4、3、2、1平方公里,模型密度约200个精模/平方公里)。然后就是批量缓存的生成,我们调用ArcEngine的接口,递归数据库中的三维模型图层,设定缓存路径,进行批量缓存生成,在客户端部署时可在客户机上统一批量生成模型的缓存(切缓存的速度快慢取决于CPU的处理能力)。视距小于1公里的时候,加载已经创建好的三维模型缓存数据(ILayerFile.Open(lyrPath).Layer方式获取),浏览的时候在当前视野范围内动态加载分块的三维模型缓存数据,超出范围的将被移除,实现占用内存的释放。具体方法为根据模型的分块情况,设定分块区域矢量面图层,每一个矢量面记录一个分块的名称位置信息,就就像每一个房屋应该坐落在每一个宗地内,我们将属于某个宗地内的房屋作为一个单独的层来保存,浏览的时候也要单独加载。在三维场景中进行浏览时根据设定的视距阀值,用观察点(Obsersver)做缓冲面与当前分块区域矢量面图层进行叠加分析(IIdentify),根据缓冲分析得到面要素的分块属性,加载相应的三维分块模型缓存数据,同时和前一查看的范围进行比对,将前一范围的移除掉,释放内存。经过实际测试该种三维模型的加载浏览方式,响应速度非常快,同时可以根据机器的配置动态调整加载范围阀值,可以根据实际情况加大和减小城市级海量三维模型的加载范围。

5功能实现

在完成基于分块缓存动态加载三维模型后,我们要做的是根据该种情况进行业务选择、查询、分析等。这里所有的工作均离不开分块区域矢量图层,首先是选择三维缓存模型,第一步,我们在三维场景中试图去一个三维缓存模型,用ArcEngine自带的选择工具选择起来十分困难,选上之后要查看其属性也相当的不易,基于分块缓存的动态加载模式为,根据鼠标选择的位置(有缓存模型的话不会被穿透,如果用系统自带的选择工具缓存会被穿透无法获取实际位置)和分块区域矢量图层进行叠加分析(IIDentify)获取当前加载的模型分块,获取真正的模型图层(IFeatureLayer),然后当前的鼠标选择位置再和获取的有数据源的三维分块模型图层进行叠加分析(IIDentify),获取真正的被选中的三维模型,接下来要做的就是高亮该选中的模型,高亮的方式为利用缓存图层做高亮(globeControl.GlobeDisplay.Scene.SelectFeature(pCacheLayer,pTruthFeature)),这里面需要注意的是图层为缓存图层,高亮的要素参数为真实的要素;通过该种方式即选择了高亮的被缓存的模型,也获取了真实的模型要素。

我们完成了海量数据的加载、浏览、查询、分析等功能之后,还需要考虑系统数据的更新,尤其是三维模型的更新,普通方式为三维数据基于二维的更新方式。由于在ArcEngine中没有提供三维的模型编辑工具,而我们自己写的三维模型工具条在进行模型编辑的时候需要实时刷新缓存如果机器配置不高的话,编辑效果十分不好,因此我们还提供了基于二维的三维模型编辑方式,完全用MapControl进行操作,统一的进行缓存重建,其中模型的导入调用系统的GP工具来完成(Import3DFiles)。完成三维模型的编辑,刷新了本机的缓存,那么其他客户端如何进行更新缓存呢?我们的做法是,在每一次更新完成之后,都要记录更新的位置到数据库更新表中,其他客户端在登录时需要读取更新表中的记录进行本地缓存重建客户端缓存,保证本机缓存数据与数据库中的数据保持同步。

6问题解决情况

动态分块的大小:根据实际测试,按1平方公里进行模型分块;

批量缓存的生成:调用ArcEngine接口实现;

动态加载浏览方式:根据空间叠加分析动态计算加载的方式;

基于缓存的模型选择:基于缓存的选择根据多级的空间叠加分析来实现;

基于缓存的模型查询:基于缓存的选择根据多级的空间叠加分析来实现;

客户端部署方式:主要解决客户端缓存的生成,采用的是客户端缓存生成的方式;

数据更新方式:更新之后需要解决的问题也是客户端缓存的生成,同样采用客户端缓存生成的方式。

7实际应用

实际的应用案例为《长春市国土三维地籍数据库系统》,覆盖范围长春市350平方公里,模型的数量约8万精细模型。用户单位希望构建一个全国领先的三维地籍管理系统,实现地籍业务的三维管理,提出了几点要求:

(1)三维模型场景加载浏览速度流畅,尽可能的加载范围大的模型数据;

(2)能够实现国土地籍业务;

(3)机器配置不能高,因在实际的地籍业务中,工作人员比较多,不可能给每一个业务人员都配置高性能的服务器。

常规的系统平台随着三维精模模型的不断加入,导致系统频繁的崩溃,我们研发的基于分块缓存动态加载的ArcGIS三维解决方案,在对系统进行了几轮实际检验测试后到了客户的认可并形成了测试报告。

8现实的意义

在使用ArcGlobe或其他三维平台时遇到的最大难题就是普通的PC机展示宏观超大场景的三维模型,一般来说,我们推荐使用性能较好的工作站或者服务器来实现。但是,在浏览三维场景时我们通常只关注局部小场景的展示,这样我们可以只显示需要的内容,将其他的内容移除释放硬件资源。

基于这种思路,我们提出了基于三维缓存的动态加载移除方法,成功解决了大场景低配置电脑的浏览问题,同时还推出了一系列基于这种动态加载方法的编辑、量测、查询等功能,形成了完整的解决方案。使三维技术摘掉了华而不实的帽子,达到了活用实用三维的目的。同时使ArcGIS软件三维平台具有了一定的竞争力,是对ArcGIS大家族诸多解决方案的一个有力补充。

作者简介: 张悦: 女1963.11.261991年毕业于武汉测绘科技大学现任吉林省地理信息工程院制图分院院长,高级工程师,多次主持生产参加部级、省级以上测绘项目并获得多项奖励。

上一篇:木斯千水库工程导流隧洞设计 下一篇:一款实用煤气报警器的设计