邓德标,方源敏,高晋寧
(昆明理工大学国土资源工程学院,云南昆明650093)
二维GIS自20世纪60年代发展至今,已应用到土地管理、交通、电力、电信、城市管网、消防、城市规划等领域[1]。近年来随着三维GIS技术的迅猛发展,其在现代城市的规划、建设、管理及发展等方面开始发挥重要作用。如何利用数字化手段管理城市,成为地理信息科学的一个重要研究方向,三维地理信息虚拟仿真技术也因此成为数字规划新的技术亮点[2]。
利用现代化数字化方式管理城市,首先需要建立逼真的精确的三维城市景观。对于小范围的三维景观建设,可以通过对地物逐个进行信息采集和创建模型的方法来实现。但对于大范围城市景观场景的创建,工作量和成本会大大增加,所以需要采用一种合理的手段来解决。本文提出利用城市地物的不同重要程度来对城市地物进行区别化建模的方法:对标志性和重要建筑物(如政府机关大楼、学校等)进行精细化建模,保证其在城市中的突出地位;对在城市中存在的大量一般模型(如居民住宅等)采用基于ArcGIS与Google SketchUp相结合的方式来批量建模;对大量的城市部件采用建立城市部件模型库的方式来进行建模。
相对于传统的人机交互式的作业方法,上述建模方法具有制作精度高、工作量小、制作周期短、工作效率高等优点,实现大规模城市场景快速建模效果明显,可以普及使用。
TerraDeveloper是TerraExplorer Pro的扩展模块和二次开发工具,完全基于COM组件技术标准,通过TerraExplorer API提供接口,支持用 VB、VC、C#等语言根据实际需要进行开发[3]。
要使用TerraExplorer API接口,首先需要安装TerraExplorer Plus,添加 TerraExplorerX 1.0 Type Library引用;然后在工具箱中添加TE3DWindow(三维窗体)、TEInformationWindow(信息树窗口)和Navigation Map(导航图)控件;最后通过调用Terra-ExplorerX里相关的类型和函数即可实现相应的功能。TerraExplorer包含的接口如下。
1)ISGWorld6接口:是大多数TerraExplorer接口的主入口点,通过该接口可以管理应用程序、3D对象及消息的处理事件。包含Project、Navigate、Creator、Window、Analysis等属性。
2)TerraExplorer5接口:用于描述用户接口的相关细节和操纵文件,如工程文件名,工程环境参数ProjectPrarm,用于装载.FIL或MPT文件的Load函数,保存当前工程文件的Save函数。
3)IRender5接口:获取当前三维窗口的信息,如ScreenToWorld函数用于获取屏幕上某点的地理坐标,SetMouseCursor和 SetMouseInputMode函数分别用于设置鼠标的指针类型及控制其输入模式。
4)ICoordSys3接口:提供当前坐标系统的相关信息,用户可自定义坐标系统,调用MoveCoord函数调节东西和南北的偏移量来移动二维坐标。Get-Distance函数可获取图上两点间的水平距离,若要获取两个三维点的空间距离则用GetDistanceEx函数,获取由两点确定的直线与北方向的夹角则用GetAimingAngles函数。
5)IObjectManager51接口:管理三维窗口中的所有对象,可进行添加、删除、修改三维窗口中的对象,如GetObject函数可获取对象,CreateLabel函数可创建标签,CreatePolyline函数创建折线,Create3DPolygon函数创建三维多边形。
Skyline支持添加的景观模型有*.x、*xpc、*flt、*fpc、*xpl、* xpl2、*dae 7 种格式。考虑到TerraExplorer Pro软件提供的模型制作精度不高,因此三维景观模型主要使用3D MAX或Maya等建模软件制作[4]。制作模型时需要设定模型的中心点、方向和大小,也可以在模型添加后进行调整,但为了减少后处理的工作及提高效率,故建议在模型制作时把相关参数设置好。
在城市模型中的一些细节部分,如路灯、邮筒、下水井、树木等可认为是形状相同的物体。如果每个物体模型都人机交互式地添加,工作量太大,而且模型的地理位置精度得不到保障。如果能够找出模型插入点之间的规律,利用数学公式计算各个插入点的坐标,则能实现模型的批量添加。
添加模型所调用的函数是CreateModel,该函数有6个参数,依次是位置、模型文件名、缩放系数、模型类型、项目树中的ID号码和名称。其中前两个参数是必须的,其余都是可选的,因此只要确定添加的位置和模型文件名。由于模型添加时忽略模型高程,直接将模型添加到已打开的工程文件所在的平面上,所以只需确定模型的平面坐标。有一点要注意的是,添加模型所需的位置是经度和纬度,坐标系是当前地形模型的坐标系。
图1所示是模型的添加流程图,模型导入时可以一次导入多个不同的模型,但每一次添加只能选择一种模型。添加前可以设置模型参数,包括水平方向Yaw、前后仰角角Pitch、左右偏角Roll和相邻模型的水平间距,通过3个角度参数就可以控制模型在不同位置的朝向。
模型的添加方式有以下4种:
1)鼠标点击:通过操纵鼠标在视图窗口上点击左键来确定模型插入的位置。在屏幕上选取一个点后,通过ScreenToWorld函数将屏幕坐标转换为经纬度,并在程序界面左边的列表中显示出来。要结束时只需双击鼠标左键,通过调用CreateModel函数将选定的模型按照选取的位置添加到图中。该方法适合模型分布没有规律的情况,还可以在双击前修改模型坐标列表的数据。
图1 模型添加流程图
2)直线定距:在指定直线上按照设定的间距添加模型。通过在视图上选取起点和终点指定直线,首先调用ScreenToWorld函数将起终点坐标转换为经纬度;然后调用GetDistance函数获得两点之间的水平距离以确定插入点的个数;调用GetAimingAngles函数获取该直线与北方向的方位角α;接着按照式(1)计算各个插入点相对于直线起点的偏移量(ΔLi,ΔBi),偏 移 量 的 单 位 是 米;最 后 调 用ICoordSys3接口的MoveCoord函数将距离偏移量转为经纬度方向的偏移量并加上起点经纬度,即可到得插入点坐标(Li,Bi)。该方法适用于多个模型直线分布的情况,如直线道路两旁的路灯或树木等。
式中,Δd为模型间的水平间距;i为模型插入点序号。
3)文件导入:读取文件中的坐标数据添加模型。文件中每行代表一个插入点,一行有两个数值,前者是经度或横坐标,后者是纬度或纵坐标,以逗号或空格隔开。该方法适用于模型插入位置已知的情况。
4)数据库导入:从指定数据库中读取插入点的坐标数据来添加模型。数据库保存有各模型的位置信息,通过与数据库的连接可获取位置。适用于位置数据已保存在数据库的情况。
另外,可以根据实际需要对添加方式进行扩展,例如模型分布特征是其他有规律的几何形状,那么按照该规律对应的数学公式来编写代码即可实现批量添加。
CreateModel函数的位置参数是经纬度,即大地坐标。使用“文件导入”或“数据库导入”的方式添加景观模型时,若已知的插入点坐标不是大地坐标,则需要进行坐标转换,下面分两种情况讨论。
1)插入点坐标与地形模型使用相同的坐标系,即椭球参数相同,只需进行坐标形式的转换。若插入点是高斯平面坐标(x,y),可使用高斯投影反算公式[5]将平面坐标转为大地坐标。若插入点为空间直角坐标(X,Y,Z),可用式(2)计算大地坐标[6]。
2)插入点坐标与地形模型的坐标系不同,则需进行坐标系转换。坐标系之间的转换模型有布尔沙模型、莫洛金斯基模型、武测模型,另外还有一些学者对这些模型进行改进,得到更好的转换效果,这里不再赘述,具体方法可查阅文献[7—9]。
为方便管理模型的属性信息,采用数据库来存储和管理这些数据是很有必要的。根据数字城市景观模型的类型和信息,可以将具有相同或相似属性的景观模型归到同一类。例如创建一个城市景观模型数据库,其中的两个数据表及字段如下。
1)地下管线设施表:编号ID,名称,上游点名,下游点名,主管部门代码,主管部门名称,所属类型代码,管径,管厚,设计管压,竣工日期,图片,备注。
2)沿路公共设施表:编号ID,名称,坐标X,坐标Y,高程H,水平转角,前后倾角,左右倾角,主管部门代码,主管部门名称,权属部门代码,权属部门名称,所属路段代码,所属路段名称,数据来源,设施型号代码,设施状态,设施材料,设施颜色,图片,备注。
对于污水井、通信管线井、自来水井等属性信息相似的模型,可以存放在地下管线设施表中,路灯、邮筒、垃圾桶、树木等可归类到沿路公共设施表。
为了减少数据量,将图片统一存放在指定文件夹里,数据表的图片字段只记录对应图片的存放路径。这样对于同一种设施,其图片是相同的,共用一张图片即可。
模型添加到工程文件后,通过属性编辑对话框完善信息,然后保存到数据库中。若要查看某一路段所包含的公共设施,那么检索路段代码或路段名称即可。数据库的访问采用DataGridView控件,它具有很好的配置性和扩展性,而且能访问多种数据库,如 SQL Server和 Access。
为验证该方法的可行性,以Visual Studio 2008作为开发平台,使用VB语言实现城市三维景观模型的批量添加,并结合Access数据库对模型属性信息进行存储。
在某一数字城市的地形场景模型(MPT文件)上添加路灯设施如图2所示,以直线定距的方式添加路灯模型,通过设置方位角Yaw等调整偏向参数就可批量地控制模型的朝向。模型添加完毕后,通过在模型坐标列表中双击鼠标左键调出属性编辑对话框(如图3所示),即可输入模型属性信息并将数据入库。
图2 路灯模型
TerraExplorer Pro三维GIS平台的功能强大,其二次开发包TerraDeveloper具有使用方便、易于实现、开发效率高等优点。本文基于TerraDeveloper实现了数字城市三维景观模型的批量添加方法,不但提高了数字城市建模的工作效率,而且模型的位置精度也得以保证,降低了人为误差。另外,使用数据库对模型属性数据进行存储和管理更加安全和合理。批量添加的关键是计算每个模型的插入位置,因此可根据实际情况,对于具有一定规律分布的模型,建立相应的计算模型插入点位置的方法,例如某个小区的房屋模型是一样的,模型间距相同,那么按照矩形的方式求解插入点坐标,即可实现批量添加。
图3 属性编辑
[1]施加松,刘建忠.3D GIS技术研究发展综述[J].测绘科学,2005,30(5):117-119.
[2]唐桢,张新长,曹凯滨.基于Skyline的三维技术在城市规划中的应用研究[J].测绘通报,2010(5):10-12.
[3]姚申君.基于 TerraDeveloper的三维 GIS开发研究[D].上海:华东师范大学,2008.
[4]梁吉欣,左小清.Skyline在Web三维GIS中的应用研究[J].昆明理工大学学报:理工版,2009,34(2):1-4.
[5]施一民.现代大地控制测量[M].北京:测绘出版社,2003:113-114.
[6]王解先,王军,陆彩萍.WGS-84与北京54坐标的转换问题[J].大地测量与地球动力学,2003,23(3):70-73.
[7]刘大杰,施一民,过静珺.全球定位系统的原理和数据处理[M].上海:同济大学出版社,2006:183-187.
[8]陈宇,白征东,罗腾.基于改进的布尔沙模型的坐标转换方法[J].大地测量与地球动力学,2010,30(3):71-73.
[9]陈义,沈云中.非线性三维基准转换的稳健估计[J].大地测量与地球动力学,2003,23(4):49-53.