李锋(重庆市勘测院,重庆 400020)
Li Feng(Chongqing Survey Institute,Chongqing 400020,China)
基于CityEngine的2.5维地图生成方法与应用
李锋∗
(重庆市勘测院,重庆 400020)
摘 要:针对2.5维城市地图需求,本文设计并实现了基于CityEngine的三维体块模型和精细模型生成及平行投影自动出图方法,主要特点是支持矢量数据基于规则的建模以及坐标自动配准。与基于GIS软件生成投影面实现2.5维效果相比,本方法实现了真实三维体块模型和精细模型以及真实光照效果,通过规则将二维GIS数据和三维GIS模型进行挂接,有利于GIS数据可视化的广泛应用。
关键词:CityEngine;2.5维地图;基于规则的建模
随着三维数字城市的不断发展,三维GIS和Web-GIS成为主要发展方向之一。由于成本、技术、终端等因素限制,2.5维地图仍然具有一定优势。以“E都市”、“都市圈”等地图网站为代表,2.5维地图解决了网络发布和效率的问题,也提供了三维仿真的真实感。同时,2.5维地图可以作为栅格底图,可以叠加道路、管线等矢量图层,提供直观的地图效果。
2.5维地图研究方面,2010年,宋珉等研究了2.5维地图的在制作算法[1],主要思路是基于GIS软件生成投影面,并处理遮挡关系和明暗度,实现2.5维效果以及瓦片发布;2012年.阮明等提出了2.5维地图的坐标转换算法[2],并以南宁市2.5维地图进行了验证;2013 年,李锋等提出了移动终端的离线电子地图框架[3],支持2.5维地图的瓦片生成、加密打包、移动终端应用等; CityEngine平台研究方面,2013年,吕永来等研究了基于CityEngine的高速铁路建模方法[4];2014年,张晖等探索了基于CityEngine的建筑物CGA规则建模方法[5]。
针对城市2.5维地图需求,结合CityEngine建模平台支持二维GIS数据基于规则快速构建三维场景的优势,本文设计并实现了三维体块模型和精细模型生成及平行投影2.5维地图自动生成方法,实现了真实三维体块模型和精细模型以及真实光照效果,通过规则将二维GIS数据和三维GIS模型进行挂接,有利于GIS数据可视化的广泛应用。
本文采用的技术路线包括4个步骤:建筑体块模型生成、建筑精细模型生成、平行投影自动配准出图、图片缓存生成及发布。
2.1建筑体块模型生成
根据建筑物带属性的shp文件,按照一定的规则,自动生成建筑体块模型。规则应用到的建筑物shp文件的相关属性如表1所示:
建筑体块属性 表1
建筑体块模型生成的规则如表2所示:
建筑体块生成规则 表2
在CityEngine中导入建筑物shp文件,选中所有面对象,应用建筑物体块模型生成的CGA规则文件,即可完成体块建模。之后对体块模型设置半透明材质(透明度为50%),设置场景光源为地图左上角(315°),光源高度角为42°,即可完成建筑物体块模型场景生成。
2.2建筑精细模型生成
体块模型对应于普查结果和普通建筑,对于具有标志意义的建筑,需要在体块模型基础上进一步生成精细模型。CityEngine支持基于建筑规则语义的初步形态、风格设计,完成建筑物外立面整体效果,实现建筑在三维地理环境中的形态表达。通过从建筑物构造领域知识抽取规则语义实现建筑形式化描述,主要流程包括3个阶段:体块建模、主体建模、表面纹理贴图。如表3所示:
建筑精细建模阶段 表3
通过建立不同风格的建筑物规则,基于“逐步迭代”的体型和纹理构建方式,针对不同风格建筑物的特点,制订不同的城市建筑物规则。发挥规则的复用性和移植性的优势,这些城市建筑物规则建立好后,可以形成规则库,实现重复利用。
2.3平行投影自动配准出图
三维透视投影会由于同一个视点而产生视锥体透视效果,生成的图片处处分辨率不同,不适合大比例尺快速拼接和发布展示,平行投影,即正交投影,由于每个像元对应一个视点,生成的图片每个像元的分辨率相同,适合快速无纠正拼接。
本文基于CityEngine实现了平行投影自动配准出图算法,主要特点是根据不同的镜头姿态、出图相片尺寸、和成图比例尺作为已知参数,计算镜头参数,并进一步计算各个相片的镜头位置、相片tfw坐标信息,具有参数可调节、支持多比例尺、支持坐标信息文件自动配准等优势,生成的tif和tfw文件可以直接作为栅格图层导入到GIS软件中。
2.4图片缓存生成及发布
在2.5维地图生成以后,为了便于地图发布和不同分辨率的地图快速调用,需要生成不同比例尺的地图瓦片缓存。地图瓦片缓存包含了不同等级集合的缓存地图图片以及描述其Cache的配置文件(Conf.xml)。瓦片按比例尺、行、列三级存放,可以使用Arc-GIS Server的地图缓存功能构建。主要步骤有:①使用ArcMap编辑地图文档;②使用ArcGIS Server发布地图服务;③使用ArcCatalog访问地图服务并生成瓦片缓存。瓦片缓存生成后,便可发布地图服务,加速客户端和移动端的地图访问效率。
该算法主要步骤有:①计算相机参数fov、投影距离d;②计算各张图片的相机位置及对应的tfw影像坐标信息文件;③基于CityEngine实现Python脚本自动出图;④变换参数,实现多种比例尺和不同角度θ下的批量出图。具体描述如下:
已知计算参数:
相机高度camera_h = 2000,方向正北,向下45°俯视,θ=45°;
形成图片大小为512像素×512像素,即视图窗口大小;
形成图片比例尺为scale=1000(即1∶1 000比例尺,可调节)。
(1)计算相机参数fov、相机到投影中心的距离d。
按135相机,36 mm×24 mm底片,50 mm标准镜头,计算相机视野角度fov为:
按视图窗口512像素×512像素,形成图片分辨率为72 dpi,代表实际坐标从第一列像素中心到最后一列像素中心,相当于511个像素宽,并根据投影关系,计算511个像素宽的相片对应的实际宽度width_pic、地面实际宽度width和相机到投影中心的距离d:
(2)计算各张图片的相机位置及对应的tfw影像坐标信息文件。
①根据投影关系,计算511个像素高的相片对应的实际高度height_pic、地面实际高度height:
②计算θ倾斜角下,相机位置到相片中心的偏移offset_x,offset_y:
offset_x=0
③计算(minx,miny)-(maxx,maxy)场景范围内第(i,j)张相片对应的相机位置:
camera_x=minx+(i+0.5)×width(m)
camera_y=miny+(j+0.5)×height-offset_y(m)
④计算(minx,miny)-(maxx,maxy)场景范围内第(i,j)张相片对应的tfw参数:
X方向上的像素分辨率:resolution_x = 0. 0254∗scale/72
X方向的旋转系数:0. 00
Y方向的旋转系数:0. 00
Y方向上的像素分辨率:
resolution_y=-0. 0254∗scale/ (72∗sinθ)
栅格地图左上角像素中心X坐标:
leftupper_x=minx+i∗width
栅格地图左上角像素中心Y坐标:
leftupper_y=miny+(j+1)∗height
(3)基于CityEngine实现Python脚本自动出图。
基于以上计算结果,通过Python脚本编程,实现平行投影相机设置、对每幅相片进行镜头姿态调整、图片生成、计算相片坐标信息文件,从而实现批量自动出图,Python脚本代码如下:得,
ce=CE() #获取CityEngine环境
views=ce.getObjectsFrom(ce.get3DViews(),ce.isViewport) views[0].setCameraPerspective(False)#设置为平行投影
views[0].setCameraAngleOfView(fov)
views[0].setCameraRotation(-θ,0,0)
views[0].setPoIDistance(d)
foreach(i,j)image in scene(minx,miny)-(maxx,maxy)
views[0].setCameraPosition(camera_x,camera_h,-camera_ y) #设置相机位置views[0].snapshot(ce.toFSPath('images') +" / "+str(i)+"_"+str(i)+".tif") #抓图
tfwPath=ce.toFSPath('images') +" / " +str(i) +" _" +str(j) +".tfw"
tfwOutput=open(tfwPath," w") #自动输出对应的tfw坐标信息文件
tfwOutput.write(str(resolution_x)+" ") tfwOutput.write("0.00 ") tfwOutput.write("0.00 ") tfwOutput.write(str(resolution_y)+" ") tfwOutput.write(str(leftupper_x)+" ") tfwOutput.write(str(leftupper_y)+" ")
tfwOutput.close()
(4)变换参数,实现多种比例尺和不同角度θ下的批量出图。
如果是非正北方向出图,可以计算旋转后的场景范围,然后重复步骤(2)~(3)获得相应的图片序列。对于其他参数,通过变换scale和不同倾斜角度θ,然后重复步骤(1)~(3),获得相应的图片序列。
以重庆市某区域建筑物GIS数据为例,数据集共包含37 879个建筑物底面要素,如图1所示,经过本算法生成2.5维地图如图2所示。生成的2.5维地图能够和GIS面要素精确套合,如图3所示。生成的2.5维地图可以进一步叠加道路、管线等矢量数据,能够更直观展示相对位置关系,如图4所示。
图1 GIS房屋底面数据
图2 2.5维体块模型数据
图3 2.5维地图和GIS面套合结果(带阴影)
图4 2.5维地图叠加管线矢量
结合CityEngine建模平台支持二维GIS数据基于规则快速构建三维场景的优势以及平行投影无缝拼接的特点,本文设计并实现了三维体块模型和精细模型生成及平行投影2.5维地图自动生成方法。该方法实现了真实三维体块模型和精细模型以及真实光照效果,通过规则将二维GIS数据和三维GIS模型进行挂接,有利于GIS数据可视化的广泛应用。进一步的研究工作是基于CityEngine,支持地质、建筑、地面、道路、植物、附属设施等城市三维模型的规则化建模和分析,构建丰富的建模规则库,实现丰富地图应用。
参考文献
[1] 宋珉,刘鹏超,赵维等.2.5维地图制作算法研究与实现[J].城市勘测,2010(5):104~106.
[2] 阮明,谭庆涛,王文瑞.2.5维地图坐标转换的算法及实现[J].城市勘测,2012(2):78~80.
[3] 李锋,明镜,王昌翰.移动终端离线电子地图应用框架研究[J].测绘科学,2013,38(6):129~130.
[4] 吕永来,李晓莉.基于CityEngine平台的高速铁路建模方法的研究与实现[J].测绘,2013,36(1):19~22.
[5] 张晖,刘超,李妍等.基于CityEngine的建筑物三维建模技术研究[J].测绘通报,2014(11):108~112.
Li Feng
(Chongqing Survey Institute,Chongqing 400020,China)
Generataion Method and Application of 2.5-Dimensional Map Based on CityEngine
Abstract:Aiming at the requirements of the 2.5-dimensional city map,this paper designes and implements a generation method of 2.5-dimensional map based on CityEngine,with 3d block models and fine models generation and automatic map producing using parallel projection.The main features of the method are rule-based modeling of vector data and coordinate automatic registration.Compared with the method of 2.5-dimensional projection surface generation using GIS software,the method supports real 3d block models and fine models and real light effects and will help to GIS data visualization applications by rule-based connecting 2d-GIS data and 3d-GIS models.
Key words:CityEngine;2.5-dimensional;rule based modeling
文章编号:1672-8262(2015)04-20-04中图分类号:P208.2
文献标识码:A
收稿日期:∗2015—04—22
作者简介:李锋(1983—),男,工程师,主要研究方向为GIS应用和城市三维GIS。
基金项目:国家测绘地理信息局青年学术和技术带头人科研计划项目(201405);重庆市应用开发计划项目(cstc2014yykfB40004)。