刘娟
(哈尔滨市勘察测绘研究院,黑龙江哈尔滨 150010)
基于CityMaker SDK的3D GIS开发方法
刘娟∗
(哈尔滨市勘察测绘研究院,黑龙江哈尔滨 150010)
CityMaker是一款优秀的国产3D GIS平台软件。本文介绍了其4个主要产品类型,分析了CityMaker平台的三维数据组织以及二次开发接口,提出了基于CityMaker SDK的3D GIS开发的4个步骤:初始化三维地球控件、加载三维场景数据获取三维场景实体处理业务逻辑。并详细介绍了以此为基础开发的一个三维地下管线系统实例,为3D GIS的开发提供了可行的解决方案。
CityMaker SDK;3D GIS;三维场景;系统开发;地下管线
三维数字城市建设近几年来在我国方兴未艾,各大中型城市都基于三维可视化技术建设了自己的三维虚拟城市和系统。从应用成果来看,大部分三维虚拟城市系统建设偏重于场景建模,即城市三维数据采集、模型生产和场景搭建,而对场景驱动,即基于三维场景的业务系统开发和应用则关注不多,在一定程度上影响了三维数字城市建设水平和应用效果。本文以CityMaker三维平台为例,分析了该平台的三维数据组织以及二次开发接口,并详细介绍了以此为基础开发的一个三维地下管线系统,为3D GIS的开发提供了可行的解决方案。
CityMaker系列产品是北京伟景行数字城市科技有限公司研发的,拥有完全自主知识版权,且核心技术处于国际领先水平的3D GIS平台软件。CityMaker系列软件致力于全空间的、逼真、完美的虚拟三维可视化,将二维信息融入三维场景中,并将传统的二维分析运算扩展成三维分析运算,实现可视化、分析功能的二三维一体化。
CityMaker系列产品覆盖了三维数据生产、管理、应用开发整个过程,具体包括城市级海量3D GIS数据生产与维护平台CityMaker Builder、企业级的3D GIS服务聚合与发布平台CityMaker Server、通用的3D GIS应用平台CityMaker Explore以及3D GIS二次开发组件库CityMaker SDK。
3.1 三维场景数据内容
CityMaker平台中,构成三维场景的数据内容主要包括如下几个部分:
(1)三维模型数据
三维模型数据用以表达现实世界中的离散分布的三维实体,是构成三维场景的最重要组成部分。在City-Maker中,三维模型数据采用面片模型表达三维实体,即用不同形状的面片近似表示三维实体的表面,优点是便于显示和更新。三维模型数据可从外部文件导入,如∗.3ds,∗.osg等,也可以在CityMaker Builder中创建。
三维模型数据在逻辑上是以场景组的形式组织的,即将同一种类别的三维模型组织在一个图层中,将相似类别图层再组织成场景组,多个场景组还可以组成一个大的场景组。呈现一个树型的组织方式。
三维模型组成的场景以本地文件的形式保存(∗.scd、∗.sdb),也可以发布到服务器形成数据服务。
(2)矢量数据
CityMaker支持本地矢量数据的加载(如Shapefile数据)、CityMaker定义的矢量数据服务(CityMaker Data Server)的加载、空间数据库加载(如ArcSDE Database)以及符合OGC规范的数据服务(如WFS)。这些数据能够直接被平台识别和解析、并能加载到三维场景中。
(3)地形数据
地形数据可由平台提供的CityMaker TerrainPush工具,可以将影像(DOM)及高程(DEM)数据发布成文件数据(∗.ted),或者发布到MySQL、Oracle数据库中,形成平台能够读取的地形数据。
3.2 组件库介绍
CityMaker SDK是采用组件技术封装的二次开发接口,提供COM控件、JS类库两种版本,支持VB、VC++、Microsoft Visual Studio以及Delphi等开发环境。组件库中提供的所有功能都封装为接口,这些接口可以划分为两类:
(1)IObject Interface
该类接口继承于IObject的各个接口。这些接口无法直接实例化,只能通过IObjectManager的CreateXXX()方法返回得到,具体可以划分为4个层次,如图1所示。
图1 接口层次图
IObject Interface类型的接口是二次开发接口中最核心的部分,它们是三维场景中各个可视对象的抽象表达。通过这些接口,我们可以获取和设置三维场景中的对象,实现三维场景操作。
(2)CoClass Interface
该类接口主要封装了三维地球控件操作、服务注册、几何形体创建、三维分析等接口,辅助三维程序开发。
3.3 开发方法
基于CityMaker SDK的3D GIS开发方法一般遵循以下4步:
(1)初始化三维地球控件
初始化三维地球控件的目的是为了让客户端具有使用权限,且能够调用控件提供的接口。初始化三维地球控件的方法是使用IConfig接口的Initialize方法,示例代码如下:
(2)加载三维场景数据
三维场景数据为3.1节介绍的3种类型的数据。加载三维场景数据到三维地球控件主要有两种方法。
第一种方法是加载工程文件(∗.cep)。该文件实际上是一个配置文件,记录了一个三维场景中的加载的各种三维场景数据层及属性、特定场景、动画导航等。加载工程文件的方法是使用IConfig接口的Load方法,示例代码如下:
_dct3DWindow.config.Load(fileName,psd,asynchronous);
其中Load方法的第1个参数fileName表示工程文件的路径,第2个参数psd表示工程文件的密码,第3个参数asynchronous表示是否异步加载。
第二种方法是直接加载3.1节中的各种数据层。
①加载三维模型图层
加载三维模型图层的方法是使用IInfomationTree接口的CreateSceneLayer方法,可以从服务器上加载发布的三维模型图层数据服务,也可以从本地加载场景大文件。目前支持的场景图层数据格式为∗.scd、∗. sdb,示例代码如下:
参数sceneLayerName表示自定义的图层名称。参数password表示图层密码。参数layerInfo表示图层数据源。参数parentGroupID表示组容器ID,也即要创建到哪个组下面。
当加载成功后,三维地球控件会自动绘制该图层中的数据,并返回一个ISceneLayer类型的对象,通过该对象的属性和方法,可以获取三维模型图层的内部组织结构。
②加载矢量图层
加载矢量图层的方法是使用IInfomationTree接口的CreateFeatureLayer方法,可以从服务器上加载发布的矢量图层数据服务,也可以从本地加载Shapefile文件,示例代码如下:
参数featureLayerName表示自定义的图层名称。参数password表示图层密码。参数layerInfo表示图层数据源。参数parentGroupID表示组容器ID,也即要创建到哪个组下面。
当加载成功后,三维地球控件会自动绘制该图层中的数据,并返回一个IFeatureLayer类型的对象,通过该对象的属性和方法,可以获取和设置矢量图层的属性。
③加载地形图层
加载矢量图层的方法是使用IConfig接口的Load方法,可以从服务器上加载发布的地形数据服务,也可以从本地加载地形文件(∗.ted),示例代码如下:
参数terrainInfo表示地形图层数据源,如果加载的是服务器数据服务,该参数形如@"hrb@192.168.2. 53",其中hrb表示数据服务名称,192.168.2.53是服务器地址。如果加载的是本地地形文件,该参数形如@" F:\样例数据\地形数据\hrb.ted"。参数asyn表示是否采用异步加载。
当加载成功后,三维地球控件会自动绘制该图层中的数据。可以通过ITerrain接口对地形数据进行操作。
(3)三维场景实体获取
根据业务逻辑,获取三维场景中的实体,是3D GIS中的核心,如通过鼠标在三维场景中拾取地物,通过属性在三维场景中定位指定的地物等。在CityMaker SDK中,通过鼠标在三维场景中拾取地物的方法是使用IRender接口的ScreenToWorld方法,示例代码如下:
该方法中,前2个参数x、y表示屏幕坐标,也就是鼠标点击处的坐标。参数infoTree.rootId表示参与拾取的群组,也即从场景树的哪个层次来遍历三维实体,一般是从根节点处。参数type表示参与拾取的对象类型,这是一个枚举值。
参数dx、dy、dz表示拾取到地物时,鼠标点击位置的东西向坐标、南北向坐标以及高度值。参数object-GUID表示拾取到的地物的唯一ID值。以这个ID值为参数,通过IObjectManager接口的GetObject方法,可以获取这个地物的实例对象IObject。通过接口查询,可以获取这个对象的具体类型,如拾取的对象是三维实体,则通过IEntity ent=obj as IEntity语句,将IObject类型的对象转换为IEntity类型的对象,并通过IEntity接口的属性获取该三维实体的详细信息。
如果知道了某个三维场景中地物的ID值,则无需鼠标拾取,直接使用IObjectManager接口的GetObject方法获取对象。
(4)业务逻辑处理
当获取了三维场景实体后,以这些三维场景实体为对象,根据我们的系统需求,进行相应的业务逻辑处理。如进行信息查询、统计,空间分析等。业务逻辑处理可以借助SDK中提供的相关接口,如使用IVisualAnalysis接口进行可视化分析,也可以自己编写代码处理。
借助CityMaker SDK,笔者开发了三维地下管线系统。该系统以三维城市地上景观模型为背景,叠加三维地下管线专题数据,面向管线行业管理,开发了相应的管理和分析功能,辅助管线管理部门的日常管理。该系统的功能结构图如图2所示。
图2 功能结构图
系统运行效果图如图3所示。
图3 系统运行效果图
3D GIS是GIS发展的一个趋势,利用CityMaker SDK能够快速构建三维可视化系统。但是,利用City-Maker SDK开发3D GIS仍然会遇到一些问题,如开发包封装程度较高,无法从较低层次进行开发,空间分析功能较弱,对三维实体的属性支持不够等。这些问题的解决,一方面期待于CityMaker SDK的不断完善,另一方面,也需要开发人员在系统开发过程中灵活解决。
[1] 刘刚,吴冲龙;,何珍文等.地上下一体化的三维空间数据库模型设计与应用[J].地球科学(中国地质大学学报),2011,36(2)
[2] 王海鹰,张新长,康停军等.基于CA模型的三维虚拟城市构建方法研究[J].测绘学报,2010(6)
[3] 冯琰,郭容寰,汪旻琦.三维城市模型数据组织与管理方法研究[J].测绘科学,2011(1)
[4] 周松涛.基于关系数据库的三维模型库技术[J].测绘信息与工程,2005,30(6)
[5] 张明,苏中球.基于City Maker的城市三维建模技术的研究[J].城市勘测,2010(4)
[6] 杜连艳,张琼,金明一.三维仿真城市的建设方法[J].测绘与空间地理信息,2011(1)
[7] 韩聪,荆玉平,刘建国.雕塑公园三维管理系统设计与实现[J].城市勘测,2010(5)
The Method of Developing 3D GIS Based on CityMaker SDK
Liu Juan
(Harbin Institute of Geotechnical Investigation and Surveying,Harbin 150010,China)
CityMaker is a excellent 3D GIS Homemade Software.This paper introduces four kinds of the product,analyzes the organization of 3D data and SDK in CityMaker platform.It presents four steps to develop 3D GIS based on CityMaker SDK,which are initializing 3D earth control,loading 3D data,getting 3D entity and processing service logic. Then,it gives the detailed account of the 3D pipeline System,which provides a doable solution for developing 3D GIS.
CityMaker SDK;3D GIS;3D Scene;sytem development;underground pipeline
2011—05—17
刘娟(1976—),女,工程师,主要从事空间数据库建设、地理信息系统应用工作。
1672-8262(2011)05-55-03
P208.2
B