基于OpenGISCityGML的外观模型探讨
2013-03-03关颖童凌飞张旭冬
关颖,童凌飞,张旭冬
(1.江西理工大学建筑与测绘工程学院,江西赣州 341000; 2.苏州工业园区测绘有限责任公司,江苏苏州 215021)
基于OpenGISCityGML的外观模型探讨
关颖1∗,童凌飞1,张旭冬2
(1.江西理工大学建筑与测绘工程学院,江西赣州 341000; 2.苏州工业园区测绘有限责任公司,江苏苏州 215021)
根据当前三维城市GIS中的虚拟城市模型中存在的不足提出了CityGML的外观模型,它是虚拟3D城市模型
CityGML;外观模型;纹理
1 引 言
近年来,以二维为主的GIS已逐步向3DGIS发展,现有的大部分虚拟三维城市模型仅仅被界定为图形模型或几何模型,而忽略了语义和拓扑方面的表现。这些模型几乎只能用作可视化,而不能进行主题查询、任务分析或空间数据挖掘,因为模型的有限可重用性抑制了三维城市模型的广泛运用,为了满足多个应用领域的信息需要,必须引进一个更一般的建模方法。但随着研究的深入,人们发现建立一个通用的3DGIS平台目前尚不具备条件[1]。因此,研究一种新的标记语言,使之具有较强的表达、检索和共享三维地理信息的能力,将极大地促进三维城市GIS的发展和应用,促进三维地理信息的共享,也为数字地球建设鉴定基础。
CityGML(City Geography Markup Language,城市地理标记语言)的出现为三维地理信息的广泛应用和共享带来了契机。越来越多的应用系统在CityGML数据基础上进行了扩展[2~3]。CityGML是一个为不同应用领域共享的3D城市对象表现的通用语义信息模型。它定义了与城市最密切相关的地理对象的类和局部模型之间的关系,包括几何属性、拓扑属性、语义属性和外观属性。虚拟3D城市模型除了包括语义和几何特性之外,还有一个重要的部分——外观信息。外观不仅仅是地物表面的一种可见的属性,它还和任何基于表面的专题相关,例如红外辐射、噪声污染[4]。因此,外观数据可用来作为虚拟三维城市模型的呈现和分析的数据准备。CityGML为每一个城市模型的要素外观支持任意数量的主题,每一个要素的连贯细节层次可以有各自的外观,本文就CityGML的外观模型进行探讨,以期望对三维城市的外观表现提供一些借鉴。
2 外观模型
2.1 外观、要素和几何的关系
GML中的要素是指使用GML编码的要素,例如一条公路、一条河、一个人、一辆车、一块行政区域、一个事件等等。相应的,在CityGML应用中要素可以是与城市相关的一切,如城市的范围、交通设施、城市建筑、园林绿地等等。外观是地物表面的一种可见的属性,它和任何基于表面的主题相关,例如在CityGML中不仅仅指可见的地物外表,还可以指红外辐射、噪声污染。
在GML模式中定义了一系列的几何原型,包括一维的、二维的、三维的几何类型。gml:AbstractSurface-Type在GML模式中属于二维几何原型,它是面的抽象化,用来支持不同层次的复合体,Surface通常是指连续的平面区域,如道路、水面等等。一般来说,通过使用gml:AbstractSurfaceType的子类来表达GML表面,这些表面应当是连续的。但是实际上获取的现实世界的表面通常是不能保证连续的,所以CityGML允许在不同场合用gml:MultiSurface(由一个或多个gml:AbstractSurfaces定义)表达要素的边界,以此来替代连续的表面。
另外,每一个CityObject要素可以储存表面数据。因此表面数据布置在CityGML数据集的特征层次中。表面数据通过使用URI链接到它的目标面。即使链接机制允许任意的链接穿过一个特征面到另一个特征面,也推荐遵循局部性原理:表面数据应当存储,这样被链接的表面只有隶属于内含的CityObject要素和它的子类。“全局”表面数据应该和城市模型一起存储。2.2 外观和表面数据
一个外观由面几何对象的数据(如表面数据)组成。单一的面几何对象可能有多个主题的表面数据。类似的,表面数据也可以为多面几何对象(如铺设的道路)所共享。一个表面的表面数据值可以是恒定不变的,或是依赖于在表面内部的确切位置。外观对象为特定的主题(可以是独立的要素或任意连贯细节层次的整个城市模型)收集有关的表面数据,要素类Appearance为表面数据对象定义了一个容器。它提供了theme,所有包含的表面数据对象与之相关。在CityGML的外观模型中,只用一个标识符代表主题,在给定主题的城市模型外观由引用该专题的一套Appearance对象定义。因此,隶属于同一个主题的Appearance对象组成一个虚拟组,同一主题的所有外观对象可以认为是一个组的,它们可以在CityGML数据集中不同的位置。
_SurfaceData对象代表了表面数据,它的每一个子类对象覆盖面几何对象的整个区域。表面数据和面几何对象之间的关系通过一个URI链接来表达,该链接能够从一个_SurfaceData对象链接到一个gml:AbstractSurfaceType类型或gml:MultiSurface类型的对象。表面数据对象被存储在surfaceDataMember属性中。它们可作为远程属性,同时用于多个专题中。要素类_ SurfaceData是材质和纹理的基类。它仅有的元素是布尔标记isFront,该标记决定了一个表面数据对象适用的侧面。外观成员appearanceMember的定义顾及到了CityObject要素的任意的甚至是混合的序列,还考虑了CityModel要素集合内部的外观要素。为了存储含有单一CityObject要素的外观信息,属性元素appearance扩充了核心模块相应的抽象类_CityObject。通过使用CityGML的应用领域扩展机制将增加的属性apppearance添加进了_CityObject。这意味着_CityObject的每一个专题子类都继承该属性。因此,定义_CityObject的专题子类使得apppearance模块对每一个扩展模块都有深远的影响。根据上面的阐述,外观成员appearanceMember和外观appearance的定义为:
<xs:element name="appearanceMember"type="AppearancePropertyType"substitutionGroup="gm l:featureMember"/>
<xs:element name="appearance"type="AppearancePropertyType"substitutionGroup="core:_GenericApplicationPropertyOf-CityObject"/>
外观表面数据类型AbstractSurfaceDataType,表面数据_SurfaceData,表面数据属性类型SurfaceDataPropertyType的定义如下:
2.3 材质、纹理和纹理映射
一个恒定的面属性被塑造为材质。依赖于表面内部定位的面属性被塑造为纹理。对每个专题和侧面来说,每一个面几何对象可以同时具有材质和纹理。同时还要考虑到给面属性提供一个近似值常量和一个复杂的尺寸。如果面几何对象要获取多个纹理或材质,那么每一个纹理或材质都需要一个单独的主题。
材质反映了光的反射性能,对于整个表面几何对象来说是不变的。X3DMaterial类的定义取自X3D和COLLADA规范。diffuseColor定义了扩散反射光的颜色。specularColor定义了直反射光的颜色。emissiveColor是由表面产生的光的颜色。所有颜色使用RGB值,red、green、blue分别取值0和1。透明度使用transparency元素定义,0代表完全不透明,1代表完全透明。ambientIntensity定义了diffuseColor的最小百分比,不管有没有光源它都是可见的。shininess管理高光的清晰度,取值0代表产生了一个柔和的光芒,取值1代表产生了尖锐的光亮。isSmooth为正常插值提供了提示,如果这个布尔值标记设置成“true”,那么顶点法线应当用作阴影。否则,法线对于表面应该是不变的。
CityGML中的纹理通常是基于栅格的二维纹理。栅格图像由imageURI使用一个URI来指定,它可以成为任意的图像数据源甚至是网络服务的格式化请求。在mimeType元素中可以使用标准的MIME类型定义图像数据格式。
textureType属性可以限制纹理。对于一个确定的对象来说,textureType与纹理之间的区别是特殊的,原型结构对于对象表面是特有的。纹理也可能属于未知的。纹理包装取自COLLADA标准。当在基本图像栅格外访问一个纹理时需要纹理包装。wrapMode可以是5个值中的一个:
①none-最终颜色是完全透明的;
②wrap-纹理是重复的;
③mirror-纹理是重复的并且是镜像的;
④clamp-纹理被边缘所包夹;
⑤border-borderColor元素(RGBA)指定最终颜色。
图1展示了这些包装模型的效果,其中a图是基本图像栅格,图1(b)~图1(f)是wrapMode分别取none、wrap、mirror、clamp、border所呈现的效果。
图1 纹理包装模型效果图
GeoreferencedTexture类描述了使用平面投影的纹理。这样一个纹理具有独特的映射函数,该函数经常提供图像文件或作为一个单独的Esri文件。referencePoint定义了世界空间中的左上方图像像素中心的位置。因为GeoreferencedTexture使用了平面投影,所以referencePoin是二维的。Orientation定义了图像旋转和缩放的2×2阶矩阵。该变换的坐标参考系CRS是与referencePoint的CRS相同的。由一个referencePoint的CRS平面点(x,y)T转变为纹理空间中的点(s,t)T使用式(1):
M表示方向,PR表示referencePoint,w表示以像素为单位的图像宽度,h表示以像素为单位的图像高度。
ParameterizedTexture类描述了一个具有目标依赖映射函数的纹理。由_TextureParameterization类的子类定义的映射作为目标表面几何对象的链接的一个属性。每一个目标表面几何对象在一个单独目标元素的uri属性中被指定为URI。因为target实现了gml:Association-AttributeGroup,它允许使用xlink:href属性引用一个远程的_TextureParameterization对象,例如在不同专题中目标或纹理之间共享一个映射函数。映射函数通过Tex-CoordList类可以使用纹理坐标的概念,也可以通过Tex-CoordGen类使用变换矩阵从世界空间转换到纹理空间。
纹理坐标只适用于多边形表面,这种多边形的边界由gm l:LinearRing(如gm l:Triangle,gm l:Polygon或gml:MultiSurface组成gml:Polygons)来描述。它们定义了一个表面顶点到纹理空间点的显式映射,如包含内环顶点的每一个顶点必须接收一个相应的纹理空间坐标对,在图2中,1、6、7、8接收纹理坐标对。内部表面点的纹理坐标从顶点的纹理坐标平面插入。
图2 使用纹理坐标的纹理定位
使用TexCoordList类指定目标表面几何对象的纹理坐标作为纹理的target属性中的纹理参数化对象。组成目标表面几何对象的边界的每一个外部或内部的gml:LinearRing都需要它自身的纹理坐标设置。使用TexCoordList类的textureCoordinates元素指定一组纹理坐标。映射函数通过TexCoordList类可以使用纹理坐标(s,t)T计算出空间位置(x,y,z)T,也可以通过TexCoordGen类使用变换矩阵从世界空间转换到纹理空间。另外,worldToTexture元素使用了gml:SRSReferenceGroup属性定义它的CRS。世界空间中的定位在变换矩阵应用之前必须首先转换到这个CRS中。
以下结构形成了worldToTexture变换,该过程模仿了城市模型世界空间投影一个定位到纹理空间中的定位的过程:
在式(2)中,f表示焦距;w和h代表图像传感器的外形尺寸;→r,→u和→d定义了摄影机的参考相框作为世界坐标中表达的右、上和摄影方向上的单位向量;P代表摄影机在世界空间中的位置,图3描绘了这些方向和位置。
图3 纹理空间中的坐标轴方向和摄影机位置
worldToTexture的另一个作用是用复杂几何体构成立面而不用为每一个gml:LinearRing都指定纹理坐标。相反,只有使用TexCoordGen作为参数化才能使立面的聚合表面变成纹理目标。然后,worldToTexture有效地编码一种世界空间的正射投影到纹理空间中去。
3 外观模型应用实例
本例中CityGML数据集基于简单建筑物模型,它以给定的几何呈现了两个连贯细节层次:LOD1、LOD2。此外,数据集定义了两个独立的外观主题:夏季主题和冬季主题,用来描述建筑物及其周边地形的不同视觉外观。每一个连贯细节层次都有一个应用于特定主题的独立外观。在这个数据集中,使用了一些CityGML外观模型的概念,如appearanceMember、Appearance、surfaceDataMember、X3DMaterial、GeoreferencedTexture等。关于外观的构建,部分代码如下:
<cityObjectMember>
<bldg:Building gm l:id="Build0815">
<bldg:yearOfConstruction>2007</bldg:yearOfConstruction>
<bldg:measuredHeight uom="#m">5.0</bldg:measured-Height>
<bldg:lod1Solid>……..</bldg:lod1Solid>
<bldg:lod2Solid>……..</bldg:lod2Solid>
</bldg:Building>
</cityObjectMember>
<app:appearanceMember>
<app:Appearance>
<app:theme>Summer</app:theme>
<app:surfaceDataMember>
<app:X3DMaterial gml:id="lod1Material">
<app:diffuseColor>1.0 0.6 0.0</app:diffuseColor>
<app:target>#lod1Surface</app:target>
</app:X3DMaterial>
</app:surfaceDataMember>
………………………
</app:Appearance>
</app:appearanceMember>
<app:appearanceMember>
<app:Appearance>
<app:theme>Winter</app:theme>
<app:surfaceDataMember>
<app:GeoreferencedTexture>
<app:imageURI>ground_winter.png</app:imageURI>
<app:wrapMode>none</app:wrapMode>
<app:referencePoint>
<gml:Point>
<gml:pos srsDimension="2">458870 5438360</gml:pos>
</gml:Point>
</app:referencePoint>
<app:orientation>0.05 0.0 0.0-0.05</app:orientation>
<app:target>#ground</app:target>
<app:target>#lod1RoofPoly1</app:target>
<app:target>#lod2RoofPoly1</app:target>
<app:target>#lod2RoofPoly2</app:target>
</app:GeoreferencedTexture>
</app:surfaceDataMember>
<app:surfaceDataMember xlink:href="#lod1Material"/>
<app:surfaceDataMember xlink:href="#sideTexture"/>
<app:surfaceDataMember>
<app:ParameterizedTexture>
<app:imageURI>front_back_winter.png</app:imageURI>
<app:wrapMode>none</app:wrapMode>
<app:target uri="#fFront"xlink:href="#frontTexCoord"/>
<app:target uri="#fBack"xlink:href="#backTexCoord"/>
</app:ParameterizedTexture>
</app:surfaceDataMember>
</app:Appearance>
</app:appearanceMember>
对于第一个连贯细节层次LOD1,X3DMaterial对象定义了整个建筑物外观的材质,除此之外,GeoreferencedTexture对象被同时应用到地形以及建筑物的屋顶表面。在LOD2层次上,建筑物的垂直表面单独使用ParameterizedTexture对象进行纹理化处理,而屋顶表面和地形再次使用GeoreferencedTexture对象来描述。数据集中GeoreferencedTexture对象用到的纹理映射也使用Esri格式。建模的结果产生了数据集的四幅视觉效果图,如图4和5所示。
图4 CityGML的外观模型以LOD1呈现简单建筑物及其周边地形
图5 CityGML的外观模型以LOD2呈现简单建筑物及其周边地形
数据集中使用ParameterizedTexture对象纹理化LOD2层次的建筑物垂直边界面,通过使用纹理包装模型wrap将facade.png图像(如图6所示)设定为侧面,并且该图像同时应用于夏季和冬季两个主题中。
图6 用于建筑墙身的侧面
4 结 语
CityGML1.0可以从语义上对城市建筑物三维模型进行描述,并可以在广域网环境下实现建筑物三维模型的传输、共享和互操作[5]。CityGML提供通用共享模型和应用扩展机制,用以支持各应用领域基于CityGML构建自己的专题模型,实现在CityGML框架下的统一建模和信息共享[6]。在CityGML的众多模型中,外观模型为虚拟三维城市的建模提供了较为直观地显示和便利。可以利用建筑物和城市设施等的外观模型来构建我们期望得到的外观,指导城市景观设计,在合理构建和规划城市以及三维城市建模和信息共享方面起到积极显著的作用。同时可以期待当CityGML成为OGC标准之后,会得到更多GIS平台的支持[7],无疑会使得外观模型的构建更加快速和美观。
[1] 孙敏,马蔼乃,陈军.3DCM的研究现状评述[J].遥感学报,2002,6(2):155~159.
[2] 陈引川.对城市地理标记语言(CityGML)的探讨[J].测绘科学,2009,34(5):145~146.
[3] 葛广昊.基于CityGML的大型建筑室内三维模型研究[D].南京:南京师范大学,2011.
[4] Gerhard Groger,Thomas H.Kolbe,etc.OpenGISCity Geography Markup Language(CityGML)Encoding Standard Version 1.0.0[S/OL].http://www.opengeospatial.org/standards/citygm l.
[5] 陈引川,王青山.基于CityGML的城市建筑物三维建模研究[J].北京测绘,2011(3):8~10.
[6] 欧阳群东,巫兆聪,胡忠文,邓媛媛.CityGML应用领域三维建模研究[J].测绘科学,2011,36(3):166~168.
[7] 柳翠明.三维城市模型CityGML初探[J].城市勘测,2010(S1):5~7,42.
Discussion on the Appearance of the M odel Based on OpenGISCityGM L
Guan Ying,Tong Lingfei,Zhang Xudong
(1.Architecture and Engineering of Surveying and Mapping Institute of Jiangxi University of Science and Technology,Ganzhou 341000,China; 2.Suzhou Industrial Park Limited Liability Company of Surveying and Mapping,Suzhou 215021,China)
This article proposes the appearancemodel of CityGML from the lack of a virtual citymodel of the current 3D city GIS,it is important characteristics in a virtual3D citymodel except semantic and geometric characteristics,analyzes the relationship between feature and geometry in the appearancemodel and the function of the surface data related to the appearancemold related and make use ofmaterial,texture and texture mapping,studies the texture coordinates,the texture of packagingmodel,texturemapping function and its transformation matrix,and the concrete application example of the appearancemodel is given simultaneously.
CityGML;the appearancemodel;texture
1672-8262(2013)01-51-05
P208.2文献标识码:A
2012—06—06
关颖(1985—),女,硕士研究生,研究方向为:地理信息共享与互操作、地理信息系统应用研究。
中除去语义和几何特性之外的重要特性,探讨分析了外观模型中外观与要素和几何关系,与外观模型相关的表面数
据的作用以及材质、纹理和纹理映射的使用,研究了纹理坐标、纹理包装模型、纹理映射函数及其转换矩阵,同时给出
了外观模型的具体应用实例。