国际开放地理信息协会

提交日期:   <2008-05-19>

批准日期:   <2012-03-09>

出版日期:   <2012-04-04>

本OGC®文件的外部标识符: http://www.opengis.net/spec/citygml/2.0

本OGC®文件的内部参考号:    12-019

类别: OGC®编码标准

编辑:   Gerhard Gröger, Thomas H. Kolbe, Claus Nagel, Karl-Heinz Häfele

OGC城市地理标记语言(CityGML)编码标准

版权声明

版权 © <2012> 国际开放地理信息协会

若要获得额外的使用权,请访问 http://www.opengeospatial.org/legal/

警告

本文件是由OGC成员批准的国际标准。本文件以免版税、无歧视的方式提供。本文件的获得者被邀请提交所知的任何相关专利权的声明及评论,并提供证明文件。

文件类型:    OGC®编码标准

文件子类型:   编码

文件阶段:    批准公开发布

文件语言:    中文

OGC China(OGC中国联盟)简介

OGC,英文全称Open Geospatial Consortium,中文可以称国际开放地理信息协会,1994年成立,是一个国际化的自愿协商的组织联盟,旨在通过一系列的敏捷协作研发和开放标准制定,解决地理空间与位置信息可发现、可访问、可互操作、可重用中面临的挑战,提升地理空间信息与位置服务的能力,全球各国地理信息相关人员、组织都可以申请加入。

2017年,经与OGC亚太区负责人沟通,OGC中国联盟成立。经过两三年的发展,从最初联盟发起时的6家单位发展到现在的20多家会员,包括国内代表性的高校,国内主要的地理信息厂商等,旨在促进中国对地理空间软件和数据开放标准的使用和理解,并影响这些标准的定义,同时为空间数据产品和服务的开发人员和用户提供一个协作的平台,共同制定一套符合中国要求的标准。我们希望通过OGC中国联盟,交流经验,无论是高校还是企业,都能在OGC技术工作中发现问题,参与更多的工作组工作,一起在国际标准制定中发挥更大作用。

OGC中国联盟的工作计划:

  • 根据中国国家政策,培养对地理空间互操作性最佳实践的认识和实施

  • 开发一套中国领导的OGC标准,适应中国的问题、用例和组织特性

  • 定期协调中国GIS学会年会互操作会议的组织工作

  • 推动更多的中国组织机构包括企业、政府机构、高校加入OGC中国联盟,提升中国国际话语权、影响力

  • 支持OGC的全球推广和亚太地区项目,以进一步推进OGC的全球使命

联系方式:

电话:027-6878169
Email:pyue@whu.edu.cn
邮编:400379
地址:湖北省武汉市珞喻路129号武汉大学遥感信息工程学院
官方公众号:国际开放地理信息OGC联盟
网址: https://external.ogc.org/twiki_public/ChinaForum

srcode

译者序

当前,全国各地均在积极规划和推进三维城市的建设,从数字城市到智慧城市,再到数字孪生城市,随着信息技术和信息采集技术日新月异,三维城市的内涵和理念也在不断的延伸和丰富。数据是三维城市建设的基石,然而,现阶段三维城市建设中采用的三维模型多以摄影测量技术采集而得的地物表面模型为主,较注重三维可视化效果,而缺乏语义和拓扑关系的表达,难以用于查询、分析或空间数据挖掘,并且采用数据格式缺乏一致性,导致互操作性困难,抑制了三维城市模型的进一步应用与发展。

OGC CityGML标准的提出为虚拟三维城市模型的可重用提供了一个有效的方案。CityGML是一种基于XML的虚拟三维城市模型的存储和交换格式,以模块化的方式定义了三维城市模型中最常见的对象,并兼顾了城市中三维对象的几何、拓扑、语义、外观等方面的属性。CityGML所有对象和主题类均支持多级别细节层次模型,适用于三维城市的多尺度表达,既可表示没有拓扑和语义的单一简单模型,也可以表示具有完整拓扑和细粒度语义的复杂多尺度模型。除定义的建筑物,桥梁、植被、水体、城市家具等三维城市最重要的对象外,CityGML也可通过定义应用领域扩展(ADEs)将其扩展到特定的领域,例如城市气体污染扩散模拟、光辐射潜力分析、城市环境噪声扩散模拟、视线和阴影分析等。CityGML已经在全世界范围内被广泛传播,如德国、法国,美过、英国、荷兰、丹麦、苏黎世、利沃登、日本、伊斯坦布尔等国家或城市,均使用CityGML进行三维城市模型的表达和交换,支撑其三维地理信息标准和三维空间数据基础设施的建设。许多商业和学术工具也通过接口的方式来支持CityGML的使用,例如,SAFE软件公司的转换工具FME、Bentley Systems的BentleyMap、Autodesk的LandXplorer、KIT Karlsruhe的FZKViewer、以及CPA Geo Information的SupportGIS等工具均支持CityGML的读写。因此,通过CityGML标准,可以轻松实现虚拟三维城市模型在不同地理信息系统和用户之间的信息无损交换。

在全国各地都在稳步推进智慧城市或数字孪生城市的今天,CityGML这种通用虚拟三维城市模型存储和和交换格式标准的重要性愈加凸现。鉴于现有CityGML英文标准给国内技术人员带来了一定的语言门槛,也为推动CityGML标准更好服务于国内的智慧城市和数字孪生城市的建设,OGC China翻译了OGC CityGML编码标准2.0版本,向国内GIS及相关行业的科研和工作人员提供自由免费的中文版本。

本标准翻译工作的情况如下:林旭辉(英国伦敦大学校友会)负责第0-3章节的翻译和排版、第10章节的翻译和排版,以及附录A-K的翻译;于大宇(武汉大学)参与了所有格式和内容的审校及所有章节的排版;张勇(郑州众合景轩信息技术有限公司)负责第7-9章节的翻译和排版,以及附录A-K的排版;黄栋(泰瑞数创科技(北京)有限公司)负责第4-6章节的翻译和排版;杨滔、罗维祯和邓成汝协助了林旭辉的翻译和排版工作;乐鹏(武汉大学)负责翻译工作的组织协调、统稿与修订。

虽然译者尽量地以“信、达、雅”为标准还原作者的本意,但仍难免有疏漏之处,如读者发现任何不理想之处,望能不吝赐教,我们将随时予以纠正。

OGC中国联盟
2021年11月4日

本文件引用格式:OGC中国联盟, 2021. OGC城市地理标记语言(CityGML)编码标准中文版. 译者: 林旭辉, 于大宇, 张勇, 黄栋, 乐鹏, 杨滔, 罗维祯, 邓成汝.

许可协议

国际开放地理信息协会(“许可方”)特此授权获得本知识产权及任何相关文件副本的任何人,在不受限制的情况下(下文规定的除外)处理本知识产权,允许获得本知识产权的人具有包括但不限于实施、使用、复制、修改、合并、出版、分发和/或转授本知识产权副本的权利,但必须完整地保留本知识产权上的所有版权声明(译注:此处版权声明指英文原版),且同意本协议的所有条款。

如果您修改了本知识产权,除了上述版权声明外,经修改的知识产权的所有副本必须包括一项声明,以表明该知识产权包括未经授权人批准或采纳的修改。

本许可仅为版权许可,不传达可能在世界任何地方生效的任何专利下的任何权利。

本知识产权“按原样”提供,不作任何明示或暗示的保证,包括但不限于对适销性、特定用途的适用性和不侵犯第三方权利的保证。本声明中包含的一个或多个版权持有人不保证本知识产权中包含的功能将满足您的要求,也不保证本知识产权的运作不会中断或没有错误。对本知识产权的任何使用应完全由用户自己承担风险。在任何情况下,版权持有人或本知识产权的任何贡献者对任何索赔,或任何直接、特殊、间接后果性损害,或因实施、使用、商业化或履行本知识产权而引起的或与之相关的任何涉嫌侵权或任何数据、利润的损失(无论是在合同诉讼、疏忽或任何其他法律理论下)而造成的任何损害概不负责。

本许可在终止之前一直有效,您可以在任何时候通过销毁本知识产权及任何形式的副本来终止它。如果您未能遵守本协议的任何条款或条件,本许可也将终止。除下述规定外,本许可证的终止不要求终止自终止通知之日起生效的任何第三方最终用户对本知识产权的再许可。此外,如果该知识产权或该知识产权的运作侵犯了或在许可方看来可能侵犯了第三方的任何专利、版权、商标或其他权利,您同意许可方可自行决定终止本许可,而无需对您、您的被许可人及任何其同伴进行任何赔偿或承担责任。您同意在许可任何形式终止后,销毁本知识产权以及任何形式的所有副本,无论是由您还是由第三方持有。

除本通知所包含的内容外,未经许可方或任何其他知识产权版权持有人的事先书面授权,许可方或任何其他知识产权版权持有人的姓名不得用于广告或以其他方式促进本知识产权的销售、使用或其他交易。许可方是且在任何时候都唯一可以授权您或任何第三方使用认证标志、商标或其它可表明符合任何许可方标准或规范的特殊名称。本协议受马萨诸塞州法律管辖。特此明确排除《联合国国际货物销售合同公约》对本协定的适用。如果本协议的任何条款被视为不可执行、无效或无效,则应修改该条款以使其有效和可执行,经修改后,整个协议应保持完全效力。许可方的任何决定、作为或不作为均不得被解释为放弃其享有的任何权利或补救措施。

License Agreement

Permission is hereby granted by the Open Geospatial Consortium, ("Licensor"), free of charge and subject to the terms set forth below, to any person obtaining a copy of this Intellectual Property and any associated documentation, to deal in the Intellectual Property without restriction (except as set forth below), including without limitation the rights to implement, use, copy, modify, merge, publish, distribute, and/or sublicense copies of the Intellectual Property, and to permit persons to whom the Intellectual Property is furnished to do so, provided that all copyright notices on the intellectual property are retained intact and that each person to whom the Intellectual Property is furnished agrees to the terms of this Agreement.

If you modify the Intellectual Property, all copies of the modified Intellectual Property must include, in addition to the above copyright notice, a notice that the Intellectual Property includes modifications that have not been approved or adopted by LICENSOR.

THIS LICENSE IS A COPYRIGHT LICENSE ONLY, AND DOES NOT CONVEY ANY RIGHTS UNDER ANY PATENTS THAT MAY BE IN FORCE ANYWHERE IN THE WORLD.

THE INTELLECTUAL PROPERTY IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE DO NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE INTELLECTUAL PROPERTY WILL MEET YOUR REQUIREMENTS OR THAT THE OPERATION OF THE INTELLECTUAL PROPERTY WILL BE UNINTERRUPTED OR ERROR FREE. ANY USE OF THE INTELLECTUAL PROPERTY SHALL BE MADE ENTIRELY AT THE USER’S OWN RISK. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ANY CONTRIBUTOR OF INTELLECTUAL PROPERTY RIGHTS TO THE INTELLECTUAL PROPERTY BE LIABLE FOR ANY CLAIM, OR ANY DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM ANY ALLEGED INFRINGEMENT OR ANY LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR UNDER ANY OTHER LEGAL THEORY, ARISING OUT OF OR IN CONNECTION WITH THE IMPLEMENTATION, USE, COMMERCIALIZATION OR PERFORMANCE OF THIS INTELLECTUAL PROPERTY.

This license is effective until terminated. You may terminate it at any time by destroying the Intellectual Property together with all copies in any form. The license will also terminate if you fail to comply with any term or condition of this Agreement. Except as provided in the following sentence, no such termination of this license shall require the termination of any third party end-user sublicense to the Intellectual Property which is in force as of the date of notice of such termination. In addition, should the Intellectual Property, or the operation of the Intellectual Property, infringe, or in LICENSOR’s sole opinion be likely to infringe, any patent, copyright, trademark or other right of a third party, you agree that LICENSOR, in its sole discretion, may terminate this license without any compensation or liability to you, your licensees or any other party. You agree upon termination of any kind to destroy or cause to be destroyed the Intellectual Property together with all copies in any form, whether held by you or by any third party.

Except as contained in this notice, the name of LICENSOR or of any other holder of a copyright in all or part of the Intellectual Property shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Intellectual Property without prior written authorization of LICENSOR or such copyright holder. LICENSOR is and shall at all times be the sole entity that may authorize you or any third party to use certification marks, trademarks or other special designations to indicate compliance with any LICENSOR standards or specifications. This Agreement is governed by the laws of the Commonwealth of Massachusetts. The application to this Agreement of the United Nations Convention on Contracts for the International Sale of Goods is hereby expressly excluded. In the event any provision of this Agreement shall be deemed unenforceable, void or invalid, such provision shall be modified so as to make it valid and enforceable, and as so modified the entire Agreement shall remain in full force and effect. No decision, action or inaction by LICENSOR shall be construed to be a waiver of any rights or remedies available to it.

i. 摘要

CityGML是一个基于XML的开放数据模型,主要用于存储和交换虚拟3D城市模型。它是地理标记语言(版本号v3.1.1,GML3)的一个具体应用模式, 由国际开放地理信息协会(OGC)和国际标准化组织211技术委员会(ISO TC211)发布的,针对于空间数据交换的可扩展国际标准。CityGML开发的目标是实现对三维城市模型的基本实体、属性和关系的共同定义。该格式对于3D城市模型的低成本可持续维护尤其重要,允许相同数据在不同领域里的复用。

ii. 前言和致谢

CityGML官方标识

上图为CityGML的官方标识。为浏览CityGML最新新闻及资讯,以及关于CityGML领域正在进行的项目和研究领域,请参阅 http://www.citygml.orghttp://www.citygmlwiki.org

OGC官方标识

CityGML的工作由OGC三维信息管理(3DIM)工作组进行讨论和协调,其最初是作为OGC创新计划第四期网络服务(OWS-4)中CAD/GIS/BIM专题的一部分进行实施和评估。

本标准文件的2.0版由OGC CityGML标准工作组(SWG)编写。未来的讨论和发展将由3DIM工作组领导。

欲了解更多信息,请访问 http://www.opengeospatial.org/projects/groups/3dimwg

SIG3d官方标识 GDI-DE官方标识

CityGML也将继续由德国空间数据基础设施(GDI-DE)的3D特别兴趣小组(SIG 3D)成员与OGC中的3DIM工作组和CityGML SWG联合开发。

欲了解更多信息,请访问 http://www.sig3d.org/

欧洲空间数据研究组织官方标识

英文文件的编写和欧洲讨论会议得到了欧洲空间数据研究组织(EuroSDR,前身为OEEPE)第Ⅲ委员会项目的支持。

欲了解更多信息,请访问 http://www.eurosdr.net

iii. 提交组织

本国际标准是由OGC的CityGML 1.0 SWG成员提交至OGC。其中包括以下组织:

  1. Autodesk,Inc.(主要提交方)。

  2. Bentley System, Inc (主要提交方)。

  3. 柏林技术大学(技术提交方)。

  4. 英国军械测量局。

  5. 德国波恩大学。

  6. 德国哈索·普拉特纳研究所-波茨坦大学IT系统工程研究所。

  7. 卡尔斯鲁厄理工学院应用计算机科学研究所。

CityGML最初由SIG 3D开发,2002-2012- http://www.citygml.org

iv. 提交组织的联系方式

有关本文档的所有问题可直接向编辑或贡献者(包括开发人员,参见第V条)提出:

姓名 组织 邮箱

Prof. Dr. Thomas H.Kolbe

Institute for Geodesy and Geoinformation Science, Technical University Berlin

thomas.kolbe@tu-berlin.de

Claus Nagel

claus.nagel@tu-berlin.de

Alexandra Lorenz

alexandra.lorenz@tu-berlin.de

Dr. Gerhard Gröger

Institute for Geodesy and Geoinformation, Univer-sity of Bonn

groeger@ikg.uni-bonn.de

Prof. Dr. Lutz Plümer

pluemer@ikg.uni-bonn.de

Angela Czerwinski

czerwinski@ikg.uni-bonn.de

Haik Lorenz

Autodesk, Inc.

haik.lorenz@autodesk.com

Alain Lapierre

Bentley Systems, Inc.

alain.lapierre@bentley.com

Stefan Apfel

frank.steggink@bentley.com

Paul Scarponcini

paul.scarponcini@bentley.com

Carsten Rönsdorf

Ordnance Survey, Great Britain

Car-sten.Roensdorf@ordnancesurvey.co.uk

Prof. Dr. Jürgen Döllner

Hasso-Plattner-Institute for IT Systems Engineering, University of Potsdam

juergen.doellner@hpi.uni-potsdam.de

Dr. Joachim Benner

Institute for Applied Computer Science, Karlsruhe Institute of Technology

joachim.benner@kit.edu

Karl-Heinz Häfele

karl-heinz.haefele@kit.edu

v. 开发人员

姓名 组织

Ulrich Gruber

District Administration Recklinghausen, Cadastre Department, Germany

Sandra Schlüter

Frank Bildstein

Rheinmetall Defence Electronics, Germany

Rüdiger Drees

T-Systems Enterprise Services GmbH, Bonn, Germany

Andreas Kohlhaas

GIStec GmbH (formerly), Germany

Frank Thiemann

Institute for Cartography and Geoinformatics, University of Hannover

Martin Degen

Cadastre Department, City of Dortmund

Heinrich Geerling

Architekturbüro Geerling, Germany

Dr. Frank Knospe

Cadastre and Mapping Department, City of Essen,

Hardo Müller

Snowflake Software Ltd., Great Britain

Martin Rechner

rechner logistic, Germany

Jörg Haist

Fraunhofer Institute for Computer Graphics (IGD), Darmstadt, Germany

Daniel Holweg

Prof. Dr. Peter A. Henning

Faculty for Computer Science, University of Applied Sciences, Karlsruhe, Germany

Rolf Wegener

State Cadastre and Mapping Agency of North-Rhine Westphalia, Germany

Stephan Heitmann

Prof. Dr. Marc-O. Löwner

Institute for Geodesy and Photogrammetry, Technical University of Braunschweig

Dr. Egbert Casper

Zerna Ingenieure, Germany

Christian Dahmen

con terra GmbH, Germany

Nobuhiro Ishimaru

Hitachi, Ltd., Japan

Kishiko Maruyama

Eiichiro Umino

Takahiro Hirose

Linda van den Brink

Geonovum, The Netherlands

Ron Lake

Galdos Systems Inc., Canada

David Burggraf

Marie-Lise Vautier

Institut géographique national, France

Emmanuel Devys

Mark Pendlington

vi. 对OGC抽象规范的更改

该OGC®标准遵循现有的OGC®抽象规范。

vii. 致谢

SIG 3D组织感谢OGC的CityGML SWG和3DIM工作组成员, 以及所有提出修改请求和意见的贡献者。

如下:

Tim Case, Scott Simmons, Paul Cote, Clemens Portele, Jeffrey Bell, Chris Body, Greg Buehler, François Golay, John Herring, Jury Konga, Kai-Uwe Krause, Gavin Park, Richard Pearsall, George Percivall, Mauro Salvemini, Alessandro Triglia, David Wesloh, Tim Wilson, Greg Yetman, Jim Farley, Cliff Behrens, Lukas Herman, Danny Kita, Simon Cox

感谢对本标准进行仔细审阅并评论的贡献者:

Ludvig Emgard, Bettina Petzold, Dave Captick, Mark Pendlington, Alain Lapierre, Frank Steggink.

序言

Note
请注意,本文件的某些内容涉及到专利权的问题。OGC不承担任何或识别出任意一项专利的责任。到目前为止,还没有人对该情况进行申辩。为避免该标准的发放导致相关知识产权受损,请对该文本保持有疑义的读者提交对本标准的意见,提交相关专利声明或知识产权相关的内容,并提交对应文件。

CityGML 2.0.0版本和CityGML 1.0.0版本(OGC doc No.08-007r1)之间的重大变化:

  • 表达隧道和桥梁表示的新主题模块;

  • 用于建筑和建筑部件外壳语义分类的附加边界表面(OuterCeilingSurface, OuterFloorSurface);

  • 建筑物和建筑部件中的底面轮廓和屋顶边界的LOD0表达;

  • 表达城市对象相对于周围地形和水面位置的附加属性(relativeToTerrain, relativeToWater);

  • 测量值和属性集的附加通用属性。

  • CityGML代码列表机制的重新设计(枚举属性现在属于 gml:codetype 类型,有助于提供枚举其可能属性值的附加代码列表)。

将现有的CityGML 1.0实例迁移到有效的2.0实例,只需要将文档中的CityGML命名空间和模式位置值更改为CityGML 2.0即可。

0. 引言

0.1. 动机

越来越多的城市和公司正在为城市规划、移动通信、灾害管理、三维地籍、旅游、车辆和行人导航、设施管理和环境模拟等不同的应用领域构建虚拟三维城市模型。此外,在欧洲环境噪声导则(END,2002/49/EC)的实施过程中,三维地理信息和三维城市模型发挥了重要作用。

近年来,大多数虚拟三维城市模型被定义为纯图形或几何模型,忽略了语义和拓扑方面的内容。因此,这些模型几乎只能用于可视化目的,而不能用于主题查询、分析任务或空间数据挖掘。由于模型的有限可重用性抑制了三维城市模型的广泛应用,因此必须采用一种更通用的建模方法,以满足不同应用领域的信息需求。

CityGML是一种用于表示三维城市对象的通用语义信息模型。CityGML可在不同应用程序之间共享,对于3D城市模型的低成本、可持续维护尤为重要,这可允许相同数据在不同领域里的复用。可显著应用CityGML的领域包括城市规划、建筑设计、旅游休闲活动、环境模拟、移动通信、灾害管理、国土安全、房地产管理、车辆和行人导航、培训模拟器等。

CityGML是一种基于XML的格式地开放数据模型,用于虚拟三维城市模型的存储和交换。它是作为GML3的一个具体应用模式实现,GML3是由OGC和ISO TC211发布的空间数据交换和编码的可扩展国际标准。CityGML基于ISO 191xx系列、OGC、万维网联盟(W3C)、Web3D联盟(W3D)和结构化信息标准推进组织(OASIS)的多种国际标准。

CityGML定义了城市和区域模型中最相关的对象类别及之间的关系,涉及到其几何、拓扑、语义和外观属性。“城市”的定义很宽泛,不仅包括建筑结构,还包括高程、植被、水体、城市家具等等。CityGML也包括了主题类、聚合、对象之间的关系和空间属性之间的细节层次模型。CityGML同时适用于大区域和小区域,可以表示不同细节层次的地形和三维对象。由于CityGML可以表示没有拓扑和语义的单一简单模型,也可以表示具有完整拓扑和细粒度语义差异的复杂多尺度模型,因此CityGML可以实现不同地理信息系统和用户之间的信息无损交换。

0.2. 历史背景

CityGML自2002年起由SIG 3D的成员开发。自2010年以后,该小组成为GDI-DE的一部分。2010年之前,SIG 3D隶属于北莱茵-威斯特伐利亚地理数据基础设施计划(GDI-NRW)。SIG 3D是一个开放的小组,由来自德国、英国、瑞士和奥地利的70多家公司、政府部门和研究机构组成,致力于开发可操作的三维城市模型和地理可视化。SIG 3D工作的另一个工作成果是提出了网络三维服务(W3DS),这是一个3D绘制服务,也是OGC正在讨论的(OGC Doc. No. 05-019 and OGC Doc. No. 09-104r1)。

2005年,GDI-NRW的 Pilot 3D 项目首次成功实施并评估了CityGML的一部分内容。与会者来自德国各地,展示了CityGML在城市规划方案和旅游上的应用。2006年初,EuroSDR的CityGML项目也开始关注欧洲的三维城市建模协调。2006年6月至12月,CityGML在OWS-4的CAD/GIS/BIM专题中得到应用和评估。自2008年以来,CityGML(1.0.0版本)成为OGC的一个标准。

从这个时间节点开始,CityGML已经在全世界传播。德国和欧洲其他国家的城市使用CityGML提供了各自的三维城市模型(仅举几个例子,柏林、科隆、德累斯顿和慕尼黑)。在法国,Bâti3D项目(IGN France)定义了CityGML LOD2的一个专用文件,并提供了巴黎和普罗旺斯艾克斯、里尔、南特和马赛市中心的数据。CityGML在荷兰的三维试点项目中也发挥了重要作用,支撑其三维地理信息标准和三维基础设施。欧洲的许多城市,如摩纳哥、日内瓦、苏黎世、利沃登,丹麦的城市(LOD2和3,部分是LOD4)都使用CityGML LOD2或3来进行数据的表达与交换。CityGML对欧盟委员会INSPIRE倡议的建筑模型(2.0版本)产生了重大影响,该倡议旨在创建一个欧洲空间数据基础设施,以互操作方式提供公共数据。在亚洲,伊斯坦布尔(LOD1和LOD2)、多哈、卡塔尔(LOD3)和横滨(LOD2)的三维城市模型也使用CityGML进行数据的表达与交换。此外,CityGML在马来西亚的三维空间数据基础设施中起着至关重要的作用。

今天,许多商业和学术工具通过接口的方式来支持CityGML的使用。其中典型案例是三维城市数据库(3D City Database),该数据库是一个免费的开源3D地理数据库,主要用于存储、表示和管理由柏林理工大学提供的Oracle 10g R2和11g R1/R2+的虚拟三维城市模型。它完全支持CityGML,并附带了一个用于导入和导出CityGML模型的工具。此外,柏林技术大学还提供了一个用于处理CityGML模型(citygml4j)的开源Java类库和API。Safe软件公司的转换工具FME(要素操作引擎)是ESRI的ArcGIS交互性扩展的一部分,它也具有CityGML的读写接口。同样,Bentley Systems的BentleyMap等CAD工具,以及CPA Geo Information的SupportGIS等GIS工具也提供CityGML的读写接口。目前部分3D查看器(都是免费提供的)也为CityGML提供读取接口。例如,波恩大学的Aristoteles Viewer、Autodesk 的 LandXplorer CityGML Viewer(studio版本非免费)、KIT Karlsruhe的FZKViewer for IFC and CityGML以及Bitmanagement Software GmbH的BS Contact(通过地理空间扩展工具BS Contact Geo提供了CityGML插件)。关于CityGML转换工具正在日渐增多。如有需要,可访问CityGML的官方网站 http://www.citygml.org 以及 http://www.citygmlwiki.org。

0.3. CityGML 2.0 新功能

CityGML 2.0是针对CityGML国际标准1.0版本(OGC Doc. No. 08-007r1)的主要更新,为CityGML的主题模型引入了大量的新增内容和新功能。修订版最初计划是对1.1版的一个小更新。修订过程的主要努力是确保在概念模型成名和CityGML实例文档层面的向后兼容性。然而,某些更改无法按照 OGC政策(参见OGC文件 No.135r11)里关于小修订和向后兼容性的要求进一步实施。因此,考虑到CityGML社区的更新需求,将主要版本号更改为2.0,以符合OGC版本控制策略。

CityGML 2.0版本以下意义上向后兼容1.0版本:每个有效的1.0实例都是有效的2.0实例,前提是需要将文档中的CityGML命名空间和模式位置更改为对应的2.0名称,因为CityGML版本号编码已在源码中更新。

以下条款概述了CityGML2.0的新增功能。

新主题模块:桥梁和隧道

桥梁( Bridge )和隧道( Tunnel )是城市和景观模型中的重要对象。它们是交通基础设施的重要组成部分,通常是城市的标志性建筑。CityGML1.0一直缺乏专门用于桥梁和隧道的主题模块,因此必须使用 GenericCityObject 作为代理来建模和交换此类对象(参见第10.12章)。CityGML2.0现在引入了两个新的主题模块,明确表示桥梁和隧道。这是对CityGML主题模型的补充:桥梁模块(参见第10.4章)和隧道模块(参见第10.5章)。

桥梁和隧道可以用LOD1–4表示,基础数据模型与 Building 模型具有一致的结构。例如,可以将桥梁和隧道分解为多个部分,可以使用带有开口的主题边界面对壳体的各个部分进行语义分类,并且可以表示装置以及内部建造的结构。这种连贯的模型结构有助于对语义实体的理解,并有助于减少软件实现工作量。桥梁和隧道模型分别介绍了特定于桥梁和隧道的更多概念和模型元素。

对现有主题单元的补充

  • CityGML核心模块(参见第10.1章)

    • 对抽象基类 core:_CityObject 添加了两个新的可选属性: CityGML Core 中的 relativeToTerrainrelativeToWater 。这些属性以定性的方式表示地物相对于地形和水面的位置,从而便于简单有效的查询(例如,查询地下建筑物的数量),不需要额外的数字地形模型或水体模型。

  • 建筑物模块

    • LOD0 表示

      • 建筑物现在可以使用LOD0对建筑底地面轮廓和/或屋顶边界进行表示。可以将现有的二维数据和来自航空和卫星图像的屋顶重建数据易于整合到一个三维城市模型中。目前仅限于水平的三维表面。

    • 附件的专题边界表面

      • 为了从语义上,对既不是水平墙面也不是屋顶部分的建筑外壳进行分类,引入了两个附加的边界表面: OuterFloorSurfaceOuterCeilingSurface

    • 与专题边界表面的附加关系

      • 除了 _AbstractBuildingRoomBuildingInstallationIntBuildingInstallation 的表面几何图形现在可以使用主题边界表面进行语义分类。例如,对于建模为 BuildingInstallation 的老虎窗(译注:即斜屋顶上的天窗),有助于对其屋顶和墙壁表面进行语义区分。

    • 隐式几何的附加使用

      • 除了BuildingFurniture外,隐式几何图形(参见第8.3章)现在还可用于表示 _OpeningBuildingInstallationIntBuildingInstallation 。使用隐式几何后,这些城市对象的原型可以在局部坐标系事先存储,并在三维城市模型的不同位置进行实例化。

  • 泛型模块(参见第10.12章)

    • 泛型模块中添加了两个泛型属性: MeasureAttributeGenericAttributeSetMeasureAttribute 有助于表示测量值以及对所用单位的引用。 GenericAttributeSet 是任意泛型属性的命名集合。它提供了一个codeSpace属性(可选),用来表示定义该属性集的组织。

  • 土地利用模块(参见第10.10章)

    • LandUse 地貌类型的范围已经扩大,包括地球表面专门用于特定土地利用的区域和具有特定土地覆盖的区域,无论是否有植被。

  • 属性类、函数和用法(所有模块)(参见第10.10章)

    • 为了协调 class , functionusage 的使用,对于在CityGML 1.0中提供了一个及以上属性的所有要素类,都补充了该三元组。

对CityGML代码列表机制的补充

CityGML中,在代码列表里提供了类、函数和用法等枚举属性的数值。该代码列表可以由任何组织或社区根据其特定的信息需求在CityGML模式之外指定。然而,这种机制并没有完全反映在CityGML 1.0编码模式中,因为在CityGML 1.0实例文档中,相应的属性不能指向具有所用代码列表值的字典。这一点在CityGML 2.0中得到了纠正:所有从代码列表中获取值的属性都属于 gml:CodeType ,遵循GML 3.1.1机制对代码表值进行编码(参见第章10.14了解更多信息)。这个 gml:CodeType 为枚举属性添加了数值,该功能允许提供指向相应字典的URI。

CityGML 2.0的变更日志

附件F中提供了XML模式组件级别的更改。

对规范文档的进一步编辑

  • 细节层次模型(LOD)的精度要求(参见第6.2章)
    第6.2章中提出的不同CityGML LOD精度要求是非规范性的。然而,CityGML 1.0中第6.2章的措辞与这一事实不一致,因此已针对CityGML 2.0进行了澄清。

  • 修改CityGML示例数据集(参见附录G)
    附录G中提供的CityGML示例已被修改和扩展。现在,在示例中展示了用五种LOD等级表示的同一建筑模型,演示了不同LOD中建筑的语义和几何形态,以及使用XLinks在要素之间共享几何元素。数据集与CityGML XML模块包一起提供,可在以下网址中找到 http://schemas.opengis.net/citygml/examples/2.0/

  • 应用领域扩展使用的新示例(参见附件一)
    附件一中增加了泛在网络机器人服务领域,该案例为使用应用领域扩展的第二个例子。

1. 范围

本文档是OGC编码标准,用于虚拟3D城市和景观模型地表示、存储和交换。CityGML是基于GML3的一个具体应用模式加以实现。

CityGML主要对复杂且基于地理信息的三维矢量数据及其相关语义数据进行建模。与其他三维矢量格式相比,CityGML基于一个更加丰富的、通用的信息模型,该模型不仅仅包含几何和外观信息。对于特定领域,CityGML还提供了一种扩展机制,在保持语义操作性的前提下,用可识别的特征来丰富数据。

明确的可以应用的领域有:城市和景观规划、建筑设计、旅游和休闲活动、三维地籍、环境模拟、移动通信、灾害管理、国土安全、车辆和行人导航、培训模拟器和移动机器人。

CityGML被认为是3D绘制的源格式。模型中包含的语义信息可用于生成计算机图形(例如KML/COLLADA或X3D文件)的样式化过程。适用于此过程的OGC绘制网络服务(PWS)是OGC W3DS。OGC网络视图服务(WVS)为虚拟3D景观和城市模型提供基于图像的3D绘制服务。

CityGML具备以下特点:

  • 基于ISO 191xx系列的城市景观地理空间信息模型(信息本体)

  • 基于ISO 19107模型的3D几何图形GML3表示法

  • 物体表面特征的表示(例如纹理、材料)

  • 分类和聚合

    • 数字地形模型是由(包括嵌套的)不规则三角网(TINs)、规则栅格、断裂线和骨架线、质量点组成的

    • 场地(目前为建筑物、桥梁和隧道)

    • 植被(包含面积、体积和孤立对象)

    • 水体(体积、表面)

    • 交通设施(图形结构和三维表面数据)

    • 土地利用(具有不同特点的土地利用方式)

    • 城市家具

    • 通用的城市对象和属性

    • 用户可定义(迭代)分组

  • 多尺度模型:具有5种明确定义的细节层次模型(LOD)

    • LOD0–区域,景观

    • LOD1–城市,区域

    • LOD2–城区,项目

    • LOD3–建筑模型(外部),地标

    • LOD4–建筑模型(内部)

  • 不同LOD中的多重表示,不同LOD中对象之间的泛化关系

  • 特征(子)几何体之间的可选拓扑连接

  • 应用领域扩展(ADE):CityGML模式中特定的部分,可用来定义特定的扩展程序,例如用于噪声污染模拟,或者通过美国新国家建筑信息模型标准(NBIMS)的属性来扩充CityGML。

2. 一致性

本国际标准所涉及的一致性目标仅适用于CityGML实例文件。本国际标准的未来修订也可能将消费者或生产者作为一致性目标。

本国际标准第8条至第10条规定了单独的CityGML XML模式定义和规范性内容(即CityGML模块),应根据第7条在CityGML实例文件中使用。本标准的实现不需要支持所有CityGML模块所提供的全部能力。根据第7.2章中CityGML profiles(专用文件)的规则和指南,部分模块和功能的有效实现是被支持的。

符合本国际标准的CityGML实例文件应具备以下三项条件:

  • 符合第7章至第10章规定的规则和要求

  • 通过附录B.1中抽象测试套件的所有相关测试案例

  • 满足附录B.2中与CityGML模块有关的抽象测试套件中的所有一致性类别。

3. 规范性引用文件

以下规范性文件所包含的条款,通过在本文中的引用,构成了OGC 12-019的这一部分的规定。凡是标注日期的引用文件,其之后的修改或修订均不适用。但是鼓励根据OGC 12-019达成协议的各方研究,应用下列规范性文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本标准。

以下所列文件对于CityGML标准的应用是不可或缺的。除采用GML 3.1.1的几何模型之外,也使用了一些其它的附加概念,如隐式几何(参见第8.2章)、外观模型(参见第9章)借鉴了X3D和COLLADA的概念,以及地址使用OASIS可扩展地址语言xAL表示。

  • ISO 8601:2004, Data elements and interchange formats – Information interchange – Representation of dates and times

  • ISO/TS 19103:2005, Geographic Information – Conceptual Schema Language

  • ISO 19105:2000, Geographic information – Conformance and testing

  • ISO 19107:2003, Geographic Information – Spatial Schema

  • ISO 19109:2005, Geographic Information – Rules for Application Schemas

  • ISO 19111:2003, Geographic information – Spatial referencing by coordinates

  • ISO 19115:2003, Geographic Information – Metadata

  • ISO 19123:2005, Geographic Information – Coverages

  • ISO/TS 19139:2007, Geographic Information – Metadata – XML schema implementation

  • ISO/IEC 19775:2004, X3D Abstract Specification

  • OpenGIS® Abstract Specification Topic 0, Overview, OGC document 04-084

  • OpenGIS® Abstract Specification Topic 5, The OpenGIS Feature, OGC document 99-105r2

  • OpenGIS® Abstract Specification Topic 8, Relations between Features, OGC document 99-108r2

  • OpenGIS® Abstract Specification Topic 10, Feature Collections, OGC document 99-110

  • OpenGIS® Geography Markup Language Implementation Specification, Version 3.1.1, OGC document 03-105r1

  • OpenGIS® GML 3.1.1 Simple Dictionary Profile, Version 1.0.0, OGC document 05-099r2

  • IETF RFC 2045 & 2046, Multipurpose Internet Mail Extensions (MIME). (November 1996)

  • IETF RFC 2396, Uniform Resource Identifiers (URI): Generic Syntax. (August 1998)

  • W3C XLink, XML Linking Language (XLink) Version 1.0. W3C Recommendation (27 June 2001)

  • W3C XMLName, Namespaces in XML. W3C Recommendation (14 January 1999)

  • W3C XMLSchema-1, XML Schema Part 1: Structures. W3C Recommendation (2 May 2001)

  • W3C XMLSchema-2, XML Schema Part 2: Datatypes. W3C Recommendation (2 May 2001)

  • W3C XPointer, XML Pointer Language (XPointer) Version 1.0. W3C Working Draft (16 August 2002)

  • W3C XML Base, XML Base, W3C Recommendation (27 June 2001)

  • W3C XML, Extensible Markup Language (XML) 1.0 (Second Edition), W3C Recommendation (6 October 2000)

  • OASIS (Organization for the Advancement of Structured Information Standards): extensible Address Language (xAL v2.0).

  • Khronos Group Inc.: COLLADA – Digital Asset Schema Release 1.4.1

  • The Schematron Assertion Language 1.5. Rick Jelliffe 2002-10-01

4. 约定

4.1. 术语缩写

本文中使用的缩写如下:

缩写 英文全称 中文对应解释

2D

Two Dimensional

二维

3D

Three Dimensional

三维

AEC

Architecture, Engineering, Construction

建筑、工程、施工

ALKIS

German National Standard for Cadastral Information

德国地籍信息国家标准

ATKIS

German National Standard for Topographic and Cartographic Information

德国地形和制图信息国家标准

B-Rep

Boundary Representation

边界表示法

bSI

buildingSMART International

国际智慧建筑物联盟

CAD

Computer Aided Design

计算机辅助设计

COLLADA

Collaborative Design Activity

协同设计活动

CSG

Constructive Solid Geometry

构造实体几何

DTM

Digital Terrain Model

数字地形模型

DXF

Drawing Exchange Format

图形交换格式

EuroSDR

European Spatial Data Research Organisation

欧洲空间数据研究组织

ESRI

Environmental Systems Research Institute

环境系统研究所

FM

Facility Management

设施管理

GDF

Geographic Data Files

地理数据文件

GDI-DE

Spatial Data Infrastructure Germany (Geodateninfrastruktur Deutschland)

德国空间数据基础设施

GDI NRW

Geodata Infrastructure North-Rhine Westphalia

北莱茵河威斯特伐利亚地理数据基础设施

GML

Geography Markup Language

地理标记语言

IAI

International Alliance for Interoperability (now buildingSMART International (bSI))

国际互操作联盟(现已更名为国际智慧建筑物联盟)

IETF

Internet Engineering Task Force

互联网工程特别工作组

IFC

Industry Foundation Classes

工业基础类

ISO

International Organization for Standardisation

国际标准化组织

LOD

Level of Detail

细节层次模型

NBIMS

National Building Information Model Standard

国家建筑信息模型标准

OASIS

Organisation for the Advancement of Structured Information Standards

国际结构化信息标准推进组织

OGC

Open Geospatial Consortium

国际开放地理信息协会

OSCRE

Open Standards Consortium for Real Estate

房地产开放标准联盟

SIG 3D

Special Interest Group 3D of the GDI-DE

GDI-DE的三维特别兴趣小组

TC211

ISO Technical Committee 211

ISO 211技术委员会

TIC

Terrain Intersection Curve

地形相交曲线

TIN

Triangulated Irregular Network

不规则三角网

UML

Unified Modeling Language

统一建模语言

URI

Uniform Resource Identifier

统一资源标识符

VRML

Virtual Reality Modeling Language

虚拟现实建模语言

W3C

World Wide Web Consortium

万维网联盟

W3DS

OGC Web 3D Service

OGC网络三维服务

WFS

OGC Web Feature Service

OGC网络要素服务

X3D

Open Standards XML-enabled 3D file format of the Web 3D Consortium

Web3D联盟支持XML的3D文件开放标准

XML

Extensible Markup Language

可扩展标记语言

xAL

OASIS extensible Address Language

OASIS可扩展地址语言

4.2. UML表示法

在本文档中,使用统一建模语言(UML)静态结构图(见Booch et al. 1997)形式呈现CityGML标准,使用的UML表示法如下图1所示。

Fig1 UMLnotation
图 1. UML符号图(详见ISO TS 19103,地理信息-概念模式语言)

根据GML3, CityGML中所有模型元素间的关联均为单向的。因此,CityGML中的关联只能单向导航。导航的方向以箭头表示。通常,关联中的元素,所使用的上下文由其角色进行指定。角色会显示在关联目标的附近。如果图形表示不明确,则必须将角色的位置绘制到关联所指向的元素上。

使用到的模板如下:

  • «Geometry»表示对象的几何形状。几何图形是从抽象GML类型 AbstractGeometryType 派生的可识别和可区分对象。

  • «Feature»表示根据ISO 19109定义的主题要素。要素是从抽象GML类型 AbstractFeatureType 派生的可识别和可区分对象。

  • «Object»表示从抽象GML类型 AbstractGMLType 派生的可识别和可区分对象。

  • «Enumeration»在指定文字值的固定列表中,枚举有效的属性值。枚举在CityGML模式中由内联指定。

  • «CodeList»枚举有效的属性值。与枚举不同,值列表是开放的,因此在CityGML模式中没有给出。可以在外部代码列表中提供允许的值。建议按照GML3.1.1简单字典配置文件(参见第6.6章和第10.14章)将代码列表实现为简单字典。

  • «Union»是一个属性列表。其语义是,在任何时候只能使用一个一个属性。

  • «PrimitiveType»作为实现中原始类型支持的表示。

  • «DataType»作为一组缺乏标识符的值的描述符。数据类型包括原始预定义类型和用户可定义类型。因此,数据类型是只有很少或无操作的类别,其主要目的是保存另一个类的抽象状态,用于传输、存储、编码或长期存储。

  • «Leaf»是在UML包图中使用,表示没有其他子类型。

  • «XSDSchema»在UML包图中使用,表示包含特定命名空间的所有定义的XSD模式的根元素。所有包内容或组件类都放在一个模式中。

  • «ApplicationSchema»在UML包图中使用,表示XML模式定义从根本上依赖于XML模式元语言中另一个独立标准概念。例如,ApplicationSchema表示GML的扩展符合GML的“应用模式规则”。

为了增强CityGMLUML图表的可读性,如果类属于不同的UML包,则用不同的颜色描述(见图8 UML包的概述)。配色方案如下:

  • 标为黄色的类 属于UML包讨论的主题。例如,在介绍 CityGML Core 模块的10.1章中,黄色用来表示 CityGML Core UML包中定义的类。同样,在10.3章UML图中显示的黄色类是该章中 Building 模块讨论的主题。

  • 标为蓝色的类 与黄色相关联的包不同。为明确表示这些类,它们的类名称带有一个命名空间前缀,在整个规范中与CityGML模块唯一相关联(参见4.3节中命名空间和前缀列表)。例如,在 Building 模块的上下文中,CityGML Core 模块中的类被标为蓝色,它们的类名前面有前缀 core

  • 标为绿色的类 是在GML3中定义的,它们的类名前面有 gml 前缀。

以下的UML图表示例展示了本规范中使用的UML表示法和配色方案。在本例中,黄色类与CityGML建筑模块相关联,蓝色类是 CityGML Core 模块,绿色类表示GML3定义的几何元素。

Fig2
图 2. 展示了整个CityGML规范中使用的UML符号和配色方案的UML示例图

4.3. XML命名空间和命名空间前缀

CityGML数据模型按主题分解为核心模块和主题扩展模块。包括核心在内的所有模块都由其自身的XML模式文件指定,每个都定义了全局唯一的XML命名空间。扩展模块基于核心模块,因此包含(通过参考)CityGML核心模式。

在本文档中,模块命名空间与推荐的前缀相关联。这些前缀在本规范的规范性部分中统一使用,用于所有UML图和CityGML实例文档示例。表1中列出了CityGML核心模块和扩展模块及其XML命名空间标识符和推荐的命名空间前缀。

表1: CityGML模块列表,其关联的XML命名空间标识符,以及命名空间前缀示例
CityGML模块 命名空间标识符 命名空间前缀

CityGML核心

http://www.opengis.net/citygml/2.0

core

外观

http://www.opengis.net/citygml/appearance/2.0

app

桥梁

http://www.opengis.net/citygml/bridge/2.0

brid

建筑

http://www.opengis.net/citygml/building/2.0

bldg

城市家具

http://www.opengis.net/citygml/cityfurniture/2.0

frn

城市对象群组

http://www.opengis.net/citygml/cityobjectgroup/2.0

grp

泛型

http://www.opengis.net/citygml/generics/2.0

gen

土地利用

http://www.opengis.net/citygml/landuse/2.0

luse

地形

http://www.opengis.net/citygml/relief/2.0

dem

交通设施

http://www.opengis.net/citygml/transportation/2.0

tran

隧道

http://www.opengis.net/citygml/tunnel/2.0

tun

植被

http://www.opengis.net/citygml/vegetation/2.0

veg

水体

http://www.opengis.net/citygml/waterbody/2.0

wtr

纹理表面 [已弃用]

http://www.opengis.net/citygml/texturedsurface/2.0

tex

表2中显示了与该标准相关的XML模式定义,以及本文档中一致使用的相应XML命名空间标识符和命名空间前缀。

表2: XML模式定义列表、其相关的XML命名空间标识符,以及本文档中使用的命名空间前缀示例
XML模式定义 命名空间标识符 命名空间前缀

地理标记语言3.1.1版(来自OGC)

http://www.opengis.net/gml

gml

可扩展地址语言2.0版(来自OASIS)

urn:oasis:names:tc:ciq:xsdschema:xAL:2.0

xAL

Schematron Assertion语言1.5版

http://www.ascc.net/xml/schematron

sch

4.4. XML模式

该标准的规范部分使用W3C XML模式语言,来描述符合CityGML数据实例的语法。XML模式是一种具有多种功能的语言。虽然不熟悉XML模式的读者可以按照一般的方式查看描述,但该标准并非用于介绍XML模式。为了充分理解该标准,读者需要对XML模式有一定的了解。

5. CityGML概述

CityGML是一种基于XML格式的、用于存储和交换虚拟3D城市模型的开放数据模型。它是地理标记语言3.1.1版本(GML3)的一个应用模式,是由OGC和ISO TC211发布的用于空间数据交换的可扩展国际标准

开发CityGML的目标是为了对三维城市模型的基本实体、属性和关系达成一个共同的定义。这对于三维城市模型的低成本、可持续性维护尤其重要,因为其允许在不同的应用领域重复使用相同的数据。

CityGML不仅表现了城市模型的图形外观,而且特别解决了语义和主题属性、分类法和聚合的表示。CityGML包括一个几何图形模型和一个主题模型。CityGML包括一个几何模型和一个主题模型。几何模型允许对三维城市模型中的空间对象的几何和拓扑属性进行一致和同质的定义(第8章)。所有对象的基类是 _CityObject,它是GML的 _Feature类的一个子类。所有的对象都继承了 _CityObject的属性。

CityGML的主题模型采用了不同主题领域的几何模型,如数字地形模型、场地(即建筑物、桥梁和隧道)、植被(单独的对象以及区域和体积的生物群落)、土地利用、水体、交通设施和城市家具(第10章)。更多尚未明确建模的对象,可以使用通用对象和属性的概念来表示(第6.11章)。此外,对CityGML数据模型的扩展,适用于特定的应用领域,可以使用应用域扩展(ADE)来实现(第6.12章)。相同形状的空间对象,如树等,在不同的位置出现多次,也可以被建模为原型,并在城市模型中多次使用(第8.2章)。分组的概念可以将单个三维物体组合起来,例如将建筑物组合成一个建筑群(6.8章)。没有用封闭实体进行几何建模的对象,可以使用ClosureSurfaces封闭(第6.4章)被虚拟密封,以计算其体积(例如人行地下通道、隧道或飞机库)。TerrainIntersectionCurve的概念被引入,将三维物体与数字地形模型的正确位置结合起来,以防止建筑物漂浮或沉入地形(6.5章)。

CityGML区分了五个连续的细节层次模型(LOD),对象的几何图形和主题差异随着LOD的增加而变得更加详细(第6.2章)。CityGML文件可以-但不是必须-同时为不同LOD中的每个对象包含多种表示(和几何图形)。泛化关系允许在不同尺度上明确表示聚合对象。

除了空间属性之外,CityGML的特征还可以被赋予外观。外观并不局限于视觉数据,而是代表地物表面的任意可观察的属性,如红外辐射、噪声污染或地震引起的结构应力(第9章)。

此外,对象可以是对外部数据集中相应对象的外部引用(第6.7章)。枚举型对象属性的可能属性值,可以在外部可重新定义的字典中定义的代码列表中枚举(第6.6章)。

6. CityGML一般性特征

6.1. 模块化

CityGML数据模型由虚拟三维城市模型中最重要的对象类型的类定义组成,这些类在许多不同的应用领域都被认为是必需的或重要的。然而,我们并不需要为了符合标准而去支持整个CityGML数据模型,而是根据实际需求构造一个CityGML数据模型的子集即可。为此,CityGML数据模型采用了模块化结构(参见第7章)。

CityGML数据模型按主题分解为核心模块和主题扩展模块。核心模块包括CityGML数据模型的基本概念和组件,它是任何遵循标准的系统必须实现的。基于核心模块,每个扩展模块涵盖了虚拟三维城市模型的一个特定主题领域。CityGML介绍了以下13个主题扩展模块:外观、桥梁、建筑、城市家具、城市对象组、泛型城市对象、土地土地利用、地形、交通、隧道、植被、水体和纹理表面[已弃用]。

与核心模块相结合的任何扩展模块的任意组合,均是符合CityGML标准的实现。这种模块组合称为CityGML profiles(CityGML专用文件)。因此,CityGML专用文件允许对整个CityGML数据模型进行有效的部分实现。

6.2. 多尺度建模(5级LOD)

CityGML支持不同级别的LOD。LODs反映了具有不同应用需求的独立数据收集过程。此外,LOD有助于高效可视化和数据分析(如图3所示)。在一个CityGML数据集中,同一物体可以同时用不同的LOD来表示,这样就可以在不同的分辨率下对同一个物体进行分析和可视化。此外,两个包含有不同LOD的同一物体的CityGML数据集可以被合并和整合。然而,用户或应用程序有责任确保不同LOD的物体是指同一个真实世界的物体。

最粗略的LOD0级别基本上是一个2.5维的数字地形模型,上面覆盖着航空图像或地图。在LOD0中,建筑可以用迹线或屋顶边缘多边形来表示。众所周知,LOD1是由带平屋顶结构的棱柱状建筑组成的块状模型。相比之下,LOD2中的建筑有不同的屋顶结构和不同主题的边界表面。LOD3表示有详细的墙和屋顶结构的建筑模型,可能包含门和窗户。LOD4在LOD3的基础上又为建筑物添加了内部结构。例如,LOD4中的建筑由房间、室内门、楼梯和家具组成。在所有的LOD外观信息,如高分辨率纹理可以映射到结构中(参见6.9)。

Fig3
图 3. CityGML定义的5个LOD等级(来源于IGG Uni BOom)

LOD的特点还包括不同的精度和物体的最小尺寸(参见表3)。本标准中给出的精度要求尚未最终确定,仅作为讨论建议。精度描述为绝对三维点坐标的标准差。在未来版本的CityGML中将增加相对三维点精度,它通常比绝对精度要高得多。在LOD1中,点的定位精度和高度精度应小于等于5m,而所有的对象都应至少为6m × 6m的迹线。LOD2的定位精度和高度精度建议在2m以上,在此LOD中,所有迹线至少是4m × 4m的对象都应该被考虑。LOD3中两种类型的精度都应该是0.5m,建议最小迹线为2m × 2m。最后,LOD4的定位精度和高度精度应优于0.2m。通过这些数据,5个LOD的分类可以用来评估三维城市模型数据集的质量,并使数据集具有可比性,为其整合提供支持。

表3: CityGML的LOD 0-4及其提出的精度要求(讨论方案,基于: Albert 发布于2003年)。
Table3

而在CityGML中,每个对象在每个LOD中都可以有不同的表示,通常同一LOD中的不同对象会被概括为较低LOD中的一个聚合对象来表示。CityGML通过在城市对象之间提供一个明确的概括关联来支持聚合/分解(进一步的细节见第10.1章的UML图)。

6.3. 连贯语义几何建模

CityGML最重要的设计原则之一是语义和几何/拓扑属性的一致性建模。在语义层,真实世界的实体由要素表示,如建筑、墙壁、窗户或房间。描述还包括要素间的属性、关系和聚合层次结构(部分-整体-关系)。因此,要素之间的部分关系只能在语义层得到,无需考虑几何图形。但是,在空间层面上,几何对象被分配到表示其空间位置和范围的要素中。因此,该模型由两个层次结构组成:语义层和几何层,在这两个层中,相应的对象通过关系关联在一起(参考Stadler & Kolbe 2007)。这种方法的优点是,在语义/或几何查询或执行分析中,可以在语义和几何的两个层次结构中以及在两个层之间任意对象间引用。 如果两个层次都是针对一个特定对象而存在,那么它们必须是一致的(即必须确保它们互相匹配)。例如,如果建筑的墙壁在语义层上有两个窗户和一个门,那么表示墙壁的几何图形也必须包含窗户和门的几何部分。

6.4. 闭合曲面

没有体积几何模型的物体,必须使用ClosureSurface被虚拟封闭以计算其体积(例如人行地下通道或飞机库)。一共有13个特殊的表面,当需要计算体积时,它们会被考虑进去,而当它们不相关或不合适时,例如在可视化中,就会被忽略。

闭合面的概念也被用来对地下物体的入口进行建模。隧道或人行地下通道等物体必须被建模成封闭的实体,用于计算其体积,例如在洪水模拟。地下物体的入口也必须封闭,以避免数字地形模型中的洞(见图4)。但是,在近距离可视化中,入口必须开放。因此,闭合面是建模这些入口的合理方法。

Fig4
图 4. 闭合曲面封闭开放结构。通道是地下物体(左)。入口被虚拟闭合曲面封闭,它既是DTM的一部分,也是地下物体的一部分(右)(图:IGG Uni Bonn)。

6.5. 地形相交曲线(TIC)

城市建模的一个关键问题是三维物体和地形的整合。比如,将不同LOD的地形和三维物体结合起来,或者它们来自不同的供应商,经常会出现三维物体漂浮在地形上或沉入地形中这种问题(Kolbe和Gröger 2003)。为了克服这个问题,引入了三维物体的地形交汇曲线(TerrainIntersectionCurve)。这些曲线表示地形与三维物体接触的确切位置(见图5)。TIC可以应用于建筑物和建筑物部件(参见第10.3章)、桥梁、桥梁部件和桥梁建筑元素(参见第10.5章)、隧道和隧道部件(参见第10.4章)、城市家具对象(参见第10.9章)和一般城市对象(参见第10.12章)。例如,如果一个建筑物有一个庭院,那么TIC由两个封闭的环组成:一个环代表庭院的边界,另一个环描述建筑物的外部边界。这些信息可以用来整合建筑和地形,通过 "拉高 "或 "拉低 "周围的地形来适应地形交汇曲线,或者局部扭曲DTM以适应TIC。通过这种方式,TIC也确保了纹理的正确定位或物体纹理与DTM的匹配。由于不同LOD上与地形的相交点可能有所不同,一个三维对象对于所有LOD可能有不同的__TerrainIntersectionCurve_。

Fig5
图 5. 建筑物(左边,黑色)和隧道物体(右边,白色)的地形交叉曲线。隧道的中空空间被一个三角形的ClosureSurface密封(图形:IGG Uni Bonn)。

6.6. 枚举属性代码表

CityGML要素类型通常包括一些属性,它们的值可以在离散值列表中枚举。例如,建筑的屋顶类型属性,其属性值通常为鞍形屋顶、四坡屋顶、半四坡屋顶、平屋顶、单斜面屋顶或帐篷屋顶。如果这样的属性作为字符串输入,则相同概念的拼写错误或不同名称会阻碍互操作性。此外,可能的属性值列表往往不是固定的,而且可能因不同的国家(例如,国家法律和条例规定)和不同的信息社区而有很大的不同。

在CityGML中,这些枚举属性的类型是gml:CodeType,其所允许的属性值可以在CityGML模式之外指定的代码列表中提供。一个代码列表包含了已编码的属性值,并确保相同的代码用于相同的概念或者框架。如果为一个枚举性属性提供了一个代码表,那么该属性只能从这个列表中取值。这允许应用程序验证属性值,从而促进语义和语法上的互操作性。我们建议按照GML 3.1.1简单字典的规定,将代码表作为简单字典来实现(参见Whiteside 2005)。

代码表的管理与CityGML模式和规范的管理是脱钩的。因此,代码表可以由任何组织或信息社区根据他们的信息需求来指定。每个代码表应该有一个权威机构,负责代码表的值和代码表的维护。关于CityGML代码表机制的进一步信息,见第10.14章。

代码列表可以参考现有的模型。例如,可以参考房地产开放标准联盟(OSCRE)定义的房间代码,也可以使用国家建筑信息模型标准(NBIMS)引入的建筑和建筑部分的分类方法。附件C包含了SIG 3D为CityGML中几乎所有的枚举性属性提出的非规范性代码列表。它们可以在CityGML实例文件中直接引用,并作为定义代码表的一个例子。

6.7. 外部引用

三维对象通常来自于其他数据库或数据集中的对象,或者与之有关系。例如,一个三维建筑模型可能是由地籍数据集中的二维迹线构建的,也可能是由建筑模型衍生出来的(图6)。如果必须传播更新或需要额外的数据,例如地籍信息系统中建筑物所有者的姓名和地址,或设施管理系统中的天线和门的信息,那么三维物体对其在外部数据集中的相应物体的引用是至关重要的。为了提供这些信息,每个 _CityObject可以使用ExternalReference的概念来引用外部数据集(UML图见图21;XML模式定义见附件A.1)。这种引用表示外部信息系统和该系统中对象的唯一标识符<两者都被指定为统一资源标识符(URI),这是对互联网上任何类型资源的引用的通用格式。外部引用的通用概念允许任何 _CityObject与外部信息系统中的相应对象(如ALKIS、ATKIS、OS MasterMap®、GDF等)有任意数量的链接。

Fig6
图 6. 外部引用(图片:IGG Uni Bonn)。

6.8. 城市对象组

CityGML的分组概念允许根据用户定义的标准对任意的城市对象进行聚合,并将这些聚合作为城市模型的一部分来表示和传输(UML图见OGC 12-019 Copyright © 2012 Open Geospatial Consortium. 15 第10.11章;XML模式定义见附件A.6)。) 一个组可以被赋予一个或多个名称,并可以通过特定的属性进一步分类,例如,"在一个火灾场景中,第43号房1212房间的逃生路线"作为名称,"逃生路线"作为类型。该组的每个成员可以选择被分配一个角色名称,该名称指定该特定成员在该组中扮演的角色,这个角色名称可以描述这个物体在逃生路线中的序列号,或者在一个建筑群的情况下表示主楼。

一个组可以包含其他组作为其成员,允许任意深度的嵌套分组。分组概念由CityGML的主题扩展模块CityObjectGroup提供(参见第10.11章)。

6.9. 外观

在虚拟三维城市模型中,表面的外观信息,即表面的可观察属性,被认为是除语义和几何图形之外的重要组成部分。外观涉及任何基于表面的主题信息,例如红外辐射或噪音污染,而不仅仅限于视觉属性。因此,外观提供的数据可以作为输入,用于在虚拟三维城市模型中进行展示和分析。

CityGML支持每个城市模型任意数量的主题的要素外观。每个要素的LOD可以有单独的外观。外观可以表示纹理和地理参考纹理。CityGML的外观模型被封装在自己的扩展模块Appearance中(参见第9章)。

6.10. 原型对象/场景图概念

在CityGML中,像树木、交通灯、及交通标志等形状相同的对象可以表示为原型,在不同的位置多次实例化(图7)。原型的几何形状是在本地坐标系中定义的。每个实例都由一个对原型的引用、世界坐标参考系中的一个基点和一个便于原型缩放、旋转和平移的变换矩阵来表示。这一原则来自于计算机图形标准(如VRML和X3D)中使用的场景图的概念。由于GML3几何模型没有提供对场景图概念的支持,它被作为GML3几何模型的一个扩展来实现(进一步的描述参见第8.2章)。

Fig7
图 7. 原型形状的例子(来源:莱茵金属防御电子公司)。

6.11. 通用城市对象和属性

CityGML被设计成一个通用的地形信息模型,定义了对广泛的应用有用的对象类型和属性。在实际应用中,特定的三维城市模型中的对象很可能包含CityGML中没有明确建模的属性,此外,可能有一些三维物体没有被CityGML的主题类所覆盖。对此,CityGML提供了两种不同的概念来支持这些数据的交换。1)通用对象和属性,以及2)应用领域扩展(参见6.12章)。

通用对象和属性的概念允许在运行期间对CityGML应用程序进行扩展,即任何 _CityObject_都可以由额外的属性来增加,这些属性的名称、数据类型和值可以由运行中的应用程序提供,而无需对CityGML的XML模式进行任何改变。同样,没有被CityGML数据模型的预定义主题类所代表的特征也可以使用通用对象进行建模和交换。CityGML的通用扩展是由主题扩展模块Generics__提供的(参见第10.12章)。

CityGML的当前版本不包括诸如路堤、挖掘和城墙等明确主题模型,对于这些对象,可以使用通用对象和属性进行存储或交换。

6.12. 应用领域扩展(ADE)

应用领域扩展(ADE)是对CityGML数据模型的补充。这些补充包括在现有CityGML类中引入新属性,例如建筑的居民数量或新对象类型的定义。ADE与通用对象和属性之间的区别是,ADE必须被定义在一个额外的XML模式定义文件中,有它自己的命名空间。这个文件必须明确地导入扩展的CityGML模块的XML模式定义。

这种方法的优点是,扩展是正式规定的。扩展的CityGML实例文件可以根据CityGML和各自的ADE模式进行验证。ADEs可以由对特定应用领域感兴趣的信息团体来定义(甚至是标准化)。在同一个数据集中可以积极使用一个以上的ADE(进一步描述见第10.13章)。

ADE可以为一个甚至几个CityGML模块定义,为CityGML数据模型添加附加信息提供了高度的灵活性。因此,ADE机制是与CityGML的模块化方法正交的。因此,没有单独的ADE的扩展模块。

在本规范中,包括了两个ADE的例子。

  • 噪声排放模拟的ADE(附件H):根据欧盟委员会的环境噪声指令(2002/49/EC),用于模拟环境噪声的扩散;

  • 泛在网络机器人服务的ADE(附件I):展示了CityGML在室内环境中机器人导航的使用。

ADE的其他例子有:用于设施管理的CAFM ADE(Bleifuß等人,2009)、用于多设施网络及其相互依存关系的综合三维建模的UtilityNet- workADE(Becker等人,2011)、用于水文应用的HydroADE(Schulte和Coors,2008)以及GeoBIM(IFC)ADE(van Berlo等人,2011),它结合了IFC(来自BSI)和CityGML的BIM信息,并在开源模型服务器BIMserver.org中实施。

7. 模块化

CityGML在其数据模型的主题和几何拓扑级别上都是一个丰富的标准。在其主题级别上,CityGML定义了城市中最相关的地形对象的类和关系,以及包含建筑结构、高程、植被、水体、城市家具等的区域模型。除了几何和外观内容之外,这些主题组件还允许在不同的应用领域(如模拟、城市数据挖掘、设施管理和主题查询)中使用虚拟3D城市模型来完成复杂的分析任务。

CityGML是一个框架,为地理空间三维数据提供了足够的空间,让其在生命周期内可以在几何、拓扑和语义方面增长。因此,城市对象的几何和语义可以被灵活地结构化,从纯粹的几何数据集到复杂的有几何拓扑和空间语义的数据。通过这种方式,CityGML定义了一个适用于3D城市建模的连续过程、具有单一的对象模型和数据交换的格式,建模过程从几何数据获取、数据分类到特定终端用户应用的数据准备,允许迭代数据丰富和无损信息交换(cf. Kolbe et al. 2009)。

基于这个框架,应用程序不需要支持所有的CityGML主题字段以符合标准,但可以使用与应用领域或过程步骤相关需求对应的构造子集。CityGML逻辑子集的使用限制了整体数据模型的复杂性,并明确允许实现有效部分。对于CityGML标准的2.0版本,CityGML模块定义并包含了数据模型的子集。CityGML模块是标准的集合,由一个符合标准的系统作为整体。CityGML由一个核心模块和若干主题扩展模块组成。

CityGML核心模块定义了CityGML数据模型的基本概念和组件。它被看作是整个CityGML数据模型的通用下限,是所有主题扩展模块的基础。因此,核心模块是唯一的,且任何符合要求的系统都必须实现。基于CityGML核心模块,每个扩展模块都包含一个逻辑上独立的CityGML数据模型主题组件。核心的扩展是通过对整个CityGML数据模型进行垂直切片而得到的。由于每个扩展模块都包含(或引用)核心模块,因此它的概念和组件对所有扩展模块都是通用的。CityGML标准2.0版引入了以下13个主题扩展模块。它们与本文档的条款相关,每个条款都涵盖了CityGML相应的主题领域:

  • 外观(参见第9条),

  • 桥梁(参见第10.5条),

  • 建筑 (参见第10.3条),

  • 城市家具(参见第10.9条),

  • 城市对象组合(参见第10.11条),

  • 通用(参见第10.12条),

  • 土地利用(参见第10.10条),

  • 地形(参见第10.2条),

  • 交通(参见第10.7条),

  • 隧道(参见第10.4条),

  • 植被(参见第10.8条),

  • 水体(参阅第10.6条),和

  • 带纹理的表面[已弃用](参见第9.8条)

CityGML数据模型的按主题模块进行分解,允许实施者支持扩展模块与核心模块的任意组合。因此,扩展模块可以根据应用或应用领域的信息需求而任意组合。一个模块的组合称为CityGML专用文件(profiles)。所有模块的联合体被定义为CityGML基本专用文件(base profile)。基本专用文件在任何时候都是唯一的,并形成了整个CityGML数据模型的上限。任何其他CityGML专用文件必须是基本专用文件的有效子集。通过遵循CityGML模块和专用文件,CityGML的部分数据模型以一种定义明确的方式实现是有效的。

至于未来的发展,每个CityGML模块都可以由专家小组和信息社区独立地进一步发展。由此产生的对模块的建议和更改可能会被引入到CityGML标准的修订中,而不会影响其它模块的有效性。此外,当前CityGML数据模型未覆盖的主题组件可以通过主题扩展模块添加到标准的未来版本中。这些扩展模块可与任何其它现有的CityGML模块建立依赖关系,但至少应依赖于CityGML核心模块。因此,随着新扩展模块的添加,CityGML基本专用文件可能也会变化。但是,如果一个特定的应用程序需要的建模和交换的信息超出了CityGML数据模型的范围,这些应用数据也可以使用CityGML的 Application Domain Extension 机制(参见第10.13条)或使用通用城市对象和属性(参见第10.12章)纳入现有模块中。

引入的模块化方法支持CityGML作为数据建模框架和通用数据交换格式,以解决各种应用领域和三维城市建模的不同步骤。为了清晰起见,应用程序应该通过声明所使用的CityGML专用文件来宣布与CityGML标准的一致性水平。由于核心模块是所有专用文件的一部分,这应该通过列举已实现的主题扩展模块来实现。例如,如果一个实现除了支持核心模块外,还支持 BuildingReliefVegetation 模块,则应该通过“CityGML [Building,Relief,Vegetation]”来表示。如果支持基本专用文件,则应该用“CityGML [full]”表示。

7.1. CityGML核心和扩展模块

每个CityGML模块都由自己的XML模式定义文件指定,并被定义在一个单独且全局唯一的XML目标命名空间中。根据模块之间的依赖关系,每个模块还可以导入与CityGML相关模块关联的命名空间。但是,一个命名空间不能直接包含在两个模块中。因此,所有属于一个模块的元素都只与该模块的命名空间相关联。通过这种方式,保证了模块元素在CityGML实例文档中被适当地分离和区分。

与1.0之前的CityGML版本相比,前面提到的命名空间约定给数据文件带来了额外的复杂性,因为不再有单独的CityGML命名空间。相反,不同CityGML模块的组件以及不同命名空间的组件可以任意混合在同一个CityGML实例文档中。此外,一个应用程序可能必须要解析包含模块元素的实例文档,而这些模块本身并不被应用程序所采用。不过,这些解析问题可以很容易地被非“模型感知”的应用程序克服,即那些不以通用方式解析和解释GML应用模式的应用程序。来自不同命名空间的与应用程序所使用的CityGML专用文件所声明的不同的元素,可能会被跳过。在使用CityGML的应用领域扩展机制(参见第10.13条)时,必须进行类似的观察。

CityGML标准的2.0版本,没有两个互相依赖的主题扩展模块,所有的扩展模块都是真正相互独立的。然而,CityGML核心模块是任何扩展模块的依赖项,这意味着定义扩展的每个XML模式文件都要导入核心模块的XML模式文件。

图8使用UML包图说明了CityGML模块之间的依赖关系。每个模块都由一个包表示,包名与模块名对应。图中的虚线箭头表示箭头尾部的模式依赖于箭头头部的模式。对于CityGML模块,当一个模式<import>另一个模式以及相应的XML命名空间时会产生依赖关系。例如,扩展模块建筑导入CityGML核心模块的模式。表4给出了每个模块的简短描述。

Fig8
图 8. 展示CityGML独立模块及其模式依赖关系的UML包图。每个扩展模块(由叶子包表示)进一步导入GML 3.1.1模式定义,以表示其主题类的空间属性。为了便于阅读,省略了相应的依赖项。
表4: CityGML核心和主题扩展模块概述

模块名称

CityGML核心

XML命名空间标识符

http://www.opengis.net/citygml/2.0

XML模式文件

cityGMLBase.xsd

建议的命名空间前缀

core

模块说明

CityGML core 模块定义了CityGML数据模型的基本组件。主要包括抽象基类,从这些基类可以(传递)派生所有主题类。但是,在核心模块中定义了多个扩展模块常见的非抽象内容,例如基本数据类型。 核心模块导入了GML 3.1.1版本的XML模式定义文件和OASIS可扩展地址语言xAL

模块名称

外观

XML命名空间标识符

http://www.opengis.net/citygml/appearance/2.0

XML模式文件

appearance.xsd

建议的命名空间前缀

app

模块说明

Appearance 模块提供了对CityGML特征外观进行建模的方法,即特征表面的可观察属性。可以为每个城市对象存储外观数据。因此,在核心模块中定义的抽象基类 CityObject_ ,基于CityGML的 Application Domain Extension__ 机制的附加属性进行扩充。因此, Appearance 模块直接影响所有主题扩展模块。

模块名称

桥梁

XML命名空间标识符

http://www.opengis.net/citygml/bridge/2.0

XML模式文件

bridge.xsd

建议的命名空间前缀

brid

模块说明

Bridge 模块允许对桥梁的主题和空间属性、桥梁部件、桥梁安装和内部桥梁结构的四个细节层次(LOD 1 - 4)进行表达。

模块名称

建筑

XML命名空间标识符

http://www.opengis.net/citygml/building/2.0

XML模式文件

building.xsd

建议的命名空间前缀

bldg

模块说明

Building 模块允许在五个细节层次(LOD 0-4)中表达建筑的主题和空间属性,建筑部件,建筑装置和室内建筑结构。

模块名称

城市家具

XML命名空间标识符

http://www.opengis.net/citygml/cityfurniture/2.0

XML模式文件

cityFurniture.xsd

建议的命名空间前缀

frn

模块说明

CityFurniture 模块用于表达城市中的城市家具对象。城市家具是不可移动的物体,如灯笼、交通标志、广告栏、长凳或公共汽车站,可以在交通区、居民区、广场或建筑区找到。

模块名称

城市对象组合

XML命名空间标识符

http://www.opengis.net/citygml/cityobjectgroup/2.0

XML模式文件

cityObjectGroup.xsd

建议的命名空间前缀

grp

模块说明

CityObjectGroup 模块为CityGML提供了一个分组概念。可以根据用户自定义的标准将任意城市对象聚合到组中,表达和传递城市模型的一部分。一个组可以根据特定的属性进一步分类。

模块名称

通用

XML命名空间标识符

http://www.opengis.net/citygml/generics/2.0

XML模式文件

generics.xsd

建议的命名空间前缀

gen

模块说明

Generics 模块提供了对CityGML数据模型的通用扩展,可用于建模和交换CityGML预定义的主题类没有涵盖的其他属性和特性。但是,只有当其他任何CityGML模块没有提供适当的主题类或属性时,才使用通用扩展。 为了表达通用属性, Generics 模块基于CityGML的 Application Domain Extension 机制的附加属性扩充了核心模块中定义的城市对象抽象基类 _CityObject 。因此, Generics 模块会对所有主题扩展模块产生影响。

模块名称

土地利用

XML命名空间标识符

http://www.opengis.net/citygml/landuse/2.0

XML模式文件

landUse.xsd

建议的命名空间前缀

luse

模块说明

LandUse 模块表达地表特定土地用途的区域。

模块名称

地形

XML命名空间标识符

http://www.opengis.net/citygml/relief/2.0

XML模式文件

relief.xsd

建议的命名空间前缀

dem

模块说明

Relief 模块在城市模型中表达地形。CityGML支持不同级别的地形表示,反映不同的精度或分辨率。地形可以是一个规则的栅格或网格,如TIN,断线,和离散多点。

模块名称

交通

XML命名空间标识符

http://www.opengis.net/citygml/transportation/2.0

XML模式文件

transportation.xsd

建议的命名空间前缀

tran

模块说明

Transportation 模块表达城市内的交通特征,如道路、轨道、铁路或广场。交通特征可以是线性网络或通过几何描述的三维表面。

模块名称

隧道

XML命名空间标识符

http://www.opengis.net/citygml/tunnel/2.0

XML模式文件

tunnel.xsd

建议的命名空间前缀

tun

模块说明

Tunnel 模块以四层细节(LOD 1-4)的形式表达隧道、隧道部件、隧道装置和内部隧道结构的主题和空间。

模块名称

植被

XML命名空间标识符

http://www.opengis.net/citygml/vegetation/2.0

XML模式文件

vegetation.xsd

建议的命名空间前缀

veg

模块说明

Vegetation 模块提供了主题类来表达植被对象。CityGML的植被模型分为单独的植被对象(如树木)和植被区域(如森林或其他植物群落)。

模块名称

水体

XML命名空间标识符

http://www.opengis.net/citygml/waterbody/2.0

XXML模式文件

waterbody.xsd

建议的命名空间前缀

wtr

模块说明

WaterBody 模块表达河流、运河、湖泊和盆地的主题和三维几何图形,但没有继承任何水文或其他动态信息。

模块名称

纹理表面[已弃用]

XML命名空间标识符

http://www.opengis.net/citygml/texturedsurface/2.0

XML模式文件

texturedSurface.xsd

建议的命名空间前缀

tex

模块说明

TexturedSurface 表面模块为3D表面提供视觉外观属性(颜色,光泽,透明度)和纹理。由于建模方法的固有限制,该模块被标记为已弃用,预计未来的CityGML版本中被删除。此模块提供的外观信息可以转换为CityGML的 Appearance 模块,不会丢失信息。因此, 强烈建议 不要使用 TexturedSurface 模块。

7.2. CityGML专用文件(profile)

CityGML专用文件是主题扩展模块与CityGML核心模块之间的一个任意组合。每个CityGML实例文档应使用与所提供数据相适应的CityGML专用文件。一般来说,在实例文档中使用CityGML专用文件有两种方法:

  1. CityGML专用文件的定义内嵌在CityGML实例文档中
    可以使用在XML模式实例命名空间 http://www.w3.org/2001/XMLSchema-instance (通常与前缀 xsi 相关联)中定义的 schemaLocation 属性,将CityGML专用文件绑定到实例文档。 xsi:schemaLocation 提供了一种定位实例文档中定义的命名空间的XML模式定义的方法。它的值是一个由空格分隔的统一资源标识符(URIs)列表,其中每一对包含一个命名空间,后面跟着该命名空间的XML模式定义的位置,通常是一个.xsd文件。 通过这种方式,各个CityGML模块的命名空间应在CityGML实例文档中定义。这个 xsi:schemaLocation 属性提供每个模块各自的XML模式定义的位置。附件G中给出的所有示例文件都遵循第一种方法。

  2. CityGML专用文件的定义由单独的XML模式定义文件提供
    CityGML专用文件也可以由它自己的XML模式文件指定。这个模式文件应该通过导入相应的XML模式定义来组合适当的CityGML模块。为此,应使用XML模式命名空间中定义的 import 元素 http://www.w3.org/2001/XMLSchema (通常与前缀 xs 相关联)。对于 xs:import 元素,须声明导入的CityGML模块的命名空间以及命名空间的XML模式定义的位置。为了将CityGML专用文件应用到实例文档,须使用 xsi :schemaLocation 属性将专用文件的模式绑定到实例文档。CityGML专用文件的XML模式文件不得包含其它内容。 专用文件模式的 targetNamespace 应该与导入的CityGML模块的命名空间不同。与专用文件相关联的命名空间应该由实例文档的发起者确定,并且必须以未使用的全局唯一URI的形式给出。专用文件的XML模式文件必须对解析CityGML实例文档的所有人都可用(或在互联网上可访问)。

第二种方法由以下CityGML的基本专用文件的XML模式定义的示例来说明。由于基本专用文件是所有CityGML模块的并集,相应的XML模式定义将导入每个CityGML模块。通过这种方式,CityGML数据模型的所有组件都可以通过引用基本专用文件的实例文档进行交换。基本专用文件的模式定义随CityGML模式包一起提供,可以访问: http://schemas.opengis.net/citygml/profiles/base/2.0/CityGML.xsd

<xs:schema xmlns="http://www.opengis.net/citygml/profiles/base/2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.opengis.net/citygml/profiles/base/2.0" elementFormDefault="qualified"
attributeFormDefault="unqualified" version="2.0.0">
<xs:import namespace="http://www.opengis.net/citygml/appearance/2.0"
schemaLocation="http://schemas.opengis.net/citygml/appearance/2.0/appearance.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/bridge/2.0"
schemaLocation="http://schemas.opengis.net/citygml/bridge/2.0/bridge.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/building/2.0"
schemaLocation="http://schemas.opengis.net/citygml/building/2.0/building.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/cityfurniture/2.0"
schemaLocation="http://schemas.opengis.net/citygml/cityfurniture/2.0/cityFurniture.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/cityobjectgroup/2.0"
schemaLocation="http://schemas.opengis.net/citygml/cityobjectgroup/2.0/cityObjectGroup.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/generics/2.0"
schemaLocation="http://schemas.opengis.net/citygml/generics/2.0/generics.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/landuse/2.0"
schemaLocation="http://schemas.opengis.net/citygml/landuse/2.0/landUse.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/relief/2.0"
schemaLocation="http://schemas.opengis.net/citygml/relief/2.0/relief.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/transportation/2.0"
schemaLocation="http://schemas.opengis.net/citygml/transportation/2.0/transportation.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/tunnel/2.0"
schemaLocation="http://schemas.opengis.net/citygml/tunnel/2.0/tunnel.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/vegetation/2.0"
schemaLocation="http://schemas.opengis.net/citygml/vegetation/2.0/vegetation.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/waterbody/2.0"
schemaLocation="http://schemas.opengis.net/citygml/waterbody/2.0/waterBody.xsd"/>
<xs:import namespace="http://www.opengis.net/citygml/texturedsurface/2.0"
schemaLocation="http://schemas.opengis.net/citygml/texturedsurface/2.0/texturedSurface.xsd"/>
</xs:schema>

下面的CityGML数据集摘录说明了如何应用基本专用文件模式 CityGML.xsd 到CityGML实例文档。该数据集包含两个建筑对象和一个城市对象组合,由CityGML定义基本专用文件 CityGML.xsd 是使用根元素的 xsi:schemaLocation 属性引用的。因此,所有CityGML模块都由实例文档使用,不需要进一步引用CityGML模块的XML模式文档。

<core:CityModel xmlns="http://www.opengis.net/citygml/profiles/base/2.0"
xmlns:core="http://www.opengis.net/citygml/2.0"
xmlns:bldg="http://www.opengis.net/citygml/building/2.0"
xmlns:grp="http://www.opengis.net/citygml/cityobjectgroup/2.0"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xAL="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/citygml/profiles/base/2.0
http://schemas.opengis.net/citygml/profiles/base/2.0/CityGML.xsd">
<core:cityObjectMember>
<bldg:Building gml:id="Build0815">
<core:externalReference>
<core:informationSystem>http://www.adv-online.de </core:informationSystem>
<core:externalObject>
<core:uri>urn:adv:oid:DEHE123400007001</core:uri>
</core:externalObject>
</core:externalReference>
<bldg:function
codeSpace="http://www.sig3d.org/codelists/standard/building/2.0/_AbstractBuilding_function.xml">1000</bldg:function>
<bldg:yearOfConstruction>1985</bldg:yearOfConstruction>
<bldg:roofType
codeSpace="http://www.sig3d.org/codelists/standard//building/2.0/_AbstractBuilding_roofType.xml">1030</bldg:roofType>
<bldg:measuredHeight uom="#m">8.0</bldg:measuredHeight>
<bldg:storeysAboveGround>2</bldg:storeysAboveGround>
<bldg:storeyHeightsAboveGround uom="#m">2.5 </bldg:storeyHeightsAboveGround>
<bldg:lod2Solid> ... </bldg:lod2Solid>
</bldg:Building>
</core:cityObjectMember>
<core:cityObjectMember>
<bldg:Building gml:id="Build0817"></bldg:Building>
</core:cityObjectMember>
<core:cityObjectMember>
<grp:CityObjectGroup gml:id="Complex113">
<gml:name>Hotel complex 'Scenic View'</gml:name>
<grp:function>building group</grp:function>
<grp:groupMember role="main building" xlink:href="#Build0817"/>
<grp:groupMember xlink:href="#Build0815"/>
</grp:CityObjectGroup>
</core:cityObjectMember>
</core:CityModel>

8. 空间模型

CityGML要素的空间属性被用GML3几何模型中的对象来表示。该模型基于标准ISO 19107“空间模式”( Herring 2001),根据公认的边界表示法表示3D几何体(B-Rep,cf.Foley et al.1995)。CityGML实际上只使用GML3 几何包的一个子集,定义GML3的专用文件(profile)。该子集在图9和图10中描绘。此外,GML3的显式边界表示通过场景图概念进行了扩展,该概念允许隐式表示具有相同形状的要素的几何体,从而更有效地表示空间(第8.2章)。

8.1. 几何拓扑模型

GML3的几何模型由图元组成,图元可以组合成复合体、复合几何或聚合体。对于每个维度,都有一个几何单元:零维对象是一个Point,一个一维对象是一条_Curve,一个二维对象是一个_Surface,一个三维对象是一个_Solid(图9)。每个几何图形都有自己的坐标参考系统。一个实体由若干面构成,面由曲线构成。在CityGML中,一条曲线被定义为一条直线,因此只使用GML3的LineString类。CityGML中的表面由Polygons表达,它定义了一个平面几何,即边界和所有内部点都需要位于一个平面上。

Fig9
图 9. CityGML几何模型的UML图(GML3的子集和概要):图元和组合。

组合的几何形状可以是图元的聚合体、复合物(见图11)。对于一个聚合体,组件之间的空间关系不受限制,它们可能是不相交的、重叠的、接触的或不连接的。GML3为每个维度:MultiPointMultiCurveMultiSurfaceMultiSolid,提供特殊聚合(见图10)。与聚合不同,复合体具有拓扑结构:其组件须不相交,不得重叠,最多允许其边界接触或共享部分边界。复合体是GML3提供的特殊复合物,只能包含相同维度的元素。它的元素也须是不相交的,但边界在拓扑上连接。复合物可以是一个CompositeSolidCompositeSurfaceCompositeCurve。(参见图9)。

Fig10
图 10. CityGML几何模型的UML图:复合体和聚合体

OrientableSurface(定向面)是具有明确方向,即可以区分前后两侧。这可用于将纹理指定给面的特定边,或在边界实体区分曲面的外部和内部。请注意,曲线和面在GML中有一个默认方向,该方向由定义点的顺序决定。因此,如果给定GML几何体的方向必须反转,则只需使用OrientableSurface

TriangulatedSurfaces(三角面)是一种特殊的面,它是用来表示地形的不规则三角网。当TriangulatedSurfaces是由显式Triangles组成时,子类TIN通过一组控制点以隐式方式表示三角剖分,定义三角形的节点。可以使用标准三角剖分方法(Delaunay三角剖分)重建三角剖分。此外,打断线和停止线定义了地形轮廓特征。

Fig11
图 11. 组合几何图形

GML3复合模型实现了对应维度的每个单元类型的递归聚合模式。此聚合模式允许定义嵌套聚合(组件层次结构)。例如,建筑几何图形(CompositeSolid)可以由房屋几何图形(CompositeSolid)和车库几何图形(Solid)组成,而房屋几何图形进一步分解为屋顶几何图形(Solid)和房屋主体几何图形(Solid)。

CityGML提供了拓扑的显式建模,例如在要素或其他几何体之间共享几何体对象。空间的一部分仅由几何体对象表示一次,并由该几何体对象定义或限定的所有要素或更复杂的几何体引用,从而避免了冗余,保持了部件间的显式拓扑关系。基本上有三种情况。首先,两个要素在空间可以由相同的几何体上定义。例如,如果路径既是交通要素又是植被要素,则定义路径的面几何图形将同时由交通对象和植被对象引用。其次,几何图形可以在要素和其他几何单元之间共享。定义建筑墙的几何图元可以被引用两次:通过定义建筑几何图形的实体几何单元和墙要素。第三,两个几何对象可能在边界上引用相同的几何图形。例如,一个建筑和一个相邻的车库可以用两个实体来表达,中间的接触区可以被两个实体引用,但只能表示一次。从图12可以看出,这需要划分各自的表面。通常,边界表示可见的表面。然而,使拓扑邻接显式,并允许删除一个组合对象的一部分,而不在剩余的聚合接触元素中留下洞。 虽然允许接触,但物体的渗透并不是为了避免同一空间的多重表达。但是,在CityGML中使用拓扑是可选的。

为了实现拓扑结构,CityGML使用了GML提供的XLinksXML概念。由不同的几何集合或不同的主题要素共享的每个几何对象都被分配了一个唯一的标识符,该标识符可以由使用href属性的GML几何属性引用。CityGML不部署内置的GML3拓扑包,后者提供了伴随几何图形的单独的拓扑对象。这种拓扑结构非常复杂精细。当数据集(可能包括或忽略拓扑)应该由相同的数据模型覆盖时,它缺乏灵活性。XLink拓扑简单灵活,几乎与显式的GML3拓扑模型一样强大。然而,XLink拓扑的一个缺点是拓扑连接的对象之间的导航只能单向执行(从聚合到其组件),而不像GML的内置拓扑那样(立即)双向执行。CityGML的拓扑表示示例在附录G.4中列出的数据集中给出。

Fig12
图 12. CityGML中对象和几何图形的递归聚合(图:IGG Uni Bonn)

下面摘录的CityGML示例文件定义了一个gml:Polygon,包含一个gml:id wallSurface4711,这是建筑的几何属性lod2Solid的一部分。与第一个建筑相邻的另一个建筑在其几何表示中引用了这个共享多边形。

<bldg:Building>
<bldg:lod2Solid>
<gml:surfaceMember>
<gml:Polygon gml:id="wallSurface4711">
<gml:exterior>
<gml:LinearRing>
<gml:pos srsDimension="3">32.0 31.0 2.5</gml:pos>
...
</gml:LinearRing>
</gml:exterior>
</gml:Polygon>
</gml:surfaceMember>
...
</bldg:lod2Solid>
</bldg:Building>
...
<bldg:Building>
<bldg:lod2Solid>
<gml:surfaceMember>
<gml:OrientableSurface orientation="-">
<gml:baseSurface xlink:href="#wallSurface4711"/>
</gml:OrientableSurface>
</gml:surfaceMember>
...
</bldg:lod2Solid>
</bldg:Building>

8.2. 空间参照系

当处理地理信息和虚拟三维城市模型时,精确的空间参考是至关重要的,也是将不同空间数据集集成到一个三维城市模型中的关键。CityGML继承了GML3处理坐标参考系统(CRS)的空间功能,CRS是GML 3.1.1中表示空间参考的常用方式。由于CityGML是一个真正的3D标准,几何元素与3D CRS相关联。只有少数情况CityGML允许引用二维几何元素(例如,在CityGML的外观模块中定义的地理引用纹理参考点必须是二维的坐标值,参考章节9.4)。

通常,一个几何图形可以通过从抽象GML超类GML:_Geometry继承放入属性srsName指向其CRS定义。这可能是对权威组织如欧洲石油勘探集团(EPSG)提供的知名CRS定义的引用,也可能是指向在同一个CityGML实例文档中本地定义的CRS的指针。OGC文档“定义标识符URN在OGC命名空间”(cf. Whiteside 2009;OGC Doc. No.07-092r3)为CRS参考资料的URN编码提供最佳方案。其中,它描述了如何引用一个众所周知的3D CRS定义(如3D地理CRS),以及结合了两种或两种以上众所周知的CRS定义(例如,投影CRS用于平面参考,垂直CRS用于高度参考)的复合CRS。在附录G中给出了在CityGML实例文档中表示复合CRS的示例。

GML3还支持工程CRS的定义,这些CRS是在局部环境中使用的。例如,这可能是一个局部的三维笛卡尔坐标系,地球表面近似平地,因此忽略了地球曲率对要素几何的影响(参见GML 3.1.1规范文档的第12.1.4.4章)。局部工程CRS通常应用于AEC/FM领域,因此在将CAD数据或BIM模型集成到三维城市模型中时非常有用。附件 G.9 提供了一个示例,演示了在 CityGML 实例文档中定义工程 CRS 以及在要素几何中使用局部坐标值。工程CRS的定义需要一个锚点,它将本地坐标系的原点与地球表面上的一个点联系起来,以便于本地工程CRS的坐标转换。

根据GML 3.1.1,如果一个几何元素上没有给出srsName属性,那么CRS应被指定为这个几何元素所处的更大上下文的一部分,例如一个几何集合。为了方便构造要素和要素集合实例,gml:Envelope(或gml:Box)上的srsName属性的值,也就是特征的gml:boundedBy属性的值,应被要素或集合成员的所有属性中所有直接表达的几何元素所继承,除非被本地存在的srsName推翻。因此,如果一个几何体使用了与其父要素的gml:boundedBy属性相同的CRS,它就没有必要携带srsName属性。CRS的继承一直延续到各级深度的嵌套,但是如果被本地的srsName所替代,那么新的CRS会被它的所有子代依次继承(参见GML 3.1.1规范文档的8.3章)。

强烈建议任何 CityGML 实例文档都要明确指定所有包含的几何元素的 CRS。如果实例文档要在外部与第三方交换或将与其他空间数据集整合,这一点尤为重要。在同一数据集内混合使用不同的CRS是可能的,并且符合GML 3.1.1的要求,而在CityModel特征集合上给出的单一CRS引用(参见第10.1章)简化了软件系统对数据集的处理。至于CityGML 2.0,这个建议是非规范性的,因此没有附带一致性类。这样做的主要原因是为了保持与CityGML 1.0的向后兼容性。

8.3. 隐式几何、原型对象、场景图概念

隐式几何的概念是对GML3几何模型的改进。例如,它被用于CityGML的建筑、桥梁、隧道和植被模型,以及城市家具和通用对象。隐式几何模型可以应用于CityGML不同主题领域的要素,以便在特定的细节层次模型(LOD)内对要素进行几何表示。因此,每个扩展模块可以定义空间属性,为其主题类提供隐式几何图形。隐式几何图形的概念是在CityGML核心模块中定义的(参见第10.1章)。隐式几何是CityGML空间模型的一部分,因此在这里进行描述。UML图如图13。相应的XML模式定义在附件A.1中提供。

隐式几何是一个几何对象,其形状只作为原型几何体存储一次,例如一棵树或其他植被对象,一个交通灯或交通标志。这个原型几何体对象被多次重复使用或引用,无论相应的要素出现在三维城市模型中的哪里。每一次出现都由一个与原型形状几何体的链接(在局部的笛卡尔坐标系中)、一个与原型的每个三维坐标相乘的变换矩阵和一个表示对象在世界坐标参考系中的基点的固定点来表达。这个参考点也定义了变换后坐标所属的CRS。为了确定隐式几何的绝对坐标,固定点坐标必须加到矩阵乘法结果中。变换矩阵负责了原型的旋转、缩放和局部平移。它是一个4x4矩阵,用齐次坐标即(x,y,z,1),与原型坐标相乘。这样,即使是投影也可以用变换矩阵来建模。

Fig13
图 13. 隐式几何的 UML 图。前缀用于指示与模型元素相关的 XML 命名空间。没有前缀的元素名称是在CityGML核心模块中定义的。

在CityGML中使用隐式几何体概念可以提升空间效率。如:由于同种树木的形状可以被视为完全相同,因此如果要对大量树木中的每一棵树的详细几何形状进行显式建模,效率会很低。隐式几何图形的概念类似于计算机图形学领域用于表达场景图图元实例概念(Foley等人,1995)。

implicit geometry,是指具有复杂形状的几何对象可以简单地用一个基点和一个变换来表示,从而在世界坐标系的某一特定位置展开对象形状。

ImplicitGeometry的形状可以用专有格式的外部文件来表示,例如VRML文件、DXF文件或3D Studio MAX文件。对隐式几何的引用可以通过指向本地或远程文件的URI来指定,甚至可以指向一个适当的网络服务。另外,形状可以由GML3几何对象来定义。这样做的好处是,它可以在CityGML数据集中进行在线存储或交换。通常情况下,几何形状是在本地坐标系中定义的,原点位于对象的范围内或附近。如果形状是由URI引用的,还必须指定所表示对象的MIME类型(例如,VRML模型的 "model/vrml "或X3D模型的 "model/x3d+xml")。

与使用绝对世界坐标表达物体的显式建模相比,三维物体几何体的隐式表达具有一些优势。它更节省空间,因此系统可以存储或处理更多的场景。由于3D图形卡支持场景图的概念,因此可以加快可视化的速度。此外,由于只需交换库中的对象,因此便于使用不同形状版本的对象,例如不同季节的对象(见图65的例子)。

XML命名空间

CityGML core模块的XML命名空间定义了隐含几何图形的概念,由统一资源标识符(URI) http://www.opengis.net/citygml/2.0 标识。在核心模块的XML Schema定义中,这个URI也被用来标识默认的命名空间。

ImplicitGeometryType, ImplicitRepresentationPropertyType

<xs:complexType name="ImplicitGeometryType">
<xs:complexContent>
<xs:extension base="gml:AbstractGMLType">
<xs:sequence>
<xs:element name="mimeType" type="gml:CodeType" minOccurs="0"/>
<xs:element name="transformationMatrix" type="TransformationMatrix4x4Type" minOccurs="0"/>
<xs:element name="libraryObject" type="xs:anyURI" minOccurs="0"/>
<xs:element name="relativeGMLGeometry" type="gml:GeometryPropertyType" minOccurs="0"/>
<xs:element name="referencePoint" type="gml:PointPropertyType"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================== -->
<xs:element name="ImplicitGeometry" type="ImplicitGeometryType" substitutionGroup="gml:_GML"/>
<!-- ========================================================================================== -->
<xs:complexType name="ImplicitRepresentationPropertyType">
<xs:sequence minOccurs="0">
<xs:element ref="ImplicitGeometry"/>
</xs:sequence>
<xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>

8.3.1. 代码列表

ImplicitGeometrymimeType属性被指定为gml:CodeType。这个属性的值可以在一个代码列表中列举出来。关于这一代码表的建议见附件C.6。

8.3.2. CityGML数据集示例

下面的城市家具对象(参见第10.9章)是一个隐式几何的例子,它由LOD2中的几何对象进行表达。

<frn:CityFurniture>
<!-- class “traffic”; as specified in the code list proposed by the SIG 3D (cf. annex C.4) -->
<frn:class codeSpace="http://www.sig3d.org/codelists/standard/cityfurniture/2.0/CityFurniture_class.xml">1000</frn:class>
<!-- function “traffic light”; as specified in the code list proposed by the SIG 3D (cf. annex C.4) -->
<frn:function codeSpace="http://www.sig3d.org/codelists/standard/cityfurniture/2.0/CityFurniture_function.xml">1080</frn:function>
<frn:lod2ImplicitRepresentation>
<core:ImplicitGeometry>
<core:mimeType>model/vrml</core:mimeType>
<core:libraryObject>
http://www.some-3d-library.com/3D/furnitures/TrafficLight434.wrl
</core:libraryObject>
<core:referencePoint>
<gml:Point srsName="urn:ogc:def:crs,crs:EPSG:6.12:31467,crs:EPSG:6.12:5783">
<gml:pos srsDimension="3">5793898.77 3603845.54 44.8</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</frn:lod2ImplicitRepresentation>
</frn:CityFurniture>

交通信号灯的几何形状(根据附件C.4中提出的代码表,等级为 "1000"、功能为 "1080 "的城市家具)由一个VRML文件定义,该文件由一个URL指定。这个库中的对象是在本地坐标系中定义的,通过添加参考点的坐标将其转换为实际位置。

下面是一个CityGML文件的片段,提供了一个更复杂的隐式几何的例子。

<frn:CityFurniture>
<!-- class “traffic”; as specified in the code list proposed by the SIG 3D (cf. annex C.4) -->
<frn:class>1000</frn:class>
<!-- function “traffic light”; as specified in the code list proposed by the SIG 3D (cf. annex C.4) -->
<frn:function>1080</frn:function>
<frn:lod2ImplicitRepresentation>
<core:ImplicitGeometry>
<core:mimeType>model/vrml</core:mimeType>
<core:transformationMatrix>
0.866025 -0.5 0 0.7
0.5 0.866025 0 0.8
0 0 1 0
0 0 0 1
</core:transformationMatrix>
<core:libraryObject>
http://www.some-3d-library.com/3D/furnitures/TrafficLight434.wrl
</core:libraryObject>
<core:referencePoint>
<gml:Point srsName="urn:ogc:def:crs,crs:EPSG:6.12:31467,crs:EPSG:6.12:5783">
<gml:pos srsDimension="3">5793898.77 3603845.54 44.8</gml:pos>
</gml:Point>
</core:referencePoint>
</core:ImplicitGeometry>
</frn:lod2ImplicitRepresentation>
</frn:CityFurniture>

除第一个例子外,还指定了一个变换矩阵。它是一个齐次矩阵,以行方式进行序列化,即列表中的前四个条目表示矩阵的第一行。矩阵结合了矢量的平移(0.7,0.8,0)—本地参考系的原点不是物体的中心,绕z轴旋转30度(cos(30)=0.866025sin(30)=0.5)。为使交通信号灯与道路保持一致,这个旋转是必要的。交通信号灯的实际位置计算如下:

  1. 将VRML文件中的每个点(齐次坐标)乘以变换矩阵。

  2. 对每一个结果点,加上参考点(5793898.77,3603845.54,44.8,1)T ,得出城市家具的实际几何形状。

8.3.3. 一致性要求

基本要求

  1. 了使用隐式几何概念对某一要素进行几何表达,该要素的相应主题类应定义一个隐式表示的空间属性ImplicitRepresentationPropertyType。因此,对于所有CityGML扩展模块,只能将类型ImplicitRepresentationPropertyType用于提供隐式几何的空间属性。

  2. 如果隐式几何的形状是由URI隐式几何体的libraryObject属性(类型:xs:anyURI)引用的,也必须指定被表示对象的MIME类型。

参考文献的完整性

ImplicitRepresentationPropertyType类型可以包含一个内联的隐式几何元素,或者使用 GML 3.1.1 的 XLink 概念对远程隐式几何元素进行 XLink 引用。在 后一种情况下,ImplicitRepresentationPropertyType的相应属性的xlink:href属性只能指向远程隐式几何元素(其中远程隐式几何元素位于另一文档或同一文档的其他地方)。必须提供包含的元素或引用,但不能同时提供。

9. 外观模型

除了空间属性之外,CityGML 的特征还有外观—要素表面的可观察属性。外观并不局限于视觉数据,而且可以表达被称为主题的任意类别,如红外辐射、噪声污染或地震引起的结构应力。每个LOD可以为一个特定的主题定义一个单独的表象。一个外观由每个表面几何对象的数据组成即表面数据。一个表面几何对象可以有多个主题的表面数据。同样,表面数据也可以由多个表面几何对象共享(如道路铺装)。最后,表面数据值既可以在整个表面上是恒定的,也可以随表面内的确切位置移动而变化。 CityGML 的外观模型是在扩展模块外观中定义的(参见第 7 章)。外观模型UML图如图14所示,XML 模式定义见附件A.2。

Fig14
图 14. CityGML的外观模型的UML图。前缀用来表示与模型元素相关联的 XML 命名空间,没有前缀的元素名称是在 CityGML 外观模块中定义的。

在CityGML的外观模型中,主题只用一个标识符来表达。一个城市模型的外观对于一个给定的主题来说,是由一组引用这个主题的外观对象来定义的。因此,属于同一主题的外观对象组成了一个虚拟组。它们可以被包含在CityGML数据集的不同位置。此外,一个CityGML数据集可能包含多个主题。一个外观对象收集了与特定主题相关的表面数据,可以是单个要素,也可以是任何LOD中的整个城市模型。表面数据由类_SurfaceData及其子类的对象来表达,每个对象都涵盖了表面几何对象的整个区域。表面数据和表面几何对象之间的关系由URI统一资源标识符)链接表示,从一个_SurfaceData 对象到一个类型为 gml: AbstractSurfaceType或类型gml: MultiSurface

固定的表面属性被建模为材质,随表面位置变化的表面属性被建模为纹理。每个表面几何对象可以在每个主题和侧面同时拥有一个材质和一个纹理。这允许同时提供一个恒定的近似值和一个复杂的表面属性测量值。一个应用程序负责为其任务(如分析或渲染)选择合适的属性表示。具体的混合没有定义,因为这超出了CityGML的范围。如果一个表面几何对象要接收多个纹理或材质,每个纹理或材质都需要一个单独的主题。主题的混合或其用法在 CityGML 中没有定义,由应用程序自行决定。

XML命名空间

CityGML外观模块的XML命名空间由统一资源标识符(URI) http://www.opengis.net/citygml/appearance/2.0 定义。在外观模块的XML 模式定义中,这个URI也被用来标识默认的命名空间。

9.1. 外观、要素和几何图形之间的关系

尽管表面数据和表面之间有密切的关系,但表面数据是单独存储在要素中的,以保留原始的GML几何模型。表面数据不是各自目标表面几何对象的属性,而是每个表面数据对象保持一组URI,指定目标面几何对象的gml:ids(类型为gml: AbstractSurfaceTypegml: MultiSurface)。在复合或集合目标表面的情况下,表面数据对象被分配给所有包含的表面。其他目标类型如要素、实体或gml: AbstractSurfacePatchType(包括gml: Triangle)是无效的,尽管XML模式语言不能正式表达对URI目标类型的约束。对于表面数据值到表面补丁的确切映射功能,请参考各自的表面数据类型描述。

有效的目标类型限制为gml: AbstractSurfaceTypegml: MultiSurface,不包括基于GML几何模型和在CityGML中使用的gml: AbstractSurfacePatchType。一般来说,GML的表面是用gml: AbstractSurfaceType的子类来表示。这样的表面要求是连续的。一个gml: MultiSurface不需要满足这个要求,因此它不是gml: AbstractSurfaceType(参见8.1)。由于获得的真实世界的表面往往不能保证是连续的,CityGML允许gml: MultiSurface在不同的地方表示一个要素的边界,作为连续表面的替代。为了类似于gml: CompositeSurface来处理这些表面,表面数据对象被允许链接到gml: MultiSurface对象。因此,一个gml: AbstractGMLType(它包括gml: Trianglegml: Rectangle)不能接收一个gml:id,也不能被引用。

每个表面几何对象的每个主题最多可以有一个有效的正面材料、一个有效的背面材料、一个有效的正面纹理和一个有效的背面纹理。如果多个表面数据对象被分配到一个表面几何对象上,会选择一个激活。由于嵌套的表面定义而产生的多个间接分配是通过覆盖来解决的,例如,一个gml:Polygon的正面材质是通过覆盖其父代gml:CompositeSurface的正面材质而激活。多重直接分配即一个表面几何对象的gml:id在一个主题中,不允许被多次引用,并通过在冲突的表面数据对象中选择一个来解决实现依赖的问题。因此,需要避免在一个主题中进行多次直接分配。

每个_CityObject要素都可以存储表面数据。因此,表面数据排列在CityGML数据集的要素层次中。然后,表面数据使用URI链接到其目标面。尽管这个链接机制允许在要素层次结构中链接到另一个要素表面,建议仍遵循局部性的原则。表面数据的存储方式应使链接的表面只属于包含的城市对象要素及其子对象。“全局性的”表面数据应该与城市模型一起存储。遵循定位原则还可以确保从WFS中检索的CityObjects包含相应的外观信息。

定位原则允许下面的算法找到所有相关的_SurfaceData对象,在一个给定的_CityObject中引用表面几何对象(类型为gml: AbstractSurfaceTypegml: MultiSurface)。

清单1:找到所有相关的_SurfaceData对象的算法,这些对象是在一个给定的_CityObject中指定表面几何对象(类型为gml: AbstractSurfaceTypegml: MultiSurface)。
*function findSurfaceData* ::
__in__ gmlSurface, cityObject +
__out__ frontMaterial, frontTexture, backMaterial, backTexture

1: frontMaterial := empty
2: frontTexture := empty
3: backMaterial := empty
4: backTexture := empty
5: flip := false
6:
7: while (gmlSurface) { // traverse the geometry hierarchy from inner to outer
8: cObj := cityObject // start from the innermost cityobject
9:
10: while (cObj) { // traverse the cityobject hierarchy for the current geometry object
11: // search all surfaceData objects in all appearance containers
12: foreach (appearance in cObj) {
13: foreach (surfaceData in appearance) {
14: if (surfaceData refers to gmlSurface) { // if a surfaceData object refers to the geometry object, check its category
15: if (flip) { // consider flipping
16: // only pick the first surfaceData for a particular category
17: if (surfaceData is frontside material AND backMaterial is empty) {
18: backMaterial := surfaceData
19: }
20: if (surfaceData is frontside texture AND backTexture is empty) {
21: backTexture := surfaceData
22: }
23: if (surfaceData is backside material AND frontMaterial is empty) {
24: frontMaterial := surfaceData
25: }
26: if (surfaceData is backside texture AND frontTexture is empty) {
27: frontTexture := surfaceData
28: }
29: } else {
30: // only pick the first surfaceData for a particular category
31: if (surfaceData is frontside material AND frontMaterial is empty) {
32: frontMaterial := surfaceData
33: }
34: if (surfaceData is frontside texture AND frontTexture is empty) {
35: frontTexture := surfaceData
36: }
37: if (surfaceData is backside material AND backMaterial is empty) {
38: backMaterial := surfaceData
39: }
40: if (surfaceData is backside texture AND backTexture is empty) {
41: backTexture := surfaceData
42: }
43: }
44:
45: // shortcut: could stop here if all 4 categories have been found
46: }
47: }
48: }
49: cObj := cObj.parent // this also includes the global CityModel
50: }
51: gmlSurface := gmlSurface.parent // this also includes a root gml:MultiSurface
52: if (gmlSurface isA gml:OrientableSurface AND gmlSurface.orientation is negative) {
53: negate flip
54: }
55: }

_SurfaceData对象的isFront属性的评估需要考虑到gml: OrientableSurfaces,因为它们可以翻转一个表面的方向。假设一个gml: OrientableSurfaces os,它翻转了它的基本表面bs。一个以bs为目标的正面纹理t将出现在bs的实际正面上。如果t的目标是os,它将出现在bs的背面。如果t同时以osbs为目标,它就会出现在bs的两边,因为它成为了正面和背面的纹理。

XLinks影响了伪代码中的层次结构遍历。一般来说,表面数据和几何对象的分离需要重新评估表面数据的分配,因为每次出现几何对象的时候,都需要在相应的_CityObject的背景中进行评估。在算法中逐步提高(几何体或_CityObject)的层次结构,即为了这个算法的目的,被引用的对象在概念上被复制到所指的XLink的位置。特别是,这适用于隐式几何对象。如果一个隐式几何对象包含GML几何(在relativeGMLGeometry属性中),表面数据的分配就需要在每个引用的_CityObject的背景中被重新评估。因此,一个给定的隐式几何对象的外观(非相对几何图形)可能会在其出现的时候有所不同。如果所有需要的表面数据对象被放置在__外观_对象中,并且后者被储存在外观对象中,则会产生一致的外观结果:

  1. 在包含原始隐式几何_CityObject中,用XLinks引用所有隐式几何中引用的_CityObject中的相同外观对象,或

  2. 在全局的CityModel中。

9.2. 外观和表面数据

特征类Appearance定义了一个表面数据对象的容器。它提供了所有包含的表面数据对象都与之相关的theme。一个CityGML文件中所有具有相同主题的外观对象被认为是一个组。表面数据对象被存储在surfaceDataMember属性中。它们可以作为远程属性同时在多个主题中使用。 特征类__SurfaceData是材质和纹理的基类。它唯一的元素是布尔标志isFront,它决定了一个表面数据对象适用于哪一表面。请注意,外观模型的所有类都支持CityGML的ADE机制(参见第6.12和10.13章)。应用特定扩展的钩子是由元素"_GenericApplicationPropertyOf …​ "实现的。

AppearanceType, Appearance, AppearancePropertyType

<xs:complexType name="AppearanceType">
<xs:complexContent>
<xs:extension base="gml:AbstractFeatureType">
<xs:sequence>
<xs:element name="theme" type="xs:string" minOccurs="0"/>
<xs:element name="surfaceDataMember" type="SurfaceDataPropertyType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="_GenericApplicationPropertyOfAppearance" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="Appearance" type="AppearanceType" substitutionGroup="gml:_Feature"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfAppearance" type="xs:anyType" abstract="true"/>
<!-- ========================================================================================= -->
<xs:complexType name="AppearancePropertyType">
<xs:sequence minOccurs="0">
<xs:element ref="Appearance"/>
</xs:sequence>
<xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>

appearanceMember, appearance

<xs:element name="appearanceMember" type="gml:FeaturePropertyType" substitutionGroup="gml:featureMember"/>
<!--=========================================================================================-->
<xs:elementname="appearance"type="AppearancePropertyType"substitutionGroup="core:_GenericApplicationPropertyOfCityObject"/>

appearanceMember的定义允许在一个城市模型特征集合中任意排列_CityObject 特征和Appearance特征(参见第10.1章)。

为了在一个单一的_CityObject特征中存储外观信息,核心模块的相应抽象类_CityObject是由外观属性元素来扩展的。这个额外的外观属性是使用CityGML的应用领域扩展机制扩展到_CityObject中的(参见第10.13章)。 通过这种方式,_CityObject的每个主题子类都继承了这个属性。因此,外观模块对每个定义_CityObject 的主题子类的扩展模块都有影响。

AbstractSurfaceDataType, __SurfaceData, SurfaceDataPropertyType

<xs:complexType name="AbstractSurfaceDataType" abstract="true">
<xs:complexContent>
<xs:extension base="gml:AbstractFeatureType">
<xs:sequence>
<xs:element name="isFront" type="xs:boolean" default="true" minOccurs="0"/>
<xs:element ref="_GenericApplicationPropertyOfSurfaceData" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="_SurfaceData" type="AbstractSurfaceDataType" abstract="true" substitutionGroup="gml:_Feature"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfSurfaceData" type="xs:anyType" abstract="true"/>
<!-- ========================================================================================= -->
<xs:complexType name="SurfaceDataPropertyType">
<xs:sequence minOccurs="0">
<xs:element ref="_SurfaceData" minOccurs="0"/>
</xs:sequence>
<xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>

9.3. 材质

材质定义的光反射属性对整个面几何对象来说是不变的。X3DMaterial类的定义来自X3D和COLLADA规范(参考X3D、COLLADA规范)。diffuseColor定义了漫反射光的颜色。 specularColor定义了镜面反射的颜色。emissiveColor是表面自身的颜色。所有的颜色都使用RGB值,红、绿、蓝的取值在0和1之间。透明度是使用transparency元素单独定义的,其中0代表完全不透明,1代表完全透明。ambientIntensity定义了在不考虑光源的情况下,漫反射颜色的最小百分比。shininess控制镜面高光的锐度。0产生柔和的光亮,而1则产生鲜明的高光。isSmooth给出了法线插值的提示。如果这个布尔标志被设置为 "true",顶点法线应该被用于着色(Gouraud着色)。否则,法线在面补丁是不变的(平面着色)。

目标表面是由目标元素指定的。每个元素包含一个目标面几何对象的URI(类型为gml: AbstractSurfaceTypegml: MultiSurface)。

X3DMaterialType, X3DMaterial

<xs:complexType name="X3DMaterialType">
<xs:complexContent>
<xs:extension base="AbstractSurfaceDataType">
<xs:sequence>
<xs:element name="ambientIntensity" type="core:doubleBetween0and1" default="0.2" minOccurs="0"/>
<xs:element name="diffuseColor" type="Color" default="0.8 0.8 0.8" minOccurs="0"/>
<xs:element name="emissiveColor" type="Color" default="0.0 0.0 0.0" minOccurs="0"/>
<xs:element name="specularColor" type="Color" default="1.0 1.0 1.0" minOccurs="0"/>
<xs:element name="shininess" type="core:doubleBetween0and1" default="0.2" minOccurs="0"/>
<xs:element name="transparency" type="core:doubleBetween0and1" default="0.0" minOccurs="0"/>
<xs:element name="isSmooth" type="xs:boolean" default="false" minOccurs="0"/>
<xs:element name="target" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="_GenericApplicationPropertyOfX3DMaterial" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="X3DMaterial" type="X3DMaterialType" substitutionGroup="_SurfaceData"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfX3DMaterial" type="xs:anyType" abstract="true"/>

9.4. 纹理和纹理映射

纹理的抽象基类是_Texture。CityGML中的纹理总是基于栅格的2D纹理。栅格图像由imageURI使用URI指定,可以是一个任意的图像数据资源,甚至是一个预先格式化的网络服务的请求。图像数据格式可以使用mimeType元素中的标准MIME类型来定义。

纹理可以由textureType属性来限定。textureType区分了特定对象的(特定)纹理和该对象表面的典型(典型)原型纹理。纹理也可以被分类为unknown

纹理包装的规范是采用COLLADA标准。当访问底层图像栅格外部的纹理时,需要进行纹理包装。 wrapMode可取以下五个值之一(图15说明了这些包装模式的效果)。

  1. none - 产生的颜色是完全透明的

  2. wrap - 纹理被重复

  3. mirror - 纹理被重复并镜像化

  4. clamp - 纹理被夹在其边缘上

  5. border - 产生的颜色由borderColor元素指定(RGBA)

在包装模式的mirror中,纹理图像在水平和垂直方向上都是重复的,类似于包装模式的wrap填补纹理空间。与wrap不同的是,每次重复的结果都是沿着重复的方向翻转前一个纹理部分。这种做法消除了包装纹理的边缘的约束,并形成一个无缝的纹理。

Fig15
图 15. 一个纹理(a)使用不同的包装模式应用于一个外墙。(b)无,(c)包装,(d)镜像,(e)管夹和(f)边界。边界颜色为红色。数字表示纹理坐标(图片:Hasso-Plattner-Institut)。

AbstractTextureType, __Texture, WrapModeType, TextureTypeType

<xs:complexType name="AbstractTextureType" abstract="true">
<xs:complexContent>
<xs:extension base="AbstractSurfaceDataType">
<xs:sequence>
<xs:element name="imageURI" type="xs:anyURI"/>
<xs:element name="mimeType" type="gml:CodeType" minOccurs="0"/>
<xs:element name="textureType" type="TextureTypeType" minOccurs="0"/>
<xs:element name="wrapMode" type="WrapModeType" minOccurs="0"/>
<xs:element name="borderColor" type="ColorPlusOpacity" minOccurs="0"/>
<xs:element ref="_GenericApplicationPropertyOfTexture" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="_Texture" type="AbstractTextureType" abstract="true" substitutionGroup="_SurfaceData"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfTexture" type="xs:anyType" abstract="true"/>
<!-- ========================================================================================= -->
<xs:simpleType name="WrapModeType">
<xs:restriction base="xs:string">
<xs:enumeration value="none"/>
<xs:enumeration value="wrap"/>
<xs:enumeration value="mirror"/>
<xs:enumeration value="clamp"/>
<xs:enumeration value="border"/>
</xs:restriction>
</xs:simpleType>
<!-- ========================================================================================= -->
<xs:simpleType name="TextureTypeType">
<xs:restriction base="xs:string">
<xs:enumeration value="specific"/>
<xs:enumeration value="typical"/>
<xs:enumeration value="unknown"/>
</xs:restriction>
</xs:simpleType>

根据纹理参数化,即从表面上的一个位置到纹理图像中的一个位置的映射函数,_Texture被进一步专门化。CityGML使用纹理空间的概念,纹理图像总是占据[0,1] 2 区域,而不考虑实际的图像大小或长宽比。图像的左下角位于原点(有些图形API可能使用其他约定,需要进行纹理坐标转换)。必须知道每个面几何对象的映射函数,才能接受纹理。

Fig16
图 16. 应用于地面和屋顶的地理参考纹理(来源:柏林参议院,Hasso-Plattner-Institut)。

GeoreferencedTexture类描述了一个使用平面投影的纹理。因此,使用GeoreferencedTexture对垂直表面设置纹理是没有意义的。这样的纹理具有独特的映射功能,通常与图像文件一起提供(如地理参考的TIFF)或作为单独的ESRI世界文件。外部地理参考的搜索顺序是由布尔标志preferWorldFile决定的。如果这个标志被设置为 "true"(其默认值),首先会寻找世界文件,只有在没有找到的情况下才会使用图像数据的地理参考。如果preferWorldFile为“false”,那么只有在没有图像数据的地理参考的情况下才会使用世界文件。

另外,CityGML允许内部指定一个类似于世界文件的地理参考。这个内部地理参考规范总是优先于任何外部地理参考。 referencePoint定义了世界空间中左上角图像像素的中心位置,对应于ESRI世界文件中的值5和6。由于GeoreferencedTexture使用的是平面投影,所以referencePoint是二维的。 orientation以2x2矩阵的形式定义了图像的旋转和缩放(4个双精度数字的列表,以行为主的顺序,对应于ESRI世界文件中的值1、3、2和4)。这种转换的CRS与referencePoint的CRS相同。该CRS中的一个平面点(x,y)T通过以下公式被转换为纹理空间中的一个点(s,t)T

\(\left(\begin{array}{l} s \\ t \end{array}\right)=\left(\begin{array}{cc} 1 / w & 0 \\ 0 & -1 / h \end{array}\right) \cdot M^{-1} \cdot\left(\left(\begin{array}{l} x \\ y \end{array}\right)-P_{R}\right)+\left(\begin{array}{l} 0 \\ 1 \end{array}\right)\)

M表示orientationPR表示referencePointw表示图像的宽度(像素),h表示图像的高度(像素)。这种变换补偿了ESRI世界文件中使用的图像坐标系统(原点在左上角,X轴向右,Y轴向下)和CityGML中的纹理空间(原点在左下角,X轴向右,Y轴向上)之间的差异。

如果既没有给出内部地理参考,也没有给出外部地理参考,那么GeoreferencedTexture是无效的。每个目标表面几何对象是由一个target元素中的URI指定的。所有目标表面几何对象都共享地理参考所定义的映射功能。不允许有其他映射功能。请注意,从gml: AbstractFeatureType 继承的gml: boundedBy属性可以被设置为有效图像数据的边界框,以进行空间查询。图16显示了应用于地面和所有屋顶表面的地理参考纹理。

GeoreferencedTextureType, GeoreferencedTexture

<xs:complexType name="GeoreferencedTextureType">
<xs:complexContent>
<xs:extension base="AbstractTextureType">
<xs:sequence>
<xs:element name="preferWorldFile" type="xs:boolean" default="true" minOccurs="0"/>
<xs:element name="referencePoint" type="gml:PointPropertyType" minOccurs="0"/>
<xs:element name="orientation" type="core:TransformationMatrix2x2Type" minOccurs="0"/>
<xs:element name="target" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="_GenericApplicationPropertyOfGeoreferencedTexture" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="GeoreferencedTexture" type="GeoreferencedTextureType" substitutionGroup="_Texture"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfGeoreferencedTexture" type="xs:anyType" abstract="true"/>

ParameterizedTexture类描述了一个具有目标依赖映射功能的纹理。映射是由_TextureParameterization类的子类定义的,作为链接到目标面几何对象的一个属性。每个目标面几何对象都在一个单独的target元素的uri属性中被指定为URI。因为target实现了gml: AssociationAttributeGroup,它允许引用一个远程的_TextureParameterization对象(使用xlink:href属性),比如用于在不同主题的目标或纹理之间共享一个映射功能。映射函数既可以使用纹理坐标的概念(通过TexCoordList类),也可以使用从世界空间到纹理空间的变换矩阵(通过TexCoordGen类)。

Fig17
图 17. 使用纹理坐标对纹理进行定位(图片:IGG Uni Bonn)。

纹理坐标只适用于多边形表面,其边界由gml: LinearRing描述(例如,gml:Trianglegml:Polygon,或由gml:Polygons组成的gml:MultiSurface)。它们定义了表面顶点与纹理空间中的点的明确映射,即每个顶点包括内环顶点都必须在纹理空间中得到一个相应的坐标对(关于坐标的概念,参考ISO 19111)。这些坐标不限于[0,1]区间。内部面点的纹理坐标是由顶点的纹理坐标平面插值而来。图16显示了一个例子。

目标表面几何对象的纹理坐标是使用TexCoordList作为target属性中的纹理参数化对象来指定的。每个外部和内部的gml:LinearRing构成了目标表面几何对象的边界(它也可能是一个gml: CompositeSurfacegml:MultiSurface,或gml:TriangulatedSurface)需要的纹理坐标集。使用TexCoordListtextureCoordinates元素来指定一组纹理坐标。因此,TexCoordList包含的textureCoordinate元素数量与目标面几何对象包含的gml: LinearRings一样多。textureCoordinate的强制性属性ring提供了各自环的gml:id。内容是一个有序的双值列表,每两个值定义一个纹理坐标对(s,t)Ts表示水平纹理轴,t表示垂直纹理轴。列表中每个环点包含一个坐标对,坐标对的顺序与CityGML文件中环点的顺序相对应(不考虑可能翻转的面方向)。如果目标表面几何对象的存在环点没有被分配纹理坐标,映射就不完整,相应的表面就不能被纹理化。如果是聚合的目标几何对象,映射的完整性只决定于叶几何对象。

Fig18
图 18. 使用worldToTexture变换将一张照片(a)投射到多个外墙(b)。照片并没有完全覆盖左边的外墙。因此,纹理似乎被剪切了。纹理包装被设置为 "none"(来源:柏林参议院,Hasso-PlattnerInstitute)。

另外,映射函数可以包括一个由TexCoordGen类指定的3x4转换矩阵。由worldToTexture元素指定的转换矩阵,定义了从齐次坐标的空间位置到纹理空间的线性转换。齐次坐标的使用有利于透视投影的转换,例如将一张照片投影到一个城市模型中(参见图18)。纹理坐标(s,t)T从空间位置(x,y,z)T计算为(s,t)T=(s’/q’,t’/q’)T与(s’,t’,q’)T=M(x,y,z,1)TM表示3x4变换矩阵。与一般的4x4变换相比,产生的Z分量被忽略了。因此,相应的矩阵行被省略了。此外,worldToTexture元素使用gml:SRSReferenceGroup属性来定义其CRS。世界空间中的位置必须首先转换为这个CRS,然后才能应用变换矩阵。

下面的结构会产生一个worldToTexture变换,通过将世界空间(城市模型)中的一个位置投影到纹理空间中的一个位置,来模仿拍摄照片的过程。

\(M=\underbrace{\left(\begin{array}{ccc} 0.5 & 0 & 0.5 \\ 0 & 0.5 & 0.5 \\ 0 & 0 & 1 \end{array}\right)}_{\text {Adjustment to texture space }} \cdot \underbrace{\left(\begin{array}{cccc} 2 f / w & 0 & 0 & 0 \\ 0 & 2 f / h & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right)}_{\text {Perspective projection }} \cdot \underbrace{\left(\begin{array}{cccc} r_{x} & r_{y} & r_{z} & 0 \\ u_{x} & u_{y} & u_{z} & 0 \\ d_{x} & d_{y} & d_{z} & 0 \\ 0 & 0 & 0 & 1 \end{array}\right)}_{\text {Camera orientation }} \cdot \underbrace{\left(\begin{array}{cccc} 1 & 0 & 0 & -P_{x} \\ 0 & 1 & 0 & -P_{y} \\ 0 & 0 & 1 & -P_{z} \\ 0 & 0 & 0 & 1 \end{array}\right)}_{\text {Camera location }}\)

在这个公式中,f表示焦距;wh表示图像传感器的物理尺寸;\(\vec{r}\)、\(\vec{u}\)和\(\vec{d}\)定义了相机的参照系,即用世界坐标表示的右、上和方向单位向量;P代表相机在世界空间的位置。图19描述了这种设置。

Fig19
图 19. 投影式纹理映射。从投影中心P发出的射线R上的所有点都被映射到纹理空间中的同一个点T上(图片:Hasso-Plattner-Institute, IGG TU Berlin)。

另外,如果3x4相机矩阵MP是已知的(例如通过校准和注册过程),它可以很容易地被用于worldToTextureMP是由内在和外在的相机参数定义的 (内部和外部方向),并将世界空间中的一个位置转换为图像中的一个像素位置。假设图像左上角的像素坐标为(0,0),那么到纹理空间坐标的完整转换可以写成(widthimageheightimage表示图像尺寸的像素):

\(M=\left(\begin{array}{ccc} 1 / \text { width }_{\text {image }} & 0 & 0 \\ 0 & -1 / \text { height }_{\text {image }} & 0 \\ 0 & 0 & 1 \end{array}\right) \cdot M_{P}\)

请注意,worldToTexture不能补偿由真实相机镜头引入的径向或其他非线性失真。 worldToTexture的另一个用途是为一个具有复杂几何形状的外墙贴图,而不需要为每个gml:LinearRing指定贴图坐标。相反,只有使用TexCoordGen作为参数化,外墙的聚合面成为纹理目标。然后,worldToTexture有效地编码了世界空间到纹理空间的正射投影。对于垂直外墙的特殊情况,转换公式如下:

\(M=\underbrace{\left(\begin{array}{cccc} 1 / \text { width }_{f} & 0 & 0 & 0 \\ 0 & 1 / \text { height }_{f} & 0 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right)}_{\text {Scaling to texture space }} \cdot \underbrace{\left(\begin{array}{cccc} -n_{y} & n_{x} & 0 & 0 \\ 0 & 0 & 1 & 0 \\ n_{x} & n_{y} & 0 & 0 \end{array}\right)}_{\text {Facade orientation }} \cdot \underbrace{\left(\begin{array}{cccc} 1 & 0 & 0 & -F_{x} \\ 0 & 1 & 0 & -F_{y} \\ 0 & 0 & 1 & -F_{z} \\ 0 & 0 & 0 & 1 \end{array}\right)}_{\text {Facade location }}\)

这个方程假设表示外墙\(\vec{n}\)的整体法向量(归一化,指向外侧,与地面平行),F表示外墙的左下角,widthfheightf指定外墙的世界单位尺寸。对于任意法向量,外墙方向矩阵的形式与摄像机方向矩阵相似。

\(M=\left(\begin{array}{cccc} 1 / \text { width }_{f} & 0 & 0 & 0 \\ 0 & 1 / \text { height }_{f} & 0 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) \cdot\left(\begin{array}{cccc} r_{x} & r_{y} & r_{z} & 0 \\ u_{x} & u_{y} & u_{z} & 0 \\ n_{x} & n_{y} & n_{z} & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) \cdot\left(\begin{array}{cccc} 1 & 0 & 0 & -F_{x} \\ 0 & 1 & 0 & -F_{y} \\ 0 & 0 & 1 & -F_{z} \\ 0 & 0 & 0 & 1 \end{array}\right) \text { with }\left\{\begin{array}{l} \vec{r}=\frac{(0,0,1)^{T} \times \vec{n}}{\left\|(0,0,1)^{T} \times \vec{n}\right\|} \\ \vec{u}=\vec{n} \times \vec{r} \end{array}\right.\)

ParameterizedTextureType, ParameterizedTexture, TextureAssociationType

<xs:complexType name="ParameterizedTextureType">
<xs:complexContent>
<xs:extension base="AbstractTextureType">
<xs:sequence>
<xs:element name="target" type="TextureAssociationType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="_GenericApplicationPropertyOfParameterizedTexture" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="ParameterizedTexture" type="ParameterizedTextureType" substitutionGroup="_Texture"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfParameterizedTexture" type="xs:anyType" abstract="true"/>
<!-- ========================================================================================= -->
<xs:complexType name="TextureAssociationType">
<xs:sequence minOccurs="0">
<xs:element ref="_TextureParameterization"/>
</xs:sequence>
<xs:attribute name="uri" type="xs:anyURI" use="required"/>
<xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>

AbstractTextureParameterizationType, TexCoordListType, TexCoordGenType

<xs:complexType name="AbstractTextureParameterizationType" abstract="true">
<xs:complexContent>
<xs:extension base="gml:AbstractGMLType">
<xs:sequence>
<xs:element ref="_GenericApplicationPropertyOfTextureParameterization" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="_TextureParameterization" type="AbstractTextureParameterizationType" abstract="true"
substitutionGroup="gml:_GML"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfTextureParameterization" type="xs:anyType" abstract="true"/>
<!-- ========================================================================================= -->
<xs:complexType name="TexCoordListType">
<xs:complexContent>
<xs:extension base="AbstractTextureParameterizationType">
<xs:sequence>
<xs:element name="textureCoordinates" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="gml:doubleList">
<xs:attribute name="ring" type="xs:anyURI" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element ref="_GenericApplicationPropertyOfTexCoordList" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="TexCoordList" type="TexCoordListType" substitutionGroup="_TextureParameterization"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfTexCoordList" type="xs:anyType" abstract="true"/>
<!-- ========================================================================================= -->
<xs:complexType name="TexCoordGenType">
<xs:complexContent>
<xs:extension base="AbstractTextureParameterizationType">
<xs:sequence>
<xs:element name="worldToTexture">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="core:TransformationMatrix3x4Type">
<xs:attributeGroup ref="gml:SRSReferenceGroup"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element ref="_GenericApplicationPropertyOfTexCoordGen" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="TexCoordGen" type="TexCoordGenType" substitutionGroup="_TextureParameterization"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfTexCoordGen" type="xs:anyType" abstract="true"/>

9.5. 相关概念

外观的概念与通用覆盖方法有关(参见ISO 19123和OGC摘要规范,主题6)。表面数据可以被描述为具有特定的映射函数的二维域在面上的离散或连续覆盖。需要通过适当的映射函数和专业化的有效域和范围集扩展GML的覆盖范围(截至3.1版)。出于实施和使用上的简单性和易理解性的考虑,CityGML没有采用这种方法,而是基于纹理和材质描述计算机图形领域中的面属性(参见X3D、COLLADA规范、Foley等)。纹理和材质使用适当的映射将数据存储为颜色。如果这样的映射不切实际,可以用ADE来定制数据存储。在CityGML 2.0.0版本之后,将考虑对外观建模的覆盖范围进行审查。

外观也与描绘有关。描绘表达了数字模型图像的构成和符号化,即表现形式;而外观则编码了对真实物体表面的观测,即数据。即使是基于纹理和材质等图形术语,面数据也不只作为描绘的输入,同样也可以作为要素面分析的输入或输出。因此,CityGML并没有为描绘的目的定义主题的组合。描绘是留给查看器应用程序或样式规范语言,如OGC图层样式注记(SLD)或OGC符号学编码(SE)。

9.6. 代码列表

特征_TexturemimeType属性被指定为gml:CodeType。这个属性的值可以在一个代码列表中列举出来。代码表的建议可以在附件C.6中找到。

9.7. 一致性要求

基本要求

  1. 一个面几何对象在每个主题下最多可以成为两个纹理和两个材料(分别用于正面和背面)的目标。

  2. GeoreferencedTexture元素的referencePoint属性(类型:gml:PointPropertyType)只能包含或引用一个具有2D坐标值的点几何对象。

  3. TexCoordList元素的textureCoordinates属性定义了表面的边界点到纹理空间中的明确映射。表面的每个边界点都必须在纹理空间中有一个相应的坐标对。纹理空间中的坐标对应以每个边界点的两个双精度数字形式给出。坐标对的顺序必须遵循CityGML文件中边界点的顺序(不管表面方向是否可能翻转)。每个组成目标表面几何对象边界的gml:LinearRing需要它自己的纹理坐标集。

  4. 一个GeoreferencedTexture元素必须提供内部或外部的地理参考,否则它是无效的。内部地理参考应通过GeoreferencedTexture元素的referencePoint属性(类型:gml:PointPropertyType)和orientation属性(类型:core:TransformationMatrix2x2Type)来声明。外部地理参考可以由纹理图像文件本身(例如GeoTIFF)或随附的世界文件提供。

参考完整性

  1. appearanceMember元素(类型:AppearancePropertyType)可以包含一个内联的Appearance元素,或者使用GML 3.1.1的XLink概念引用一个远程Appearance元素。在后一种情况下,appearanceMember元素的xlink:href属性只能指向一个远程Appearance元素(其中远程Appearance元素位于另一个文档或同一文档的其他地方)。必须给出所包含的元素或引用,但既不能同时包含元素或引用,也不能完全不包含元素或引用。

  2. core:_CityObject元素的appearance属性(类型:AppearancePropertyType)可以包含一个内联的Appearance元素,或者使用GML3.1.1的XLink概念引用一个远程外观元素。在后一种情况下,外观属性的xlink:href属性只能指向一个远程的appearance元素(其中远程的Appearance元素位于另一个文档中或同一文档的其他地方)。所包含的元素或引用必须给出,但既不能同时包含元素或引用,也不能完全不包含元素或引用。

  3. Appearance元素的surfaceDataMember属性(类型:SurfaceDataPropertyType)可以包含一个内联的_SurfaceData元素,或者使用GML3.1.1的XLink概念引用一个远程的_SurfaceData元素。在后一种情况下,表面数据成员的xlink:href属性只能指向一个远程的_SurfaceData元素(其中远程的_SurfaceData元素位于另一个文档中或同一文档的其他地方)。无论是包含的元素还是引用都必须给出,但既不能同时包含元素或引用,也不能完全不包含元素或引用。

  4. ParameterizedTexture元素的target属性(类型:TextureAssociationType)可以包含一个内联的_TextureParameterization 元素,或者使用GML 3.1.1的XLink概念引用一个对远程_TextureParameterization元素。在后一种情况下,target属性的xlink:href属性只能指向一个远程_TextureParameterization元素(其中远程_TextureParameterization元素位于另一个文档中或同一文档的其他地方)。必须给出所包含的元素或引用,但既不能同时包含元素或引用,也不能完全不包含元素或引用。

  5. GeoreferencedTexture元素的target属性(类型为xs:anyURI)应指定目标面几何对象的gml:id,它只能是gml:AbstractSurfaceTypegml:MultiSurface类型。

  6. 复合类型TextureAssociationTypeuri属性应指定目标表面几何对象的gml:id,它只能是gml:AbstractSurfaceTypegml:MultiSurface类型。

  7. TexCoordList元素的textureCoordinates属性的ring属性应指定目标表面几何对象的gml:id,它只能是gml:LinearRing类型。

  8. X3DMaterial元素的target属性(类型为xs:anyURI)应指定目标表面几何对象的gml:id,它只能是gml:AbstractSurfaceTypegml:MultiSurface类型。

9.8. CityGML先前版本的材质模型[已弃用]

由于GML3没有内置的表面材质表示概念,CityGML以前的版本通过TexturedSurface类来扩展GML3的几何模型,它允许为三维面分配外观属性(颜色、亮度、透明度)和纹理。外观属性的定义是从X3D规范中采用的。由于固有的局限性,这种外观建模的方法已经被弃用了。然而,为了给现有的CityGML实现一定的向后兼容性,该方法已被纳入CityGML 1.0版本和2.0版本,成为一个单独的扩展模块TexturedSurface。通过这种方式,可以采用旧的材质模型支持这个模块。请注意,根据TexturedSurface模块建模的外观信息可以在没有信息损失的情况下转换为CityGML的Appearance模块概念,本章前面的条款已经介绍过。因此,强烈不建议使用TexturedSurface模块,应该坚持使用Appearance模块。此外,TexturedSurface模块预计将在CityGML的未来版本中被移除。

对于TexturedSurface模块,每个表面或复合面都可以被专门化为一个TexturedSurface,它可以被赋予Materials颜色亮度透明度)或SimpleTextures。图20描述了UML图,关于XML模式的定义见附件A.14。

Fig20
图 20. CityGML的材质模型的UML图。请注意,这种外观建模的方法已经被弃用,预计将在未来的CityGML版本中被删除。前缀用于指示与模型元素相关的 XML 命名空间。没有前缀的元素名称是在CityGML 的TexturedSurface模块中定义的。

在面上定位纹理的概念符合三维计算机图形标准X3D(web 3D 2004),是VRML97的后继者。CityGML在GML3的几何模型中加入了TexturedSurface类,因为在ISO 19107和GML3中没有合适的纹理概念。

纹理被指定为由URI(统一资源标识符)引用的栅格图像,可以是一个任意的资源,包括在互联网上。纹理是通过采用texture coordinates的概念来定位的,即每个纹理坐标与TexturedSurface的一个三维坐标完全匹配(图17)。纹理坐标的使用允许在面几何形状上准确定位和调整纹理。

一个表面的颜色是由RGB值定义的。他们必须在0到1之间取值。frontOpacitybackOpacity分别定义每个面的transparency程度。它们的值也必须在0到1的范围内,其中1表示完全不透明,0表示完全透明。颜色可以区分为diffuseColor漫射色(被光源照射时的颜色)、emissiveColor自发光色(材质自身的颜色)和specularColor/shininess镜面色/亮度(表面的亮度)。

纹理可以由textureType属性来限定。textureType区分了特定对象的纹理(specific)和典型对象的纹理(typical)。纹理也可以被分类为unknown

_Appearance是从gml:AbstractGMLType派生出来的,可以在一个appearance属性中被引用。属性gml:id是继承的,它的值可以被一个XLink引用。_Appearance 是材质MaterialSimpleTexture的父类。

Xml命名空间

CityGML TexturedSurface模块的XML命名空间是由统一资源标识符(URI) http://www.opengis.net/citygml/texturedsurface/2.0 定义。在TexturedSurface模块的XML 模式定义中,这个URI也被用来标识默认命名空间。

9.8.1. 纹理表面

TexturedSurfaceType, TexturedSurface, AppearancePropertyType

<xs:complexType name="TexturedSurfaceType">
<xs:complexContent>
<xs:extension base="gml:OrientableSurfaceType">
<xs:sequence>
<xs:element ref="appearance" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="TexturedSurface" type="TexturedSurfaceType" substitutionGroup="gml:OrientableSurface"/>
<!-- ========================================================================================= -->
<xs:element name="appearance" type="AppearancePropertyType"/>
<!-- ========================================================================================= -->
<xs:complexType name="AppearancePropertyType">
<xs:sequence minOccurs="0">
<xs:element ref="_Appearance"/>
</xs:sequence>
<xs:attribute name="orientation" type="gml:SignType" default="+"/>
<xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>

TexturedSurface可以有一个或多个外观属性,它可以是一个材质Material(颜色,…​)或一个SimpleTexture_Appearance元素既可以作为这种类型的元素内联表示,也可以通过XLink引用一个远程的_Appearance元素。必须给出引用或包含的元素,但既不能同时包含元素或引用,也不能完全不包含元素或引用。_Appearance所指的面是由外观属性元素的orientation属性(类型gml:SignType)给出的,它对应orientation属性。+表示正方向的一面,-表示负方向的一面。

AbstractAppearanceType,__Appearance

<xs:complexType name="AbstractAppearanceType" abstract="true">
<xs:complexContent>
<xs:extension base="gml:AbstractGMLType"/>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="_Appearance" type="AbstractAppearanceType" abstract="true" substitutionGroup="gml:_GML"/>

MaterialType, Material

<xs:complexType name="MaterialType">
<xs:complexContent>
<xs:extension base="AbstractAppearanceType">
<xs:sequence>
<xs:element name="shininess" type="core:doubleBetween0and1" minOccurs="0"/>
<xs:element name="transparency" type="core:doubleBetween0and1" minOccurs="0"/>
<xs:element name="ambientIntensity" type="core:doubleBetween0and1" minOccurs="0"/>
<xs:element name="specularColor" type="Color" minOccurs="0"/>
<xs:element name="diffuseColor" type="Color" minOccurs="0"/>
<xs:element name="emissiveColor" type="Color" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="Material" type="MaterialType" substitutionGroup="_Appearance"/>

SimpleTextureType, SimpleTexture, TextureTypeType

<xs:complexType name="SimpleTextureType">
<xs:complexContent>
<xs:extension base="AbstractAppearanceType">
<xs:sequence>
<xs:element name="textureMap" type="xs:anyURI"/>
<xs:element name="textureCoordinates" type="gml:doubleList"/>
<xs:element name="textureType" type="TextureTypeType" minOccurs="0"/>
<xs:element name="repeat" type="xs:boolean" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- ========================================================================================= -->
<xs:element name="SimpleTexture" type="SimpleTextureType" substitutionGroup="_Appearance"/>
<!-- ========================================================================================= -->
<xs:simpleType name="TextureTypeType">
<xs:restriction base="xs:string">
<xs:enumeration value="specific"/>
<xs:enumeration value="typical"/>
<xs:enumeration value="unknown"/>
</xs:restriction>
</xs:simpleType>

9.8.2. 一致性要求

参照完整性

  • TexturedSurface元素的appearance属性(类型:AppearancePropertyType)可能包含一个内联的_Appearance元素,或者一个使用GML 3.1.1的XLink概念的远程_Appearance元素。在后一种情况下,外观属性的xlink:href属性只能指向一个远程的_Appearance元素(其中远程的_Appearance元素位于另一个文档中或同一文档的其他地方)。必须给出所包含的元素或引用,但既不能同时包含元素或引用,也不能完全不包含元素或引用。

10. 主题模型

CityGML的主题模型,是由虚拟3D城市模型中最重要的对象类型定义而成。在许多不同的应用领域中,这些对象类型十分重要。大多数主题类(可传递地)都是由基本类 FeatureFeatureCollection 派生而来,这些基本概念在ISO 19109和GML3中定义,可用于表示单一空间对象和它们之间的聚合。特征包含空间属性和非空间属性,这些属性被映射到GML3的特征属性,并具有相应的数据类型。几何特性与第8章中描述的几何类互相关联。主题模型还包括不同类型的特征类之间的相互关系,如聚合,概括和关联。

显式建模的目的是在不同的应用程序之间实现高度的语义互操作性。通过指定主题概念及其语义以及它们到UML和GML3的映射,不同的应用程序可以依赖于一组定义良好的 feature types ,属性和数据类型。这些特征类型,属性和数据类型具有标准化的含义或解释。为了允许在CityGML中没有明确建模的对象和/或属性的交换,引入了 generic city objectsattributes 的概念以及CityGML的 ADE 机制(参见第10.12章和第10.13章)。

CityGML主题模型的每个字段都由一单独的个CityGML扩展模块进行解释。因此,扩展模块是通过分割整个CityGML主题数据模型而得到的。所有扩展模块都基于CityGML核心模块,并且依赖于CityGML核心模块。核心部分包括CityGML数据模型的基本概念和组件。实施者可以根据特定的信息需求或应用领域选择将CityGML扩展模块与核心部分结合起来。对于CityGML的2.0版本,定义了以下13个主题扩展模块: 外观,桥梁,建筑,城市家具,城市对象组,泛型,土地利用,地形,交通,隧道,植被,水体和纹理表面 [已弃用] 。CityGML模块之间的有效组合被称为CityGML专用文件。通过这种方式,CityGML专用文件可以允许对整个CityGML数据模型进行部分实现(参见第7章)。

CityGML数据模型所涵盖的主题领域将在本章的子章节中介绍。每个子章节都与特定的CityGML模块相关。

10.1. CityGML核心模块

CityGML Core 模块定义了整个CityGML数据模型的基本概念和组件。它形成了CityGML数据模型的基础数据结构,也包括了所有扩展模块的依赖关系。因此,核心模块必须由任何符合要求的系统来实现。首先,核心模块提供了抽象的基类,扩展模块中的主题类是从这些抽象基类(可传递地)派生的。除抽象类外,核心还包含非抽象的内容,例如可由多个扩展模块使用的基本数据类型和主题类。图21中的UML图说明了CityGML的核心模块,XML模式定义见下文和附录A.1。

Fig21
图 21. CityGML核心模块的UML图。属性名称括号中的数字,表示该属性的多重性:每个对象的属性其最小和最大出现次数。例如,名称在类功能中是可选的(0),或者可以出现多次(星号),城市对象可以出现最多一个 creationDate 。前缀用于指示与模型元素关联的XML名称空间。没有前缀的元素名在CityGML核心模块中定义)

CityGML数据模型中所有主题类的基类都是抽象类 _CityObject _CityObject提供了创建日期与终止日期,用于管理特征的历史记录,以及在其他数据集中对同一对象的外部引用。此外,还提供了两个定性属性 relativeToTerrainrelativeToWater ,用于指定特征相对于地形和水面的位置。其中的拓扑关系如图22所示。这两个属性都有助于简单而高效的查询,比如地下建筑物的数量(entirelyBelowTerrain),而不需要额外的数字地形模型或水体模型。

Fig22
图 22. CityGML对象相对于 a) 地形和 b) 水面的拓扑关系。

_CityObject 是GML类 _Feature 的一个子类,因此它从 _GML继承元数据属性(例如,关于继承关系,质量,准确性,本地CRS的信息)和名称属性。一个 _CityObject可以有多个名称,这些名称可以由一个 codeSpace 进行限定。该功能可以用于如下场景,区分正式名称和流行名称或不同语言的名称(参见GML objects的name属性,Cox等人,2004)。 _CityObject 的泛化属性 generalizesTo 可用于关联特征,这些特征以不同的细节层次表示同一真实世界对象,即特征及其泛化对应物。这种关系的方向是从特征到相应的广义特征。

主题类可能有基于关系,属性和几何的继承子类。 _CityObject 专用子类的特征可以聚合到单个 CityModel,这是一个具有可选元数据的特征集合。除非另有说明,通常,每个特性都有属性 class, function, 和usageclass 属性只能出现一次,而 usagefunction 属性可以使用多次。class 属性允许对 _CityObject主题类层次结构之外的要素进行分类。例如,建筑特征由主题子类表示建筑:建筑_首先是 _CityObject(该子类在CityGML的构建模块中定义,参见第10.3章)。进一步的分类,例如住宅或行政大楼,可以使用类的class属性进行建模建筑:建筑。属性函数通常表示对象的预期用途或用途,例如建筑物的酒店或购物中心,而属性用途通常定义其实际用途。attrib utesclass, functionusage 的可能值可以在代码列表中指定,建议按照GML 3.1.1的简单字典专用文件(参见第6.6章和第10.14章)将代码列表实现为简单字典。附录C提供了由SIG 3D提出和维护的代码列表,其中包含可行的属性值,用户可以扩展或重新定义这些属性值。

除了主题内容外,核心模块还提供了隐式几何的概念,作为GML3几何模型的增强。由于这一概念与CityGML的空间模型密切相关,因此已在第8.2章中介绍。

CityGML中主题模型的顶级类层次结构如图23所示。 _CityObject 的子类包括城市模型的不同主题字段,这些字段由单独的CityGML扩展模块覆盖:地形,建筑物,桥梁,隧道,土地使用对象,水体,植被,一般城市对象,城市家具对象,城市对象组和交通。为了指示定义 _CityObject 的相应子类的扩展模块,图23中的类名前面有前缀。每个前缀都与一个CityGML扩展模块相关联(参见第4.3章和第7章了解CityGML扩展模块和相应前缀的列表)。

Fig23
图 23. CityGML的顶级类层次结构。前缀用于指示与模型元素关联的XML名称空间。没有前缀的元素名称在CityGML核心模块中定义。

CityGML的泛型模块(参见第6.11和10.12章)中定义的类GenericCityObject _genericAttribute,允许对任何其他主题类未涵盖或在CityGML中未表示属性的3D对象进行建模和交换。例如,在将来,从核心模块的抽象类 _Site中派生的地块可能会由其他子类加以补充,如发掘,城墙或路堤。目前,为了表示和交换这些特性,应该使用类 GenericCityObject。但是,只有在任何其他CityGML模块未提供适当的主题类或属性的情况下,才能使用通用城市对象和属性的概念。

如果使用Generics 模块,则可以为每个 CityObject 分配任意数量的泛型属性,用来表示特征的附加属性。为此,Generics模块通过属性元素 _generictAttribute扩充抽象基类 _CityObject。使用CityGML的应用领域扩展机制将附加属性 _generictAttribute注入到 _CityObject中(参见第10.13章)。通过这种方式, _CityObject的每个主题子类都继承了这个属性,因此也就都可以包含泛型属性。因此,泛型模块对定义 _CityObject的主题子类中,所有CityGML扩展模块都有一定的影响。

关于特征曲面的外观信息可以由CityGML的外观模块提供的类 Appearance 来表示(参见第9章)。与核心的其他主题扩展不同的是,它不是从 CityObject 派生出来的,而是从GML类 _Feature 派生出来的。— _CityObject 要素和Apperance 要素可以使用 CityObjectMemberappearanceMember 以任意顺序包含在CityModel 要素集合中 (参见第9章和第10.1.1章)。此外,外观可以存储在 _CityObject 本身的内联中。为了使城市对象能够存储外观信息,外观模块使用CityGML的应用领域扩展机制,通过属性元素外观来扩充抽象基类 _CityObject(参见第10.13章)。因此,只有在支持Apperance 模块的情况下,Apperance 属性才能对_CityObject及其主题子类可用。所以,像通用模块一样,Apperance 模块对任何其他扩展模块都有直接影响。

为了完整性,图23中还示出了 TexturedSurface。该外观建模方法已经被弃用,并会在将来的CityGML版本中被删除。由于 TexturedSurface 所包含的信息可以无损地转换到Appearance 模块,因此强烈建议不要使用TexturedSurface

XML 命名空间

CityGML CityGML Core模块的XML命名空间由统一资源标识符(URI)标识http://www.opengis.net/citygml/relief/2.0. 在Relief模块的xmlschema定义中,这个URI还用于标识默认名称空间。

10.1.1. 基本元素

Abstract CityObjectType, _CityObject

<xs:complexType name="AbstractCityObjectType" abstract="true">
    <xs:complexContent>
        <xs:extension base="gml:AbstractFeatureType">
            <xs:sequence>
                <xs:element name="creationDate" type="xs:date" minOccurs="0"/>
                <xs:element name="terminationDate" type="xs:date" minOccurs="0"/>
                <xs:element name="externalReference" type="ExternalReferenceType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="generalizesTo" type="GeneralizationRelationType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="relativeToTerrain" type="RelativeToTerrainType" minOccurs="0"/>
                <xs:element name="relativeToWater" type="RelativeToWaterType" minOccurs="0"/>
                <xs:element ref="_GenericApplicationPropertyOfCityObject" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
<!--  ========================================================================================= -->
<xs:element name="_CityObject" type="AbstractCityObjectType" abstract="true" substitutionGroup="gml:_Feature"/>
<!--  ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfCityObject" type="xs:anyType" abstract="true"/>

CityModelType, CityModel

<xs:complexType name="CityModelType">
    <xs:complexContent>
        <xs:extension base="gml:AbstractFeatureCollectionType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfCityModel" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
<!--  ========================================================================================= -->
<xs:element name="CityModel" type="CityModelType" substitutionGroup="gml:_FeatureCollection"/>
<!--  ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfCityModel" type="xs:anyType" abstract="true"/>

_CityObjectMember

<xs:element name="cityObjectMember" type="gml:FeaturePropertyType" substitutionGroup="gml:featureMember"/>

AbstractSiteType, _Site

<xs:complexType name="AbstractSiteType" abstract="true">
    <xs:complexContent>
        <xs:extension base="AbstractCityObjectType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfSite" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
<!--  ==========================================================================================  
-->
<xs:element name="_Site" type="AbstractSiteType" abstract="true" substitutionGroup="_CityObject"/>
<!--  ==========================================================================================  
-->
<xs:element name="_GenericApplicationPropertyOfSite" type="xs:anyType" abstract="true"/>

抽象类 _site是建筑物,桥梁,隧道,设施等的父类。CityGML未来的扩展(如发掘,城墙或路堤)将被建模为 _site的子类。作为CityObject的子类, _Site 继承所有属性和关系,特别是id,名称,外部引用和泛化关系。

10.1.2. Generalisation relation, RelativeToTerrainType 和 RelativeToWaterType

GeneralizationRelationType

<xs:complexType name="GeneralizationRelationType">
    <xs:sequence minOccurs="0">
        <xs:element ref="_CityObject"/>
    </xs:sequence>
    <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>

RelativeToTerrainType, RelativeToWaterType

<xs:simpleType name="RelativeToTerrainType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="entirelyAboveTerrain"/>
        <xs:enumeration value="substantiallyAboveTerrain"/>
        <xs:enumeration value="substantiallyAboveAndBelowTerrain"/>
        <xs:enumeration value="substantiallyBelowTerrain"/>
        <xs:enumeration value="entirelyBelowTerrain"/>
    </xs:restriction>
</xs:simpleType><!-- ========================================================================================= -->
<xs:simpleType name="RelativeToWaterType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="entirelyAboveWaterSurface"/>
        <xs:enumeration value="substantiallyAboveWaterSurface"/>
        <xs:enumeration value="substantiallyAboveAndBelowWaterSurface"/>
        <xs:enumeration value="substantiallyBelowWaterSurface"/>
        <xs:enumeration value="entirelyBelowWaterSurface"/>
        <xs:enumeration value="temporarilyAboveAndBelowWaterSurface"/>
    </xs:restriction>
</xs:simpleType>

10.1.3. 外部引用

ExternalReference 定义了从 _CityObject 到另一个信息系统中相应对象的超链接,例如在ALKIS,ATKIS或OS MasterMap中。 引用由外部信息系统的名称(用URI表示)和外部对象的引用(用字符串或URI表示)组成。如果ExternalReference 中缺少informationSystem元素,则ExternalObjectReference 必须是URI。

ExternalReferenceType, ExternalObjectReferenceType

<xs:complexType name="ExternalReferenceType">
    <xs:sequence>
        <xs:element name="informationSystem" type="xs:anyURI" minOccurs="0"/>
        <xs:element name="externalObject" type="ExternalObjectReferenceType"/>
    </xs:sequence>
</xs:complexType><!-- ========================================================================================== -->
<xs:complexType name="ExternalObjectReferenceType">
    <xs:choice>
        <xs:element name="name" type="xs:string"/>
        <xs:element name="uri" type="xs:anyURI"/>
    </xs:choice>
</xs:complexType>

10.1.4. 地址信息

CityGML核心模块提供了在虚拟城市模型中表示真实世界要素地址信息的方法。由于并非每个真实世界的功能都被分配了地址,因此没有为基类 _CityObject定义相应的address属性,但如果需要,则可以在其子类中对地址进行声明。例如,建筑模型为其子类 _AbstractBuildingDoor声明address属性。两个类都引用核心模块的相应数据类型来表示地址信息(参见第10.3章)。

地址信息具有xalAddress属性和multiPoint(可选择)属性。例如,对于建筑要素,multiPoint特性允许指定与相应地址关联的建筑入口位置。点坐标可以是2D或3D。将地址建模为特征有一个优点,即GML3可以使用XLinks对特征进行引用。这意味着,地址可能被存储在外部文件中,或可被外部Web进行调用。CityGML文件中的地址属性元素不包含内联地址信息,只包含对相应外部特征的引用。

地址信息是使用oasis2003发布的xALaddress标准指定,该标准为各种国际地址提供了通用模式。因此,AddressxalAddress属性的子元素必须根据OASIS xAL模式进行构造。

AddressPropertyType, AddressType, Address

<xs:complexType name="AddressPropertyType">
    <xs:sequence minOccurs="0">
        <xs:element ref="Address"/>
    </xs:sequence>
    <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType><!-- ========================================================================================== -->
<xs:complexType name="AddressType">
    <xs:complexContent>
        <xs:extension base="gml:AbstractFeatureType">
            <xs:sequence>
                <xs:element name="xalAddress" type="xalAddressPropertyType"/>
                <xs:element name="multiPoint" type="gml:MultiPointPropertyType" minOccurs="0"/>
                <xs:element ref="_GenericApplicationPropertyOfAddress" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="Address" type="AddressType" substitutionGroup="gml:_Feature"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfAddress" type="xs:anyType" abstract="true"/>
<!-- ========================================================================================== -->
<xs:complexType name="xalAddressPropertyType">
    <xs:sequence>
        <xs:element ref="xAL:AddressDetails"/>
    </xs:sequence>
</xs:complexType>

以下两个CityGML数据集的摘录包含用xAL表示德语和英语地址的示例。根据CityGML Buildings模块(参见第10.3章),地址信息附加到建筑对象(bldg:Building)。通常,如果CityGML实例文档包含地址信息,则命名空间前缀 “xAL” 应在根元素中声明,并且必须引用urn:oasis:names:tc:ciq:xsdschema:xAL:2.0。附录G.1中提供了一个完整的CityGML数据集示例,其中包含带有地址元素的建筑物。

<bldg:Building><bldg:address>
        <core:Address>
            <core:xalAddress>                <!-- Bussardweg 7, 76356 Weingarten, Germany -->
                <xAL:AddressDetails>
                    <xAL:Country>
                        <xAL:CountryName>Germany</xAL:CountryName>
                        <xAL:Locality Type="City">
                            <xAL:LocalityName>Weingarten</xAL:LocalityName>
                            <xAL:Thoroughfare Type="Street">
                                <xAL:ThoroughfareNumber>7</xAL:ThoroughfareNumber>
                                <xAL:ThoroughfareName>Bussardweg</xAL:ThoroughfareName>
                            </xAL:Thoroughfare>
                            <xAL:PostalCode>
                                <xAL:PostalCodeNumber>76356</xAL:PostalCodeNumber>
                            </xAL:PostalCode>
                        </xAL:Locality>
                    </xAL:Country>
                </xAL:AddressDetails>
            </core:xalAddress>
        </core:Address>
    </bldg:address>
</bldg:Building>
<bldg:Building><bldg:address>
        <core:Address>
            <core:xalAddress>                <!-- 46 Brynmaer Road Battersea LONDON, SW11 4EW United Kingdom -->                <!-- source: http://xml.coverpages.org/xnal.html -->
                <xAL:AddressDetails>
                    <xAL:Country>
                        <xAL:CountryName>United Kingdom</xAL:CountryName>
                        <xAL:Locality Type="City">
                            <xAL:LocalityName>LONDON</xAL:LocalityName>
                            <xAL:DependentLocality Type="District">
                                <xAL:DependentLocalityName>Battersea</xAL:DependentLocalityName>
                                <xAL:Thoroughfare>
                                    <xAL:ThoroughfareNumber>46</xAL:ThoroughfareNumber>
                                    <xAL:ThoroughfareName>Brynmaer Road</xAL:ThoroughfareName>
                                </xAL:Thoroughfare>
                            </xAL:DependentLocality>
                            <xAL:PostalCode>
                                <xAL:PostalCodeNumber>SW11 4EW</xAL:PostalCodeNumber>
                            </xAL:PostalCode>
                        </xAL:Locality>
                    </xAL:Country>
                </xAL:AddressDetails>
            </core:xalAddress>
        </core:Address>
    </bldg:address>
</bldg:Building>

10.1.5. 代码列表

ImplicitGeometrymimeType属性指定为gml:CodeType. 此属性的值可以在代码列表中被枚举。这个代码列表的建议规范可以在附件C.6中找到。

10.1.6. 一致性要求

基础要求

  1. CityModel元素(类型:CityModelType,替换组:gml : FeatureCollection)只能包含 cityObjectMember元素(类型:gml:FeaturePropertyType), app:appearanceMember元素 (类型:app:AppearancePropertyType),和gml:featureMember元素(类型:gml:FeaturePropertyType)作为功能成员。

  2. ExternalObjectReference引入了两个元素name(类型:xs:string)和uri(类型:xs:anyURI)。外部引用可以由它们中的任何一个指定。但是,如果没有提供ExternalReferenceType类型的informationSystem属性元素(类型:xs:anyURI),则必须提供ExternalObjectReferenceuri元素。

  3. 为了表示某个特征的地址信息,该特征的相应主题类应定义AddressPropertyType类型的属性。因此,对于所有CityGML扩展模块,只有AddressPropertyType类型应用于提供地址信息的元素。

  4. 由于隐式几何的概念(参见第8.2章)是CityGML Core模块的一部分,因此为隐式几何引入的一致性要求(参见第8.3.3章)是核心一致性要求的一部分。

引用一致性

  1. _CityObjectMember元素(类型:gml:FeaturePropertyType)可能包含一个 _CityObject元素,该元素通常是派生子类的对象,如bldg:Building,使用GML 3.1.1中的XLink概念,对远程 _CityObject 的内联或XLink引用。在后一种情况下 _CityObjectMemberXLink:href 属性只能指向远程 _CityObject元素(其中远程 _CityObject元素位于另一个文档或同一文档中的其他位置)。必须给出包含的元素或引用,但不能同时给出或不给出。

  2. AddressPropertyType类型可以包含Address元素内联或使用gml3.1.1的远程Address元素XLink引用。在后一种情况下,AddressPropertyTypeXLink:href 属性,其对应元素只能指向远程地址元素(其中远程地址元素位于另一个文档或同一文档的其他位置)。必须给出包含的元素或引用,但不能同时给出或不给出。

10.2. 数字地形模型(DTM)

城市模型的一个重要部分是地形。CityGML的数字地形模型(DTM)由专题扩展模块Relief提供(参见第7章)。在CityGML中,地形由lod0-4中的类relief-feature表示(图24描绘了UML图,XML模式定义见附录A.9)。ReliefFeatureReliefComponent的一个或多个实体组成。其有效性可以限制在由可选有效范围多边形定义的特定区域。由于ReliefFeatureReliefComponent继承自 _CityObejct,因此相应的属性和关系也被继承下来。ReliefFeature可以与不同概念的地形表示进行关联。地形可以指定为规则光栅或栅格(RasterRelief),三角网(TINReflief),打断线(BreaklineRelief)或质点(MasspointRelief)。这四种类型由相应的GML3类实现:gml:RectifiedGridCoverage实现栅格图, gml:MultiCurve可实现打断线, gml:MultiPoint 实现质量点类型,gml:TriangulatedSurface / gml:Tin都可构成三角网数据。如果在gml:TriangulatedSurfaces中,显示表达了三角面,同时gml:Tin中 只表示三维点,这时其中三角剖分可通过标准方法重建(Delaunay三角剖分,参见Okabe et al.1992)。打断线由三维曲线表示。质点只是一组三维点。

Fig24
图 24. CityGML中数字地形模型的UML图。前缀用于指示与模型元素关联的XML名称空间。没有前缀的元素名称在CityGML Relief模块中定义。

在CityGML数据集中,四种地形类型可以以不同的方式组合在一起,产生了很高的灵活性。首先,每种类型可以用不同的细节级别来表示,反映出不同的精确度或分辨率。第二,可以通过多种类型的组合来描述地形的一部分,例如通过光栅和打断线,或者通过三角网和打断线。在这种情况下,打断线必须与三角形共享几何图形。第三,相邻区域可以用不同类型的地形模型来表示。为了便于这种组合,为每个地形对象提供了表示其有效性范围的空间属性(图25)。在大多数情况下,常规光栅数据集的有效范围与其边界框相对应。此有效范围由二维示意图多边形表示,该多边形可能有孔。例如,这一概念可以通过粗网格对地形进行建模,其中一些显著区域由详细的高精度TIN表示。两种类型之间的边界由相应地形对象的范围属性给出。

Fig25
图 25. 使用有效范围多边形在CityGML中嵌套DTM(图:IGG Uni Bonn)。

DTM的精度和分辨率不一定依赖于其他CityGML扩展模块(如建筑模型)的特性。因此,有可能将LOD较高的建筑模型集成到精度或分辨率较低的DTM中。

这种方法与TIC相互作用(参见第6.5章)。TIC可以像断线一样用于调整DTM以适应不同的特征,如建筑物,桥梁或城市家具,从而确保DTM的一致表示。如有必要,可能需要处理重新成角。也可以通过DTM和相应特征的自交集求出TIC。

ReliefFeatureReliefComponent都有一个lod属性,表示相应的细节级别。在大多数情况下,ReliefFeature的LOD与ReliefComponent的LOD匹配。但是,也允许指定具有高LOD的ReliefFeature,该ReliefFeatureReliefComponent组成,其中一些ReliefComponent的LOD可以低于聚合ReliefFeature的LOD。其思想是,例如,对于LOD3场景,在LOD2中使用规则栅格以及由LOD3中ReliefComponent定义的某些高精度区域就足够了。LOD2网格和LOD3组件可以使用有效范围多边形的概念进行集成。因此,尽管一些ReliefComponent将被分类为较低的LOD,但是通过将其LOD值设置为3之后,ReliefFeature也可以与其他LOD3模型一起使用。

XML 命名空间

CityGML Relief模块的XML命名空间由统一资源标识符(URI)标识http://www.opengis.net/citygml/relief/2.0. 在Relief模块的xmlschema定义中,这个URI还用于标识默认名称空间。

10.2.1. 地形起伏特征和地形起伏组件

ReliefFeatureType, ReliefFeature

<xs:complexType name="ReliefFeatureType">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="lod" type="core:integerBetween0and4"/>
                <xs:element name="reliefComponent" type="ReliefComponentPropertyType" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfReliefFeature" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="ReliefFeature" type="ReliefFeatureType" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfReliefFeature" type="xs:anyType" abstract="true"/>
<!-- ========================================================================================= -->
<xs:complexType name="ReliefComponentPropertyType">
    <xs:sequence minOccurs="0">
        <xs:element ref="_ReliefComponent"/>
    </xs:sequence>
    <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>

AbstractReliefComponentType, _ReliefComponent

<xs:complexType name="AbstractReliefComponentType" abstract="true">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="lod" type="core:integerBetween0and4"/>
                <xs:element name="extent" type="gml:PolygonPropertyType" minOccurs="0"/>
                <xs:element ref="_GenericApplicationPropertyOfReliefComponent" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="_ReliefComponent" type="AbstractReliefComponentType" abstract="true" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfReliefComponent" type="xs:anyType" abstract="true"/>

10.2.2. 不规则三角网格地形

TINReliefType, TINRelief

<xs:complexType name="TINReliefType">
    <xs:complexContent>
        <xs:extension base="AbstractReliefComponentType">
            <xs:sequence>
                <xs:element name="tin" type="tinPropertyType"/>
                <xs:element ref="_GenericApplicationPropertyOfTinRelief" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="TINRelief" type="TINReliefType" substitutionGroup="_ReliefComponent"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfTinRelief" type="xs:anyType" abstract="true"/>
<!-- ========================================================================================= -->
<xs:complexType name="tinPropertyType">
    <xs:sequence minOccurs="0">
        <xs:element ref="gml:TriangulatedSurface"/>
    </xs:sequence>
    <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType>

TINRelief的几何图形由GML几何图形类定义gml:TriangulatedSurface. 这部分可以显式地提供一组三角形(gml:TriangulatedSurface)或者通过使用子类(gml:Tin )指定控制点、中断线和停止线。在后一种情况下,处理包含gml:Tin 需要通过使用约束Delaunay三角剖分算法重建三角剖分曲面(参见Okabe et al.1992)。

10.2.3. 栅格地形

RasterReliefType, RasterRelief, Elevation

<xs:complexType name="RasterReliefType">
    <xs:complexContent>
        <xs:extension base="AbstractReliefComponentType">
            <xs:sequence>
                <xs:element name="grid" type="gridPropertyType"/>
                <xs:element ref="_GenericApplicationPropertyOfRasterRelief" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="RasterRelief" type="RasterReliefType" substitutionGroup="_ReliefComponent"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfRasterRelief" type="xs:anyType" abstract="true"/>
<!-- ========================================================================================= --><!-- ========================================================================================= -->
<xs:complexType name="gridPropertyType">
    <xs:sequence minOccurs="0">
        <xs:element ref="gml:RectifiedGridCoverage"/>
    </xs:sequence>
    <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="Elevation" type="gml:LengthType" substitutionGroup="gml:_Object"/>

10.2.4. 质量点地形

MassPointReliefType, MassPointRelief

<xs:complexType name="MassPointReliefType">
    <xs:complexContent>
        <xs:extension base="AbstractReliefComponentType">
            <xs:sequence>
                <xs:element name="reliefPoints" type="gml:MultiPointPropertyType"/>
                <xs:element ref="_GenericApplicationPropertyOfMassPointRelief" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="MassPointRelief" type="MassPointReliefType" substitutionGroup="_ReliefComponent"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfMassPointRelief" type="xs:anyType" abstract="true"/>

10.2.5. 折断线地形

BreaklineReliefType, BreaklineRelief

<xs:complexType name="BreaklineReliefType">
    <xs:complexContent>
        <xs:extension base="AbstractReliefComponentType">
            <xs:sequence>
                <xs:element name="ridgeOrValleyLines" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="breaklines" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element ref="_GenericApplicationPropertyOfBreaklineRelief" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="BreaklineRelief" type="BreaklineReliefType" substitutionGroup="_ReliefComponent"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfBreaklineRelief" type="xs:anyType" abstract="true"/>

BreaklineRelief的几何图形可以由折断线和山脊/山谷线组成。折断线表示地形坡度的突变,脊线/谷线表示地形坡度符号的变化。BreaklineRelief必须至少包含上述两种类型中的一种。

10.2.6. 一致性要求

基础要求

  1. gml:Polygon几何元素描述了使用 _ReliefComponent的范围属性(类型:__gml:PolygonPropertyType)的有效范围,该元素应作为2D 底边轮廓多边形进行表示,该多边形可能具有内孔。

引用一致性

  1. ReliefFeature元素的reliefComponent属性可以包含一个内嵌的 _ReliefComponent元素,或者直接使用GML 3.1.1的XLink概念,对远程 _ReliefComponent元素进行XLink引用。在后一种情况下 _reliefComponent属性中的XLink:href, 只能指向远程 _ReliefComponent元素(其中远程 _ReliefComponent元素位于另一个文档或同一文档中的其他位置)。另外,必须给出所包含的元素或引用,在这种条件下,只能选择同时给,或者同时不给。

  2. TINRelief元素的tin属性可以包含一个内嵌的gml:TriangulatedSurface元素,或者 直接使用GML 3.1.1的XLink概念,对远程gml:TriangulatedSurface 元素进行XLink引用。在后一种情况下TIN属性中的XLink:href 属性,只能指向远程gml:TriangulatedSurface元素(其中远程gml:TriangulatedSurface元素位于另一个文档或同一文档中的其他位置)。另外,必须给出所包含的元素或引用,在这种条件下,只能选择同时给,或者同时不给。

  3. RasterRelief元素的grid属性可以包含一个内嵌的gml:RectifiedGridCoverage 元素,或者直接使用GML 3.1.1的XLink概念,对远程gml:RectifiedGridCoverage元素进行XLink引用。在后一种情况下gml:RectifiedGridCoverage元素的XLink:href只能指向远程gml:RectifiedGridCoverage元素(其中远程gml:RectifiedGridCoverage元素位于另一个文档或同一文档中的其他位置)。另外,必须给出所包含的元素或引用,在这种条件下,只能选择同时给,或者同时不给。

10.3. 建筑模型

建筑模型是CityGML最详细的主题概念之一。它允许在五个细节等级(LOD0到LOD4)中表示建筑物和建筑部件的主题属性和空间几何。CityGML的建筑模型由主题扩展模块Building定义(参见第7章)。图26提供了LOD1–4等级的3D城市和建筑模型示例。

Fig26
图 26. LOD1(左上),LOD2(右上),LOD3(左下)和LOD4(右下)中的城市或建筑模型示例(来源:雷克林豪森区,m-g-h ingenieure+architekten GmbH)。

建筑模型的UML图如图27所示,XML模式定义见附录A.4和下文。该模型的关键类是 _AbstractBuilding,它是主题类 _Site(继承自 _CityObject)的子类. _AbstractBuilding是专门针对建筑或建筑部件的。 因为 _AbstractBuilding是由建筑部件组成的,而建筑部件又可以是 _AbstractBuildings,所以可以实现任意深度的聚合层次结构。作为父类 _CityObject的子类, _AbstractBuilding继承来自 _CityObject的所有属性,就像GML3标准功能属性一样(gml:name etc.)以及CityGML特有的属性,如外部引用(参见第6.7章)。 _AbstractBuilding未明确涵盖的其他属性可以通过CityGML 泛型模块进行建模(参见第10.12章)或使用CityGML应用领域扩展机制(参见。 第10.13章)。

建筑综合体由许多不同的建筑组成,如工厂或医院综合体,应使用CityObjectGroup的概念进行聚合(参见第6.8章)。例如,综合体的主建筑可以表示为 “main building”。

BuildingBuildingPart,都继承了 _AbstractBuilding的属性,如下:建筑物类别,功能(如住宅,公共或工业),用途,建造年份,拆除年份,屋顶类型,测量高度以及地上和地下楼层的数量和对应高度。这组参数适用于粗略重建建筑物的三维形状,可由地籍系统提供。此外,对BuildingBuildingPart也可以指定对应的Address特征。

Fig27
图 27. CityGML建筑模型的UML图。前缀用于指示与模型元素关联的XML名称空间。不带前缀的图元名称在CityGML Building模块中定义。

_AbstractBuilding的几何表示和语义结构如图27所示。模型从LOD0到LOD4依次细化。因此,并非建筑模型的所有部件在每个LOD中都具有等量的表示,并且并非每个LOD中都允许聚合。在CityGML中,所有对象类都与每个LOD的最小获取标准相关(参见第6.2章)。通过为相应的LOD提供不同的几何图形,可以在不同的LOD中表示相同的对象。

在LOD0中,建筑可以用水平的三维表面来表示。这些可以分别代表建筑物的底边轮廓和屋顶边缘。这样可以轻松地将二维数据集成到模型中。在许多国家,这些二维几何图形很容易存在,例如地籍或地形数据。地籍数据通常描述地面上建筑物的底边轮廓,地形数据通常是底边轮廓和屋顶层(屋顶边缘)几何图形的混合体,通常从区域/卫星图像中通过摄影测量提取或从机载激光数据中提取。建筑模型允许包含上述两者。在这种情况下,可以将大型悬挑屋顶建模为更详细的LOD2和LOD3描述的初步阶段。曲面几何体需要三维坐标,但要求属于同一曲面的所有顶点,其高度值相同。如果将二维几何体导入这两个LOD0几何体中的任何一个,则需要为所有顶点选择适当的高度值。建筑物底边轮廓通常位于建筑物地面的最低标高处,而屋顶边缘表示应放置在屋顶标高处(例如屋檐高度)。

在LOD1中,建筑模型由建筑外壳的几何体表示。也可以选择 gml:MultiCurveTIC进行表示(参见第6.5章)。此几何表示在LOD2中通过附加gml:MultiSurfacegml:MultiCurve,用于对屋顶悬挑,柱或天线等建筑细节进行建模。在LOD2和更高的LOD中,建筑物的外立面也可以通过 _BoundarySurfaceBuildingInstallation进行语义区分。 _BoundarySurface是建筑物外壳的一部分,具有墙(WallSurface),屋顶(RoofSurface),地面(GroundSurface),外部地面(OuterFloorSurface),外部天花板(Outer-CeilingSurface)或封闭面(ClosureSurface)等特殊功能。BuildingInstallation可用于建筑元素,如阳台,烟囱,老虎窗或外部楼梯,这些元素强烈影响建筑物的外观。一个BuildingInstallation可以具有属性classfunctionusage(参见图27)。

在LOD3中, _BoundarySurface对象(门和窗)中的洞口可以表示为主题对象。在LOD4中(分辨率最高),可以表达由多个房间组成的建筑内部,在建筑模型中由Room表示。这种可扩展性赋予了建筑物的虚拟信息承载性,例如博物馆中的游客信息(“基于位置的服务”),住宿标准的检查或建筑物日光照明的呈现。在该部分内容中,可通过使用CityGML提供的一般分组概念实现(参见第10.3.6章),基于用户定义的任意标准(例如,用于定义与某一楼层相对应的房间)对房间进行聚合。建筑物的内部装置,即建筑物内不能移动的物体(与家具不同),用IntBuildingInstallation表示。如果装置连接到特定房间(如散热器或灯具),则与房间类别相关,否则(如椽或管道)与建筑相关。一个Room可能具有属性classfunctionusage,其值可在代码列表中定义(第10.3.8章和附录C.1)。class的属性允许根据所述功能对房间进行分类,例如商务或私人房间,并且该属性只能出现一次。function的属性可用于表示房间的主要用途,例如客厅,厨房。如果对象的实际使用方式与函数不同,则可以使用 usage属性。这两个属性可以出现多次。

房间的可见表面在几何上可以表示为SolidMultiSurface。从语义上讲,曲面可以构造成特定的 _BoundarySurfaces,表示地板(FloorSurface),天花板(CeilingSurface)和内墙(InteriorWallSurface)。房间家具,如桌子和椅子,可以用BuildingFurniture表示。BuildingFurniture具有classfuntionusage__等属性。附录G.1至G.6提供了包含单个建筑模型的示例CityGML文件,该模型包含了从LOD0到LOD4模型,包括建筑内部。

XML 命名空间

CityGML Building 模块的XML命名空间由统一资源标识符(URI)标识http://www.opengis.net/citygml/building/2.0. 在building模块的xmlschema定义中,这个URI还用于标识默认名称空间。

10.3.1. 建筑和建筑部件

BuildingType, Building

<xs:complexType name="BuildingType">
    <xs:complexContent>
        <xs:extension base="AbstractBuildingType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfBuilding" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="Building" type="BuildingType" substitutionGroup="_AbstractBuilding"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfBuilding" type="xs:anyType" abstract="true"/>

Building _AbstractBuilding的两个子类之一。如果建筑物仅由一个(同质)部分组成,则应使用该类别。由不同结构段组成的建筑物,例如层数或屋顶类型不同的建筑物,必须被分割成一个具有一个或多个附加BuildingPartBuilding(见图28)。建筑中心部分的几何和非空间特性应在聚合Building特征中表示。

BuildingPartType, BuildingPart

<xs:complexType name="BuildingPartType">
    <xs:complexContent>
        <xs:extension base="AbstractBuildingType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfBuildingPart" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="BuildingPart" type="BuildingPartType" substitutionGroup="_AbstractBuilding"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfBuildingPart" type="xs:anyType" abstract="true"/>

BuildingPart派生自 _AbstractBuilding。它用于对建筑物的部件进行建模(见图28)。BuildingPart对象应仅与一栋建筑或建筑部件相关。

Fig28
图 28. 由一个建筑(右)和两个建筑部件(左)组成的建筑示例(来源:科堡市)。

AbstractBuildingType, _AbstractBuilding

<xs:complexType name="AbstractBuildingType" abstract="true">
    <xs:complexContent>
        <xs:extension base="core:AbstractSiteType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="yearOfConstruction" type="xs:gYear" minOccurs="0"/>
                <xs:element name="yearOfDemolition" type="xs:gYear" minOccurs="0"/>
                <xs:element name="roofType" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="measuredHeight" type="gml:LengthType" minOccurs="0"/>
                <xs:element name="storeysAboveGround" type="xs:nonNegativeInteger" minOccurs="0"/>
                <xs:element name="storeysBelowGround" type="xs:nonNegativeInteger" minOccurs="0"/>
                <xs:element name="storeyHeightsAboveGround" type="gml:MeasureOrNullListType" minOccurs="0"/>
                <xs:element name="storeyHeightsBelowGround" type="gml:MeasureOrNullListType" minOccurs="0"/>
                <xs:element name="lod0FootPrint" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod0RoofEdge" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod1Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod1MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod1TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod2Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod2MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod2MultiCurve" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod2TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="outerBuildingInstallation" type="BuildingInstallationPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="interiorBuildingInstallation" type="IntBuildingInstallationPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="boundedBy" type="BoundarySurfacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod3Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod3MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod3MultiCurve" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod3TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod4Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiCurve" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod4TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="interiorRoom" type="InteriorRoomPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="consistsOfBuildingPart" type="BuildingPartPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="address" type="core:AddressPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfAbstractBuilding" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="_AbstractBuilding" type="AbstractBuildingType" abstract="true" substitutionGroup="core:_Site"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfAbstractBuilding" type="xs:anyType" abstract="true"/>

抽象类 _AbstractBuilding包含建筑属性,其几何表示以及建筑或建筑部件在不同LOD中的几何/语义表示。这些属性描述如下:

a) 建筑物或建筑部件(class),不同的预期用途(function)和不同的实际用途(usage)的分类。这些属性的数值可以在代码列表中指定。

b) 建造或建筑部件的建造年份(yearOfConstruction)和拆除年份(yearOfDemolition)。这些属性可用于描述城市模型中建筑发展的年表。时间点指的是真实世界的时间。

c) 建筑或建筑部分的屋顶类型(roofType)。可以在代码列表中指定此属性数值。

d) 建筑物或建筑物部分的测量相对高度(measureHeight)。

e) 地平面上(storeyAboveGround)和下(storeyBelowGround)的层数。

f) 地平面以上(storeyHeightsAboveGround)和以下(storeyHeightsBelowGround)的层高列表。列表中的第一个值表示最近楼层的高度。最后一个值是最远的高度。

在图29和图30中通过展示相同建筑物在5个LoD层级中的对应物,可以清楚阐明跨越不同等级的细节层次,建筑模型在地理度量表示的复杂度和粒度,以及将模型的主题结构划分为具有特殊语义含义的组件方面是不同的。在 _AbstractBuilding里,有许多与某些LOD相关联的属性。

Fig29
图 29. 使用水平三维曲面在LOD0中有两种建模方式。左侧显示建筑示意图(lod0FootPrint)(青色),表示地面上建筑的形状。相应的曲面表示位于地面。右图显示了lod0RooTEgde表示(青色),该表示来自建筑物屋顶的水平投影,位于屋檐高度(来源:KIT,由Franz提供)
Fig30
图 30. LOD1–LOD4中的建筑模型(来源:KIT,由Franz Josef Kaiser提供)

这五种类型,显示了建筑模型的不同几何和语义主题与LOD的对应关系。在LOD1–4中,建筑物的体积可以用gml:Solid geometry和/或gml:MultiSurface geometry来表示。三维地形相交曲线(TIC)的定义,用于将不同来源的建筑物与数字地形模型相结合,也可以在LOD1–4中定义。TIC(可选)在建筑物或建筑物部分周围构建闭合环。 在LOD0中(参见图29),建筑物由底边轮廓线和顶部水平表面表示。 在LOD1(参见图30)中,建筑物的不同结构实体被聚合到一个简单的块中,在细节上没有区别。建筑内外部不做区分,只使用一个相应的特性(lod1Solidlod1MultiSurface)。

在LOD2和更高层次的细节中,建筑物的外部不仅在几何上表示为gml:Solid geometry 和/或gml:MultiSurface geometry,也可以由语义对象组成。在语义上构造建筑外部对象的基类, _BoundarySurface,该类型与gml:MultiSurface 有强联系(参见第10.3.2章)。 如果在建筑模型中既有利用体积/平面的建筑外部几何表示,又有通过 _BoundarySurfaces来进行语义定义的情况,则不能仅仅靠几何表示明确定义几何,必须引用 _BoundarySurface 中的gml:MultiSurface

几何/语义主题 属性类型 LOD0 LOD1 LOD2 LOD3 LOD4

建筑底面轮廓与屋顶边界

gml:MultiSurfaceType

·

建筑外壳体块部件

gml:SolidType

·

·

·

·

建筑外壳表皮部件

gml:MultiSurfaceType

·

·

·

·

地形相切曲线

_gml:MultiCurveType

·

·

·

·

建筑外壳曲线部件

gml:MultiCurveType

·

·

·

建筑部件

BuildingPartType

·

·

·

·

边界表面

AbstractBoundarySurfaceType

·

·

·

外部建筑装置

BuildingInstallationType

·

·

·

开口

AbstractOpeningType

·

·

房间

RoomType

·

内部建筑装置

IntBuildingInstallationType

·

除了BuildingPart外,建筑的较小部件(建构物/外部建筑装置)也会强烈影响建筑特征。这些特性由BuildingInstallation进行建模(参见第10.3.2章)。该类型中主要有,烟囱(参见。图30),老虎窗(见图28),阳台,外楼梯或天线。如果其范围超过第6.2章中规定的建议最小尺寸, 则BuildingInstallations仅可包括在LOD2模型中。对于BuildingInstallations的几何表示,可以使用图9所示GML子集中的任意几何对象。

_AbstractBuilding没有可以使用为LOD3的属性。除了对几何精度要求较高和最小尺寸较小外,LOD2和LOD3建筑的主要区别在于 _BoundarySurface(参见第10.3.3章)。在LOD3中,通过使用抽象类 _Opening和其派生子类WindowDoor,对建筑物中与窗或门相对应的开口(见图30)进行建模(参见第10.3.4章)。 对于建筑外部,LOD4数据模型与LOD3数据模型相同。但是LOD4提供了一种可能性,可以用IntBuildingInstallationRoom对建筑物的内部结构进行建模(参见第10.3.5章)。

可以使用address特性为每个BuildingBuildingPart特征指定地址(数量自选)。相应的AddressPropertyType定义可以在CityGML核心模块中查看(参见第10.1.4章)。

10.3.2. 外部建筑装置

BuildingInstallationType, BuildingInstallation

<xs:complexType name="BuildingInstallationType">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod2Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod3Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod4Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod2ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element name="lod3ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element name="lod4ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element name="boundedBy" type="BoundarySurfacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfBuildingInstallation" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="BuildingInstallation" type="BuildingInstallationType" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfBuildingInstallation" type="xs:anyType" abstract="true"/>

BuildingInstallation是建筑物的外部构件,它不具有建筑部件的意义,但对建筑物的外部特性有很大的影响。例如烟囱,楼梯,天线,阳台或楼梯和路径上方的附加屋顶。BuildingInstallation具有class, functionusage属性。属性类(只能出现一次)表示安装的一般分类。通过functionusage属性,可以描述建筑装置的名义功能和实际功能。对于上述三个属性,其数值可以在代码列表中指定。对于BuildingInstallation的几何表示,可以使用图9所示GML子集中的任意几何对象。或者,也可以将几何体作为ImplicitGeometry。根据ImplicitGeometry的概念,建筑装置的原型几何仅需要在局部坐标系中存储一次,在后续可以通过调取建筑装置的特征进行引用(见第8.2章)。建筑物装置的可见表面可使用边界表面的概念进行语义分类(参见10.3.3)。BuildingInstallation只可以与一个建筑或建筑部件相关。

10.3.3. 边界表面

AbstractBoundarySurfaceType, _BoundarySurface

<xs:complexType name="AbstractBoundarySurfaceType" abstract="true">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="lod2MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod3MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="opening" type="OpeningPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfBoundarySurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="_BoundarySurface" type="AbstractBoundarySurfaceType" abstract="true" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfBoundarySurface" type="xs:anyType" abstract="true"/>

_BoundarySurface是几个主题类的抽象基类,用于构造建筑物的外表皮以及房间的可见表面以及外部和内部建筑装置。它是 _CityObject的一个子类,因此继承了所有属性,如GML3标准特征属性(gml:name etc.)以及CityGML特有的属性,比如ExternalReferences。从 _BoundarySurface出发,衍生出了屋顶表面(RoofSurface), 墙面(WallSurface), 地面(GroundSurface), 外墙面 (OuterCeilingSurface), 外地板表面(OuterFloorSurface), 封闭表面(ClosureSurface),地板表面(FloorSurface), 内墙面(InteriorWallSurface)和 天花板表面(CeilingSurface)等专题类。建筑表面的专题分类在图31(建筑外表皮)和图32(内表面)进行了说明。

对于Lod2到Lod4之间,几何体的 _BoundarySurface可以由不同的gml:MultiSurface geometry定义。

在LOD3和LOD4中, _BoundarySurface可能包含门和窗的Openings类(参见第10.3.4章)。如果开口的几何位置在拓扑结构上位于gml:MultiSurface几何体的曲面组件内(例如 gml:Polygon),这些开口必须表示为该曲面内的孔。孔由相应曲面几何体对象内的内环表示。根据GML3,这些点必须以相反的顺序指定(当从曲面法向量的相反方向看时,外部边界为逆时针方向,内部边界为顺时针方向)。如果开口由Door, Window, 或ClosureSurface类型进行围合,则其外边界可由与周围表面的内环(表示孔)相同的点组成。Openings的边界表面属于相关的相邻边界表面。例如,如果门分隔开口,则门一侧属于InteriorWallSurface,另一侧属于WallSurface(图32右侧)。

Fig31
图 31. 建筑外壳的_BoundarySurfaces分类示例(来源:KIT)
Fig32
图 32. 边界表面分类(左),尤其是开口(右)(图:IGG Uni Bonn)。

GroundSurfaceType, GroundSurface

<xs:complexType name="GroundSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfGroundSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="GroundSurface" type="GroundSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfGroundSurface" type="xs:anyType" abstract="true"/>

通过GroundSurface,对建筑物或建筑部件的接地面进行建模。定义接地面的多边形与建筑物底面轮廓线一致。但是,接地板的表面法线向下。

OuterCeilingSurfaceType, OuterCeilingSurface

<xs:complexType name="OuterCeilingSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfOuterCeilingSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="OuterCeilingSurface" type="OuterCeilingSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfOuterCeilingSurface" type="xs:anyType" abstract="true"/>

属于建筑外表皮且方向朝下的大部分水平表面可建模为OuterCeilingSurface。例如凉廊天花板或通道天花板的可见部分。

WallSurfaceType, WallSurface

<xs:complexType name="WallSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfWallSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="WallSurface" type="WallSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfWallSurface" type="xs:anyType" abstract="true"/>

建筑外立面的所有部分(该建筑外立面属于建筑外表皮的一部分)都可以通过类WallSurface进行建模。

OuterFloorSurfaceType, OuterFloorSurface

<xs:complexType name="OuterFloorSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfOuterFloorSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="OuterFloorSurface" type="OuterFloorSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfOuterFloorSurface" type="xs:anyType" abstract="true"/>

属于建筑外表皮且方向朝上的大部分水平表面可以建模为OuterFloorSurface。例如凉廊的地板。

RoofSurfaceType, RoofSurface

<xs:complexType name="RoofSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfRoofSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="RoofSurface" type="RoofSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfRoofSurface" type="xs:anyType" abstract="true"/>

建筑物或建筑部件的主要屋顶部分可以用RoofSurface表示。具有特定语义的屋顶次要部分(如天窗或烟囱)应建模为BuildingInstallation

ClosureSurfaceType, ClosureSurface

<xs:complexType name="ClosureSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfClosureSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="ClosureSurface" type="ClosureSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfClosureSurface" type="xs:anyType" abstract="true"/>

建筑物中没有门或窗的开口可以使用ClosureSurface(虚拟表面)进行分隔(参见第6.4章)。因此,像谷仓或机库这样的开放式建筑,为了能够计算它们的体积,可以考虑为关闭状态。ClosureSurfaces也用于内部建筑模型。如果两个具有不同功能的房间(如厨房和客厅)直接相连,而没有单独的门,则应使用ClosureSurface来分隔或连接两个房间的体积。

FloorSurfaceType, FloorSurface

<xs:complexType name="FloorSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfFloorSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="FloorSurface" type="FloorSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfFloorSurface" type="xs:anyType" abstract="true"/>

FloorSurface只能在LOD4内部建筑模型中,用于对房间地板进行建模。

InteriorWallSurfaceType, InteriorWallSurface

<xs:complexType name="InteriorWallSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfInteriorWallSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="InteriorWallSurface" type="InteriorWallSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfInteriorWallSurface" type="xs:anyType" abstract="true"/>

InteriorWallSurface只能在LOD4内部建筑模型中使用,可对房间墙的可见表面进行建模。

CeilingSurfaceType, CeilingSurface

<xs:complexType name="CeilingSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfCeilingSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="CeilingSurface" type="CeilingSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfCeilingSurface" type="xs:anyType" abstract="true"/>

CeilingSurface只能在LOD4内部建筑模型中使用,可对房间天花板进行建模。

10.3.4. 开口

AbstractOpeningType, _Opening

<xs:complexType name="AbstractOpeningType" abstract="true">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="lod3MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element ref="_GenericApplicationPropertyOfOpening" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="_Opening" type="AbstractOpeningType" abstract="true" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfOpening" type="xs:anyType" abstract="true"/>

_Opening是一个抽象基类,用于在语义上描述墙和屋顶等外部或内部表面上的门或窗。开口( _Opening)仅存在于LOD3或LOD4模型中。每个开口都与类型为gml:MultiSurface的几何体进行关联。如果不关联的话,几何体需要作为其中的ImplicitGeometry。根据隐式几何的概念,开口的原型几何体仅需要在局部坐标系中存储一次,可由其他开口进行调用(见第8.2章)。

WindowType, Window

<xs:complexType name="WindowType">
    <xs:complexContent>
        <xs:extension base="AbstractOpeningType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfWindow" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="Window" type="WindowType" substitutionGroup="_Opening"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfWindow" type="xs:anyType" abstract="true"/>

Window可用于对建筑外表皮中的窗口或相邻房间之间的舱口进行建模。WindowDoor的形式上的区别在于,在正常情况下窗户并不是专门用来运送人或车辆的。

DoorType, Door

<xs:complexType name="DoorType">
    <xs:complexContent>
        <xs:extension base="AbstractOpeningType">
            <xs:sequence>
                <xs:element name="address" type="core:AddressPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfDoor" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="Door" type="DoorType" substitutionGroup="_Opening"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfDoor" type="xs:anyType" abstract="true"/>

Door可用于在建筑物的外表皮中或相邻房间之间,对门进行建模。人们可以用门进出建筑物或房间。与ClosureSurface不同的是,门可能是关闭的,阻碍了人们的通行。一扇门可以分配多个地址。相应的AddressPropertyType在CityGML核心模块中定义(参见第10.1.4章)。

10.3.5. 建筑内部

RoomType, Room

<xs:complexType name="RoomType">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod4Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="boundedBy" type="BoundarySurfacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="interiorFurniture" type="InteriorFurniturePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="roomInstallation" type="IntBuildingInstallationPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfRoom" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="Room" type="RoomType" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfRoom" type="xs:anyType" abstract="true"/>

Room是一个语义对象,用于对建筑内部的自由空间进行建模,并且大部分情况下,只与一个建筑或建筑部件相关。Room为闭合的(如果需要的话,可以使用ClosureSurface),并且几何体通常用实体(Lod4Solid)来描述。然而,如果不能保证边界的拓扑正确性,几何体也可以作为一个多曲面Lod4MultiSurface)给出。由于当作为GML外表皮时,其表面法线必须指向外部,因此当应Room被指定Appearances时,必须考虑这一点。在这种情况下,纹理和颜色必须放置在相应曲面的背面,以便从房间内部可见。

除了几何表示之外,房间可见表面的不同部分可以通过特定的BoundarySurfacesFloorSurfaceCeilingSurfaceInteriorWallSurfaceClosureSurface,参见第10.3.3章)进行建模。

在为相邻房间之间的进行通道建模,需特殊考虑。房间实体通过用舱口,门或门口的封闭曲面进行拓扑连接。如果房间之间有共同的 _OpeningsClosureSurfaces,则房间被定义为相邻。在几何形体上表示开口的面是两个房间实体边界的一部分,或者该开口在语义级别上由两个房间引用。这种邻接意味着一种可达性图结构,可用于确定烟或气体的扩散,但也可用于使用经典最短路径算法计算逃生路线。

Fig33
图 33. 从房间表面的拓扑邻接导出的可达性图(图:IGG Uni Bonn)。

BuildingFurnitureType, BuildingFurniture

<xs:complexType name="BuildingFurnitureType">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod4Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod4ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element ref="_GenericApplicationPropertyOfBuildingFurniture" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="BuildingFurniture" type="BuildingFurnitureType" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfBuildingFurniture" type="xs:anyType" abstract="true"/>

房间里可能包含BuildingFurnituresIntBuildingInstallationsBuildingFurniture是房间的可移动部分,如椅子或家具。BuildingFurniture对象应仅与一个房间对象相关。它的几何体可以由显式几何体或隐式几何体对象表示。根据ImplicitGeometry的概念,建筑家具的原型几何体仅在局部坐标系统中存储一次,可利用其特征进行调用(见第8.2章)。

IntBuildingInstallationType, IntBuildingInstallation

<xs:complexType name="IntBuildingInstallationType">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod4Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod4ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element name="boundedBy" type="BoundarySurfacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfIntBuildingInstallation" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="IntBuildingInstallation" type="IntBuildingInstallationType" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfIntBuildingInstallation" type="xs:anyType" abstract="true"/>

IntBuildingInstallation是建筑物内具有特定功能或语义的对象。与BuildingFurnitures不同的是,IntBuildingInstallations永久附着在建筑结构上,不能移动。典型的例子是室内楼梯,栏杆,散热器或管道。IntBuildingInstallation类的对象既可以与Room相关联,也可以与完整的Building/BuildingParth相关联( _AbstractBuilding,参见第10.3.1章)。但是,它们应该仅与一个房间或一个建筑/建筑部分对象相关。IntBuildingInstallation具有class, functionusage属性。属性class只能出现一次,它表示内部建筑组件的一般分类。通过functionusage属性,可以描述建筑装置的名义功能和实际功能。对于上述所有三个属性,其数值可以在代码列表中指定。对于IntBuildingInstallation的几何表示,可以使用图9所示的GML子集中的任意几何对象。或者,几何体可以作为隐式几何体对象给出。根据隐式几何的概念,原型内部建筑安装的几何仅在本地坐标系统中存储一次,可基于其特征进行调用(见第8.2章)。内部建筑装置的可见表面可以使用边界表面的概念进行语义分类(参见10.3.3)。

10.3.6. 使用城市对象组对建筑楼层进行建模

由于AEC/FM标准IFC(IAI 2006)中提供了楼层表示,因此CityGML目前没有提供具体的概念。然而,一个楼层可以用CityGML的城市对象组( _CityObjectGroups)概念表示为某一高度上所有建筑特征的显式集合(参见第10.11章)。这将包括RoomsDoorsWindowsIntBuilidingInstallationsBuildingFurniture。如果主题表面(如墙和内墙)也应与特定楼层相关联,则可能需要对这些表面进行垂直分割(每层一个),因为在虚拟3D城市模型中,这些表面通常跨越整个建筑立面。

为了使用CityGML的通用分组概念对建筑楼层进行建模,必须使用 CityObjectGroup的嵌套层次结构。在第一步中,将属于特定层的所有语义对象分组。相应CityObjectGroup对象的属性设置如下:

  • class属性应指定值“建筑物分隔

  • function属性应指定值“lodX-Storey”,X在1和4之间,以便注意该组的楼层数及特定的LOD等级。

  • 楼层名称或编号可以存储在gml:name属性中. 楼层编号属性应用decimal X数值对“storeyNo_X”进行表示。

在第二步中,表示不同楼层的 CityObjectGroup将自己分组。通过使用 CityObjectGroup的通用聚合概念,“楼层组”与相应的BuildingBuildingPart相关联。“building storeys”属性将被赋予至楼层class属性。

10.3.7. 示例

KIT北校区的LOD1模型如图34所示,由596栋建筑和187个建筑部分组成。建筑物底部轮廓线取自地籍信息系统,并按给定高度拉伸。具有唯一标识符和单个高度值的建筑建模为一个建筑(bldg:Building). 具有唯一标识符但高度值不同的建筑被建模为一个建筑(bldg:Building)一个或多个建筑部件(bldg:BuildingPart). 建筑和建筑部件都具有实体几何图形,它们的高度值另外表示为专题属性(bldg:measuredHeight). 图34显示了KIT Campus North(左)和CityGML LOD1模型(右)的航拍照片。

Fig34
图 34. KIT北校区的LOD1模型(来源:KIT)。

全纹理LOD2建筑模型的示例如图35所示,该图显示了位于德国卡尔斯鲁厄市的Bernhardus教堂。在图35的左侧,示出了真实世界中教堂的照片,而右侧示出了具有照片级真实感纹理的教堂的CityGML建筑模型。该模型由一个接地面,多个墙曲面和屋顶曲面构成。教堂时钟上方的轨道线被建模为建筑装置(BuildingInstallation)。

Fig35
图 35. 卡尔斯鲁厄伯恩哈德斯教堂的纹理LOD2模型(来源:KIT,卡尔斯鲁厄市提供)。

图36中所示的模型是从建筑物规划阶段生成的三维CAD模型导出的。在图36的左侧显示了建筑物,而在右侧显示了LOD3模型。建筑物本身由墙面,屋顶面和接地面构成。门和窗的模型包括分隔缝。根据地籍资料显示,大楼旁边的汽车端口不是大楼的一部分。因此,汽车港口,阳台和烟囱被建模为建筑设施(BuildingInstallation)。模型还包含建筑师规划的地形相交曲线(lod3TerrainIntersection)。

为了确定建筑的体积,建筑实体(lod3Solid)使用XLink机制引用了模型中所有边界曲面(包括门和窗)的几何图形。因此,屋顶曲面被拆分为表示屋顶本身的曲面和表示屋顶悬挑的曲面。

Fig36
图 36. 在LOD3中建模的建筑示例。烟囱,阳台和汽车港口被建模为建筑安装(来源:KIT,由弗兰兹·约瑟夫·凯瑟提供)。

10.3.8. 代码列表

_AbstractBuilding的属性(class, function, usageroofType),以及BuildingInstallation, Room, BuildingFurnitureIntBuildingInstallation的属性(classfunctionusage)可以通过gml:CodeType进行规定. 这些属性的值可以在代码列表中枚举。有关相应代码清单的建议见附件C.1。

10.3.9. 一致性要求

基础要求

  1. 如果Building仅由一个(同质)部件组成,则应以建筑部件表示。但是,如果建筑物由单独的结构件组成,则应将其建模为具有一个或多个BuildingPartBuilding。只有建筑的几何和非空间属性才能在聚合建筑元素中表示。

基于不同lod的建筑模型构件使用限制

  1. 当使用gml:MultiSurface几何形体关联上LOD0FootPrintLOD0RoofEdge属性时,必须具有三维坐标。对于每个曲面,属于同一曲面的坐标元组,其高度值应相同。

  2. _AbstractBuildinglodXSolidlodXMultiSurface属性,X∈[1..4],(gml:SolidPropertyTypegml:MultiSurfacePropertyType)可用于表示每个LOD中建筑物的外表皮(作为体积或表面模型)。

  3. 从LOD2开始,可以使用 _AbstractBuildingboundedBy属性(类型:BoundarySurfacePropertyType)将AbstractBuilding的外表皮语义分解为BoundarySurface元素。其中,只允许将RoofSurface, WallSurface, GroundSurface, OuterCeilingSurface, OuterFloor-SurfaceClosureSurface 作为 _BoundarySurface 的子类。boundedBy属性(注意不要与gml:boundedBy__搞混)如果建筑物仅在LOD1中显示,则不得使用。

    当使用 _BoundarySurface元素,对建筑外表面进行表示时,需要有一个额外的形态对表面模型进行表示(使用lodXSolidlodXMultiSurface, X∈[2..4])。属性不应明确定义几何图形,但过程中必须使用XLink,对每层LOD中 _BoundarySurfacegml:MultiSurface 元素中的相对应组件进行引用。

  4. 从LOD2开始,建筑外表皮的曲线部分可以使用lodXMultiCurve _AbstractBuiilding属性进行表示,建筑物的财产。但是如果建筑物仅在LOD1中表示,则不得使用该属性。

  5. 从LOD2开始, _AbstractBuildingouterBuildingInstallation属性(类型:BuildingInstallationPropertyType)可用于对BuildingInstallation元素建模。BuildingInstallation元素只能用于表示不具有建筑部件重要性的建筑外部特征。如果建筑物仅在LOD1中表示,则不得使用该属性。

  6. 从LOD2开始,BuildingInstallation元素的几何体可以使用BuildingInstallation的boundedBy属性(类型:BoundarySurfacePropertyType),按 _BoundarySurface元素进行语义分类。其中,只允许将屋顶表面,墙面,地表面,外墙面,外地板表面和封闭表面作为 _BoundarySurface的子类。

  7. 从LOD3开始,可以使用 _BoundarySurface的opening属性(类型:OpeningPropertyType)对BoundarySurface元素的开口进行建模。其中,当 _BoundarySurface元素仅在LOD2中表示时,不可以使用该属性。因此,在LOD2中表示 _BoundarySurface的曲面几何体必须拥有与其他曲面的连接。 _BoundarySurface的opening属性可以包含或引用 _Opening元素。如果 _Opening元素的几何位置,在拓扑关系上位于边界曲面的曲面组件内,则开口也必须表示为该曲面的内孔。 _Opening元素的开口面,应属于对应的相邻边界表面,即 _BoundarySurface

  8. 从LOD4开始, _AbstractBuilding中的interiorRoom属性(类型: InteriorRoomPropertyType)可用于按Room元素对建筑内部的空间进行语义建模。如果建筑仅以LOD 1–3表示,则不得使用该属性。Room元素可以使用lod4Solid / lod4MultiSurface属性以几何形式,表示为体积或曲面模型(gml:SolidPropertyTypegml:MultiSurfacePropertyType)。 此外,房间可见表面的不同部分可以由主题边界表面( _BoundarySurface)元素建模。只允许将FloorSurface, CeilingSurface, InteriorWallSurfaceClosureSurface)作为 _BoundarySurface的子类。当房间的可见表面由 _BoundarySurface表示时,其中使用lod4Solidlod4MultiSurface属性作为体积或表面模型的几何表示,不应明确定义几何体。但过程中必须使用XLink,对 _BoundarySurfacegml:MultiSurface元素中的相对应组件进行引用。

  9. 从LOD4开始, _AbstractBuildinginteriorBuildingInstallation属性(类型:IntBuildingInstallationPropertyType)可用于表示建筑物内永久附着在建筑结构上的不可移动对象。如果建筑物仅在LOD 1–3中表示,则不应使用interiorBuildingInstallation属性。此外,仅当对象无法与房间元素关联时,才应使用interiorBuildingInstallation属性。在后一种情况下,应使用相应房间元素的roomInstallation属性(类型:IntBuildingInstallationPropertyType)来表示对象。

  10. 从LOD4开始,可以使用IntBuildingInstallationboundedBy属性(类型:BoundarySurfacePropertyType)按BoundarySurface元素对IntBuildingInstallation元素的几何体进行语义分类。其中,只允许将FloorSurfaceCeilingSurfaceInteriorWallSurfaceClosureSurface作为 _BoundarySurface的子类。

引用一致性

  1. _AbstractBuilding中的boundedBy属性(类型:BoundarySurfacePropertyType)可以包含在内部定义过的 _BoundarySurface元素,或使用XLink对外部的 _BoundarySurface元素进行引用。在后一种情况下boundedBy属性的xlink:href属性只能指向外部的 _BoundarySurface元素(其中外部 _BoundarySurface元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

    只有RoofSurfaceWallSurfaceGroundSurfaceOuterCeilingSurfaceOuterFloorSurfaceClosureSurface元素,可以被 _AbstractBuildingboundedBy属性进行封装或引用。

  2. 元素 _AbstractBuildingouterBuildingInstallation属性(类型:BuildingInstallationPropertyType)可以包含在内部定义过的BuildingInstallation元素或使用XLink对外部BuildingInstallation元素的进行引用。在后一种情况下 _outerBuildingInstallation属性的XLink:href 属性只能指向外部的 _BuildingInstallation元素(其中外部 _BuildingInstallation元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  3. _AbstractBuilding元素的interiorBuildingInstallation属性(类型:IntBuildingInstallationPropertyType)可以包含在内部定义过的 _IntBuildingInstallation元素或使用XLink对外部 _IntBuildingInstallation元素进行引用。在后一种情况下 interiorBuildingInstallation属性的xlink:href属性只能指向外部的 _IntBuildingInstallation元素(其中外部 _IntBuildingInstallation元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  4. _AbstractBuilding元素的interiorRoom属性(类型:InteriorRoomPropertyType)可以包含在内部定义过的 _Room元素或使用XLink对外部 _Room元素进行引用。在后一种情况下 interiorRoom属性的xLink:href 属性只能指向外部的 _Room元素(其中外部 _Room元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  5. _AbstractBuildingconsistsOfBuildingPart属性(类型:BuildingPartPropertyType)可以包含在内部定义过的 _BuildingPart元素或使用XLink对外部 _BuildingPart元素进行引用。在后一种情况下consistsOfBuildingPart属性的xlink:href属性只能指向外部的 _BuildingPart元素(其中外部 _BuildingPart元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  6. _AbstractBuildingaddress属性(类型:core:AddressPropertyTyp)可以包含在内部定义过的core:Address元素或使用XLink对外部core:Address元素进行引用。在后一种情况下address属性的xlink:href属性只能指向外部的core:Address元素(其中外部core:Address元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  7. _BoundarySurfaceopening属性(类型:OpeningPropertyType)可以包含在内部定义过的 _Opening元素或使用XLink对外部 _Openin元素进行引用。在后一种情况下opening属性的xlink:href属性只能指向外部的 _Opening元素(其中外部 _Opening元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  8. Door元素的地址属性可以包含在内部定义过的core:Address元素或使用XLink对外部core:Address元素进行引用。在后一种情况下address属性的xlink:href 属性只能指向外部的core:Address元素(其中外部core:Address元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  9. BuildingInstallationboundedBy属性(类型:BoundarySurfacePropertyType)可以包含在内部定义过的 _BoundarySurface元素或使用XLink对外部 _BoundarySurface元素进行引用。在后一种情况下boundedBy属性的xlink:href 属性只能指向外部的 _BoundarySurface元素(其中外部 _BoundarySurface元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  10. IntBuildingInstallationboundedBy属性(类型:BoundarySurfacePropertyType)可以包含在内部定义过的 _BoundarySurface元素或使用XLink对外部 _BoundarySurface元素进行引用。在后一种情况下boundedBy属性的xlink:href 属性只能指向外部的 _BoundarySurface元素(其中外部 _BoundarySurface元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。 只有FloorSurfaceCeilingSurfaceInteriorWallSurfaceClosureSurface元素,可以被IntBuildingInstallationboundedBy属性进行封装或引用。

  11. RoomboundedBy属性(类型:BoundarySurfacePropertyType)可以包含在内部定义过的 _BoundarySurface元素或使用XLink对外部 _BoundarySurface元素进行引用。在后一种情况下boundedBy属性的xlink:href 属性只能指向外部的 _BoundarySurface元素(其中外部 _BoundarySurface元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。 只有FloorSurfaceCeilingSurfaceInteriorWallSurfaceClosureSurface元素,可以被RoomboundedBy属性进行封装或引用。

  12. RoominteriorFurniture属性(类型:InteriorFurniturePropertyType)可以包含在内部定义过的BuildingFurniture元素或使用XLink对外部BuildingFurniture元素进行引用。在后一种情况下interiorFurniture属性的xlink:href 属性只能指向外部的BuildingFurniture元素(其中外部BuildingFurniture元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  13. RoomroomInstallation属性(类型:IntBuildingInstallationPropertyType)可以包含在内部定义过的IntBuildingInstallation元素或使用XLink对外部IntBuildingInstallation元素进行引用。在后一种情况下roomInstallation属性的xlink:href 属性只能指向外部的IntBuildingInstallation元素(其中外部IntBuildingInstallation元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  14. BuildingInstallationlodXImplicitRepresentation(类型:core:ImplicitRepresentationPropertyType)属性可以包含在内部定义过的core:ImplicitGeometry元素或使用XLink对外部core:ImplicitGeometry元素进行引用。在后一种情况下lodXImplicitRepresentation属性的xlink:href 属性只能指向外部的core:ImplicitGeometry元素(其中外部core:ImplicitGeometry元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  15. BuildingInstallationlod4ImplicitRepresentation属性(类型:core:ImplicitRepresentationPropertyType) 可以包含在内部定义过的core:ImplicitGeometry元素或使用XLink对外部core:ImplicitGeometry元素进行引用。在后一种情况下lod4ImplicitRepresentation属性的xlink:href 属性只能指向外部的core:ImplicitGeometry元素(其中外部core:ImplicitGeometry元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  16. _OpeninglodXImplicitRepresentation(类型:core:ImplicitRepresentationPropertyType)属性可以包含在内部定义过的core:ImplicitGeometry元素或使用XLink对外部core:ImplicitGeometry元素进行引用。在后一种情况下lodXImplicitRepresentation属性的xlink:href 属性只能指向外部的core:ImplicitGeometry元素(其中外部core:ImplicitGeometry元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  17. BuildingFurniturelod4ImplicitRepresentation属性(类型:core:ImplicitRepresentationPropertyType) 可以包含在内部定义过的core:ImplicitGeometry元素或使用XLink对外部core:ImplicitGeometry元素进行引用。在后一种情况下lod4ImplicitRepresentation属性的xlink:href 属性只能指向外部的core:ImplicitGeometry元素(其中外部core:ImplicitGeometry元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

10.4. 隧道模型

隧道模型与建筑模型密切相关。它支持在LOD1到LOD4四个级别中表示隧道和隧道部分的主题和几何信息。CityGML的隧道模型由主题扩展模块Tunnel定义(参见第7章)。图37提供了每个LOD的隧道模型的示例。

Fig37
图 37. LOD1(左上),LOD2(右上),LOD3(左下)和LOD4(右下)中的隧道模型示例(来源:Google 3D warehouse)。

隧道模型的UML如图38所示。XML模式定义见附录A.11。该模型的关键类是 _AbstractTunnel,它是主题类 _Site(父类 _CityObject的衍生类)的子类。 _AbstractTunnel专用于TunnelTunnelPart。由于一个 _AbstractTunnelTunnelParts组成,而TunnelParts又是 _AbstractTunnel,因此可以实现任意深度的聚合层次结构。作为根类 _CityObject的子类, _AbstractTunnel继承 _CityObject的所有属性,如GML3标准特征属性(gml:name etc.)以及CityGML特有的属性,如外部引用(参见第6.7章)。 _AbstractTunnel未明确包含的其他属性可以建模为CityGML 泛型模块(参见第10.12章)或使用CityGML应用领域扩展机制(参见第10.13章)提供的泛型属性。

TunnelTunnelPart两个类都继承了 _AbstractTunnel的属性:即,Tunnel的类,函数,用途,建设年份和拆除年份。与 _AbstractBuilding不同的是,Address特性不能分配给 _AbstractTunnel

Fig38
图 38. CityGML隧道模型的UML图。前缀用于指示与模型元素关联的XML名称空间。没有前缀的元素名称在CityGML隧道模块中定义。

_AbstractTunnel的几何表示和语义结构如图38所示。模型从LOD1到LOD4依次细化。因此,并非隧道模型的所有组件在每个LOD中都具有相同的表示,并且并非每个LOD中都允许进行聚合。在CityGML中,所有对象类都与每个LOD的建议最小标准相关(参见第6.2章)。通过为相应的LOD提供不同的几何图形,可以在不同的LOD中表示对象。

与建筑和桥梁模型类似(参见第10.3章和第10.5章),只有隧道的外壳在LOD1–3中表示,LOD1–3由隧道与周围土壤,水或室外空气的边界表面组成。隧道内部只能在LOD4中建模。尽管内部建筑环境与地下物体(如隧道或地下建筑)相关性较强,但CityGML对所有主题模块采用一致的LOD概念。相反,如果在所有LOD中都可以表示地下对象的内部,则地下对象的LOD概念必须与地上对象的LOD概念有很大的不同。这需要精确定义“过渡曲面”,它界定了两个LOD概念的范围。此外,部分地上和地下的特征必须分为地上部分(根据地上LOD概念建模)和地下部分(根据地下LOD概念建模)。然而,这种分割违反了CityGML的特征统一概念,在许多情况下是不可行的,因为地上和地下之间的过渡,通常不能确切地知道或取决于地形模型的LOD。所以,CityGML将统一的LOD概念应用于地上和地下对象。结果如下,隧道与隧道内物体(如公路和铁路)之间的贯穿可能发生在LOD1–3。

在LOD1中,隧道模型由隧道空间的几何表示组成。或者,也可以指定一条表示地形剖面间曲线的多曲线(参见第6.5章)。在LOD2中,通过额外的多曲面和多曲线对几何表示进行了细化。

在LOD2和更高的LOD中,隧道的外部结构也可以通过 _BoundarySurfaceTunnelInstallation进行语义区分。边界表面是隧道外壳的一部分,具有墙面((WallSurface),屋顶表面(RoofSurface),地面(GroundSurface),外地板表面(OuterFloorSurface),外天花板(OuterCeilingSurface)或封闭表面(ClosureSurface)等特殊功能。TunnelInstallation主要用于会强烈影响隧道外观的外部楼梯,等类型的隧道元素。TunnelInstallation可以具有classfunctionusage属性(参见图38)。

在LOD3中, _BoundarySurface对象(门和窗)中的开口可以表示为主题对象。

在LOD4中,最高级别的分辨率,也就是由多个空心空间组成的隧道内部,在隧道模型中由HollowSpace表示。上述的方式提高了隧道的虚拟可接近性,例如用于隧道行驶,用于模拟灾害管理或用于呈现隧道内的光照。通过采用CityGML提供的一般分组概念(参见第10.11章),根据用户定义的任意标准(例如,用于定义与水平或垂直截面相对应的空心空间)对空心空间进行聚合。隧道的内部装置,即隧道内不能移动的物体(与家具相反),由IntTunnelInstallation表示。如果装置连接到特定的中空空间(如灯具,通风机),则它们与HollowSpace相关联,否则(如管道)与AbstractTunnel相关联。一个HollowSpace可以具有classfunctionusage属性,其可能的值可以在代码列表中枚举(第10.4.7章,附录C)。class属性允许对空心空间进行一般分类,例如商业或私人房间,并且只定义一次。function属性用于表示空心空间的主要用途,例如控制区域,安装空间,存储空间。如果对象的实际使用方式与实际功能不同,则可以使用usage属性。这两个属性可以出现多次。

空心空间的可见表面在几何上可以表示为SolidMultiSurface。从语义上讲,曲面可以被构造成特定的 _BoundarySurfaces,用来表示地板(FloorSurface),天花板(CeilingSurface)和内墙(InteriorWallSurface)。空心空间家具与控制区内的可移动设备一样,可以用具有TunnelFurniture属性的CityGML隧道模型来表示。TunnelFurniture可以具有classfunctionusage等属性。

XML 命名空间

CityGML隧道模块的XML命名空间由统一资源标识符(URI)标识http://www.opengis.net/citygml/tunnel/2.0. 在Tunnel模块的XML模式定义中,此URI还用于标识默认名称空间。

10.4.1. 隧道和隧道部件

TunnelType, Tunnel

<xs:complexType name="TunnelType">
    <xs:complexContent>
        <xs:extension base="AbstractTunnelType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfTunnel" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="Tunnel" type="TunnelType" substitutionGroup="_AbstractTunnel"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfTunnel" type="xs:anyType" abstract="true"/>

Tunnel _AbstractTunnel的两个子类之一。如果隧道仅由一个(同源)部分组成,则应使用此类。由结构段组成的隧道,例如隧道入口和地铁,必须分为有一个或多个TunnelPart的隧道。隧道中心部分的几何特性和非空间特性应在聚合Tunnel中表示。

TunnelPartType, TunnelPart

<xs:complexType name="TunnelPartType">
    <xs:complexContent>
        <xs:extension base="AbstractTunnelType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfTunnelPart" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="TunnelPart" type="TunnelPartType" substitutionGroup="_AbstractTunnel"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfTunnelPart" type="xs:anyType" abstract="true"/>

如果隧道的截面在几何形状和/或属性上不同,则可以将隧道分成多个部分(参见图39)。与Tunnel类似,TunnelPart派生自 _AbstractTunnel并继承 _AbstractTunnel的所有属性。TunnelPart对象应该只与一个隧道或隧道部件对象相关。

Fig39
图 39. 使用两个隧道部件建模的隧道示例(来源:Helmut Stracke)。

AbstractTunnelType, _AbstractTunnel

<xs:complexType name="AbstractTunnelType">
    <xs:complexContent>
        <xs:extension base="core:AbstractSiteType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="yearOfConstruction" type="xs:gYear" minOccurs="0"/>
                <xs:element name="yearOfDemolition" type="xs:gYear" minOccurs="0"/>
                <xs:element name="lod1Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod1MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod1TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod2Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod2MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod2MultiCurve" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod2TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="outerTunnelInstallation" type="TunnelInstallationPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="interiorTunnelInstallation" type="IntTunnelInstallationPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="boundedBy" type="BoundarySurfacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod3Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod3MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod3MultiCurve" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod3TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod4Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiCurve" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod4TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="interiorHollowSpace" type="InteriorHollowSpacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="consistsOfTunnelPart" type="TunnelPartPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfAbstractTunnel" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="_AbstractTunnel" type="AbstractTunnelType" abstract="true" substitutionGroup="core:_Site"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfAbstractTunnel" type="xs:anyType" abstract="true"/>

抽象类 _AbstractTunnel包含隧道属性的属性,几何形体表示,以及隧道或隧道部分在不同细节级别的几何/语义表示。这些属性描述如下:

a) 隧道或隧道部分的分类(class),不同的功能(function)和用法(usage)。这些属性的类型是gml:CodeType ,并且在单独的代码列表中对此赋值。

b) 隧道或隧道部分的建造年份(yearOfConstruction)和拆除年份(yearOfDemolition)。yearOfConstruction为隧道竣工的年份。yearOfDemolition是隧道拆除完成的年分。日期(年)指的是真实世界时间(如2011年)。

隧道模型跨越了不同的细节层次,其几何表示的复杂性和粒度不同,模型的主题结构也不同。这如图40所示,显示了四个不同LOD中的同一隧道。 _AbstractTunnel类,的某些属性也与lod级别相关。

Fig40
图 40. LOD1–LOD4中的隧道模型(来源:KIT)。

下方图表6,显示了隧道模型的几何表达和语义主题与LOD的对应关系。在每个LOD中,隧道的体积可以用gml:Solid几何 和/或gml:MultiSurface 几何. 三维地形相交曲线(TIC)的定义,可以用于将不同来源的隧道与数字地形模型相结合,也可用于所有LOD。TIC可以(但不是必须)在隧道或隧道部分周围建造封闭环。

几何/语义主题 属性类型 LOD1 LOD2 LOD3 LOD4

隧道外壳体块部件

gml:SolidType

·

·

·

·

隧道外壳表皮部件

gml:MultiSurfaceType

·

·

·

·

地形相切曲线

_gml:MultiCurveType

·

·

·

·

隧道外壳曲线部件

gml:MultiCurveType

·

·

·

隧道部件

TunnelPartType

·

·

·

·

边界表面

AbstractBoundarySurfaceType

·

·

·

外部隧道装置

TunnelInstallationType

·

·

·

开口

AbstractOpeningType

·

·

中空空间

HollowSpaceType

·

内部建筑装置

IntTunnelInstallationType

·

10.4.2. 外部隧道装置

TunnelInstallationType, TunnelInstallation

TunnelInstallation是隧道的外部构件,它不具有TunnelPart的重要性,但对隧道的外部特性有很大影响,例如楼梯。TunnelInstallation具有classfunctionusage属性。class类(只需定义一次)表示安装的一般分类。通过functionusage,可以描述隧道安装的名义和实际功能。对于所有三个属性,可在代码列表中进行指定。对于TunnelInstallation的几何表示,可以使用图9所示的GML子集中的任意几何对象。或者,其几何体可以作为ImplicitGeometry对象给出。根据ImplicitGeometry的概念,原型隧道安装的几何形体只需要在局部坐标系中存储一次,之后可以根据其特征被调用(见第8.2章)。隧道装置的可见表面可使用边界表面的概念进行语义分类(参见10.3.3)。TunnelInstallation对象应仅与一个tunneltunnelPart对象相关。

10.4.3. 边界表面

<xs:complexType name="AbstractBoundarySurfaceType" abstract="true">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="lod2MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod3MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="opening" type="OpeningPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfBoundarySurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="_BoundarySurface" type="AbstractBoundarySurfaceType" abstract="true" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfBoundarySurface" type="xs:anyType" abstract="true"/>

_BoundarySurface是多个主题类的抽象基类,用于构造隧道的外部外壳,空心空间的可见表面以及隧道的外部和内部装置。它是 _CityObject的一个子类,因此继承了所有属性,如GML3标准特征属性(gml:name etc.)以及CityGML特有的属性,比如外部引用。从边界表面出发,衍生出了如下专题类: RoofSurface , WallSurface , GroundSurface , OuterCeilingSurface , OuterFloorSurface , ClosureSurface , FloorSurface , InteriorWallSurfaceCeilingSurface。对于不同类型的隧道横截面,隧道表面的专题分类如图41所示,具体如下。

Fig41
图 41. 不同横截面隧道的边界表面使用示例。墙表面,屋顶表面,地表面,外墙面和外地板表面在LOD2–4中可用,而内墙面,地板表面和天花板表面仅可在LOD4中用于建模空心墙的内部边界表面

对于2到4之间的LOD等级, _BoundarySurface的几何体可以由不同的gml:MultiSurface 几何进行定义. 从LOD3开始, _BoundarySurface可以包含门和窗之类的开口(参见第10.4.4章)。如果开口的几何位置在拓扑上位于gml:MultiSurface的曲面组件内(例如,gml:Polygon),这些开口需要表示为该曲面内的孔。孔由相应曲面几何体对象内的内环表示。根据GML3,点必须以相反的顺序指定(外部边界为逆时针方向,内部边界为顺时针方向,与曲面法向量方向相反)。如果此类开口由WindowDoor密封,则其外边界可由与周围表面的内环(表示孔)相同的点组成。开口的边界表面属于相关的相邻边界表面。例如,如果一扇门封住了开口,那么门的一侧面属于InteriorWallSurface,另一侧的面属于WallSurface(参考图32的右部分了解建筑模型中的相同情况)。

GroundSurfaceType, GroundSurface

<xs:complexType name="GroundSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfGroundSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ==========================================================================================<xs:element name="GroundSurface" type="GroundSurfaceType" substitutionGroup="_BoundarySurface"/> <!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfGroundSurface" type="xs:anyType" abstract="true"/>

隧道或隧道部件的底板由GroundSurface进行建模。GroundSurface通常是隧道与周围土壤(土壤,岩石等)/水之间的边界表面。

OuterCeilingSurfaceType, OuterCeilingSurface

<xs:complexType name="OuterCeilingSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfOuterCeilingSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="OuterCeilingSurface" type="OuterCeilingSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfOuterCeilingSurface" type="xs:anyType" abstract="true

属于隧道外表皮且方向朝下的大部分水平面可建模为OuterCeilingSurface。例如崩塌保护器的可见部分或隧道与周围土壤/水之间的边界表面。

WallSurfaceType, WallSurface

<xs:complexType name="WallSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfWallSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="WallSurface" type="WallSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfWallSurface" type="xs:anyType" abstract="true"/

属于隧道外壳的隧道立面的所有部分都可以通过WallSurface建模。通常,WallSurface是隧道与周围土壤(土壤,岩石等)或水之间的边界表面。

OuterFloorSurfaceType, OuterFloorSurface

<xs:complexType name="OuterFloorSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfOuterFloorSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="OuterFloorSurface" type="OuterFloorSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfOuterFloorSurface" type="xs:anyType" abstract="true"/>

属于隧道外表皮且方向朝上的大部分水平表面可建模为OuterFloorSurfaceType

RoofSurfaceType, RoofSurface

<xs:complexType name="RoofSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfRoofSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="RoofSurface" type="RoofSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfRoofSurface" type="xs:anyType" abstract="true

属于隧道外表皮并主要用于保护隧道不受上方影响的边界表面用RoofSurface表示。这些边界的方向主要是向上的。

ClosureSurfaceType, ClosureSurface

<xs:complexType name="ClosureSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfClosureSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="ClosureSurface" type="ClosureSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfClosureSurface" type="xs:anyType" abstract="true"/>

没有门或窗填充的隧道或中空空间中的开口,可以使用ClosureSurface密封(参见第6.4章)。例如,隧道的入口可以建模为ClosureSurface

FloorSurfaceType, FloorSurface

<xs:complexType name="FloorSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfFloorSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="FloorSurface" type="FloorSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfFloorSurface" type="xs:anyType" abstract="true"/>

FloorSurface只能用于LOD4内部隧道模型中,以便对空心空间的地板进行建模。

InteriorWallSurfaceType, InteriorWallSurface

<xs:complexType name="InteriorWallSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfInteriorWallSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="InteriorWallSurface" type="InteriorWallSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfInteriorWallSurface" type="xs:anyType" abstract=

InteriorWallSurface仅允许在LOD4内部隧道模型中用于建模空心空间的可见墙面。

CeilingSurfaceType, CeilingSurface

<xs:complexType name="CeilingSurfaceType">
    <xs:extension base="AbstractBoundarySurfaceType">
        <xs:sequence>
            <xs:element ref="_GenericApplicationPropertyOfCeilingSurface" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:extension>
</xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="CeilingSurface" type="CeilingSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfCeilingSurface" type="xs:anyType" abstract="true"/>

CeilingSurface仅允许在LOD4内部隧道模型中使用,对空心空间的天花板进行建模。

10.4.4. 开口

AbstractOpeningType, _Opening

<xs:complexType name="AbstractOpeningType" abstract="true">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="lod3MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod3ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element name="lod4ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element ref="_GenericApplicationPropertyOfOpening" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="_Opening" type="AbstractOpeningType" abstract="true" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfOpening" type="xs:anyType" abstract="true"/>

_Openin是一个抽象的基类,用于在语义上描述外边界和内边界上的门或窗等开口。开口仅存在于LOD3或LOD4模型中。每个开口都关联着gml:MultiSurface几何形体。或者,在使用开口的过程中,几何体可以作为ImplicitGeometry对象。根据ImplicitGeometry的概念,开口模型的原型几何仅需要在局部坐标系中存储一次,之后可通过开口模型的特征进行调用(见第8.2章)。

WindowType, Window

<xs:complexType name="WindowType">
    <xs:complexContent>
        <xs:extension base="AbstractOpeningType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfWindow" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="Window" type="WindowType" substitutionGroup="_Opening"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfWindow" type="xs:anyType" abstract="true"/>

Window用于对隧道外壳和空心空间中的窗口或相邻空心空间之间的舱口进行建模。WindowDoor的形式上的区别在于,在正常情况下窗户并不是专门用来运送人或车辆的。

DoorType, Door

<xs:complexType name="DoorType">
    <xs:complexContent>
        <xs:extension base="AbstractOpeningType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfDoor" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="Door" type="DoorType" substitutionGroup="_Opening"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfDoor" type="xs:anyType" abstract="true"/>

Door用于在隧道的外壳中或相邻空心空间之间对门进行建模。人们可以用门进出隧道或地下空间。与ClosureSurface不同的是,门可能会关闭,阻止人员或车辆通行。

10.4.5. 隧道内部

HollowSpaceType, HollowSpace

<xs:complexType name="HollowSpaceType">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod4Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="boundedBy" type="BoundarySurfacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="interiorFurniture" type="InteriorFurniturePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="hollowSpaceInstallation" type="IntTunnelInstallationPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfHollowSpace" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="HollowSpace" type="HollowSpaceType" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfHollowSpace" type="xs:anyType" abstract="true"/>

HollowSpace是一个语义对象,用于对隧道内的自由空间进行建模,并且应该仅与一个隧道或隧道部分对象相关。该空间为闭合空间(可以使用closurespace),并且其几何体通常使用实体(lod4Solid)来描述。但是,如果不能保证边界的拓扑正确性,其几何体也可以是MultiSurfacelod4MultiSurface)。如果HollowSpace被指定为外观,则该几何的表面法线必须指向外部。在这种情况下,纹理和颜色必须放置在相应表面的背面,以便从中空空间内部可见。

除了几何表示之外,HollowSpace可见表面的不同部分可以通过特定的边界表面(FloorSurface, CeilingSurface, InteriorWallSurface, 和ClosureSurface,参见第10.4.3章)进行建模。

TunnelFurnitureType, TunnelFurniture

<xs:complexType name="TunnelFurnitureType">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod4Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod4ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element ref="_GenericApplicationPropertyOfTunnelFurniture" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="TunnelFurniture" type="TunnelFurnitureType" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfTunnelFurniture" type="xs:anyType" abstract="true

空心空间可能有TunnelFurnitureTunnelFurniture是中空空间的可移动部分。TunnelFurniture对象应仅与一个空心空间相关。它的几何体可以由显式几何体或隐式几何体对象表示。根据隐式几何的概念,TunnelFurniture的几何原型仅在局部坐标系中存储,可通过特征对该模型进行调用(见第8.2章)。

IntTunnelInstallationType, IntTunnelInstallation

<xs:complexType name="IntTunnelInstallationType">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod4Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod4ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element name="boundedBy" type="BoundarySurfacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfIntTunnelInstallation" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="IntTunnelInstallation" type="IntTunnelInstallationType" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfIntTunnelInstallation" type="xs:anyType" abstrac

IntTunnelInstallation是隧道内具有特定功能或语义的对象。与TunnelFurniture不同,IntTunnelInstallation对象属于永久附着在隧道结构上,不能移动。典型的例子是室内楼梯,栏杆,散热器或管道。IntTunnelInstallation对象可以与中空空间(HollowSpace类)相关联,也可以与完整的隧道或隧道部分相关联(IntTunnelInstallation类,见第10.4.1章)。但是,它们应该仅与一个空心空间或一个隧道/隧道零件对象相关。

IntTunnelInstallation具有class, functionusage等属性。类属性只能需要定义一次,它表示内部隧道组件的分类。通过函数和用法,可以描述隧道安装的名义和实际功能。对于上述三个属性,可以在代码列表中对数值进行指定。对于IntTunnelInstallation的几何表示,可以使用图9所示的GML子集中任意几何对象。或者,几何体可以作为隐式几何体对象给出。根据隐式几何的概念,IntTunnelInstallation的几何原型仅需要在局部坐标系中存储一次,可通过其特征对其进行调用(见第8.2章)。IntTunnelInstallation的可见表面可使用边界表面的概念进行语义分类(参见10.4.3)。

10.4.6. 示例

图42所示为德国卡尔斯鲁厄市中心的人行地道。在图42的左侧,一张照片说明了真实世界的情况。地下通道的两个入口在照片中都用虚线矩形标出。在图的右侧,显示了CityGML隧道模型。为了使得整个隧道及其地下实体更清晰可见,隧道周围的地形从模型中移除。图43从不同的视角示出了相同的地下通道。相机位于左入口(图42中的黑色虚线矩形)的前面,并指向右入口的方向(图42中的白色虚线矩形)。在图43的右侧,从相同的透视图示出隧道模型。为了使隧道的地下部分可见,对地形表面进行开孔。模型的背景中显示了附近建筑物的LOD1表示。

Fig42
图 42. LOD3中建模的隧道示例(左侧为真实情况;右侧为CityGML模型)(来源:KIT,卡尔斯鲁厄市提供)。
Fig43
图 43. 从不同的角度显示相同的LOD3隧道。摄像机位于左入口前方,指向右入口方向。(左侧为真实情况;右侧为CityGML模型)。右侧的模型还包括背景中附近建筑物的LOD1表示(浅棕色绘制)(来源:KIT,由卡尔斯鲁厄市提供)。

上述模型细分为一个Tunnel(实际地下通道)和两个TunnelPart(两个入口)。隧道和隧道部件由GroundSurface, WallSurface, RoofSurface进行限定。ClosureSurface对象用于实际密封隧道入口。为安全起见,两个入口均设有栏杆,栏杆模型为TunnelInstallation。由于该模型具有较高的几何精度和语义丰富性,将其归类为LOD3。

10.4.7. 代码列表

AbstractTunnelTunnelInstallationHollowSpaceTunnelFurnitureIntTunnelInstallationclass, functionusage属性,指定为gml:CodeType。 这些属性的值可以在代码中通过枚举进行使用。相应代码见附录C.2。

10.4.8. 一致性要求

基础要求

  1. 如果隧道仅由一个(同质)部分组成,则应使用Tunnel进行表示。但是,如果隧道由单个结构段组成,则应将其建模为具有一个或包含多个TunnelPart元素的Tunnel。只有隧道主体的几何和非空间特性才应在聚合Tunnel中表示。

基于不同LOD的隧道模型构件使用限制

  1. lodXSolidlodXMultiSurface,属性(gml:SolidPropertyType resp. gml:MultiSurfacePropertyType)在每个LOD中,隧道可以几何地表示隧道的外壳(作为体积或表面模型)。对于LOD1,必须使用lod1Solidlod1MultiSurface,但不能同时使用两者。从LOD2开始,这两个属性可以单独使用。

  2. 从LOD2开始, _AbstractTunnel的外表皮可以使用 _AbstractTunnelboundedBy属性(类型:BoundarySurfacePropertyType)在语义上进一步分解为 _BoundarySurface元素。目前只允许将屋顶表面,墙面,地面,外墙面,外地板表面和封闭表面可以作为 _BoundarySurface的子类。boundedBy属性(注意:不要与gml:boundedByproperty混淆)如果隧道仅以LOD1表示,则不得使用。 当使用 _BoundarySurface元素,对隧道外表面进行表示时,需要有一个额外的形态对表面模型进行表示(使用lodXSolidlodXMultiSurface)。属性不应明确定义几何图形,但过程中必须使用XLink,对每层LOD中 _BoundarySurfacegml:MultiSurface 元素中的相对应组件进行引用。

  3. 从LOD2开始,隧道外表皮可以使用lodXMultiCurve进行表示,属于 _AbstractTunnel。如果隧道仅在LOD1中表示,则不得使用该属性。

  4. 从LOD2开始, _ AbstractTunnelouterTunnelInstallation属性(类型:TunnelInstallationPropertyType)可用于对TunnelInstallation元素建模。TunnelInstallation元素只能用于表示隧道的外部特征,而不具有隧道部件的重要性。如果隧道仅以LOD1表示,则不得使用outerTunnelInstallation属性。

  5. 从LOD2开始,TunnelInstallation元素的几何体可以使用TunnelInstallationboundedBy属性(类型:BoundarySurfacePropertyType)按BoundarySurface元素进行语义分类。目前只允许将屋顶表面,墙面,地面,外墙面,外地板表面和封闭表面作为 _BoundarySurface的子类。

  6. 从LOD3开始,可以使用BoundarySurface的opening属性(类型:OpeningPropertyType)对BoundarySurface元素的开口进行建模。此属性不应用于仅在LOD2中表示的边界曲面元素。因此,在LOD2中表示边界曲面的曲面几何体属于全连接面。 _BoundarySurface的opening属性可以包含或引用 _Opening元素。如果开口元素的几何位置在拓扑上位于边界曲面的曲面组件内,则开口也必须表示为该曲面的内孔。开口元素的边界表面应属于相邻边界表面。

  7. 从LOD4开始, _AbstractTunnelinteriorHollowSpace属性(类型:InteriorHollowSpacePropertyType)可以通过HollowSpace元素对隧道内的空间进行语义建模。如果隧道仅在LOD 1–3中表示,则不应使用此属性。HollowSpace元素可使用lod4Solidlod4MultiSurface属性,以几何形式表示为曲面或体积模型(gml:SolidPropertyType resp. gml:MultiSurfacePropertyType)。 此外,空心空间可见表面的部件可由 _BoundarySurface元素进行建模。只允许将地板表面,天花板表面,内部墙面和封闭表面作为 _BoundarySurface的子类。如果空心空间的可见表面由 _BoundarySurface元素表示,则使用lod4Solidlod4MultiSurface属性的体量/表皮模型不应明确定义几何图形,但过程中必须使用XLink,对 _BoundarySurfacegml:MultiSurface 元素中的相对应组件进行引用。

  8. 从LOD4开始, _AbstractTunnelinteriorTunnelInstallation属性(类型:IntTunnelInstallationPropertyType)可用于表示隧道内永久附着在隧道结构上的不可移动对象。如果隧道仅在LOD 1–3中表示,则不应使用interiorTunnelInstallation属性。此外,仅当对象无法与HollowSpace元素关联时,才应使用interiorTunnelInstallation属性。当对象可以和HollowSpace进行关联时,应使用相应HollowSpace元素的hollowspaceinstallation属性(类型:IntTunnelInstallationPropertyType)来表示对象。

  9. 从LOD4开始,IntTunnelInstallation元素的几何体可以使用IntTunnelInstallationboundedBy属性(类型:BoundarySurfacePropertyType)按BoundarySurface元素进行语义分类。目前只允许将FloorSurfaceCeilingSurfaceInteriorWallSurfaceClosureSurface作为 _BoundarySurface的子类。

引用一致性

  1. _AbstractTunnelboundedBy(类型:BoundarySurfacePropertyType)属性可以包含在内部定义过的 _BoundarySurface元素或使用XLink对外部 _BoundarySurface元素进行引用。在后一种情况下boundedBy属性的xlink:href 属性只能指向外部的 _BoundarySurface元素(其中外部 _BoundarySurface元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

    只有屋顶表面,墙面,地表面,外墙面,外地板表面和封闭表面元素才允许由 _AbstractTunnelboundedBy属性进行封装或引用。

  2. _AbstractTunnelouterTunnelInstallation(类型:TunnelInstallationPropertyType)属性可以包含在内部定义过的TunnelInstallation元素或使用XLink对外部TunnelInstallation元素进行引用。在后一种情况下outerTunnelInstallation属性的xlink:href 属性只能指向外部的TunnelInstallation元素(其中外部TunnelInstallation元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  3. _AbstractTunnelinteriorTunnelInstallation(类型:IntTunnelInstallationPropertyType)属性可以包含在内部定义过的IntTunnelInstallation元素或使用XLink对外部IntTunnelInstallation元素进行引用。在后一种情况下interiorTunnelInstallation属性的xlink:href 属性只能指向外部的IntTunnelInstallation元素(其中外部IntTunnelInstallation元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  4. _AbstractTunnelinteriorHollowSpace(类型:InteriorHollowSpacePropertyType)属性可以包含在内部定义过的HollowSpace元素或使用XLink对外部HollowSpace元素进行引用。在后一种情况下interiorHollowSpace属性的xlink:href 属性只能指向外部的HollowSpace元素(其中外部HollowSpace元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  5. _AbstractTunnelconsistsOfTunnelPart(类型:TunnelPartPropertyType)属性可以包含在内部定义过的TunnelPart元素或使用XLink对外部TunnelPart元素进行引用。在后一种情况下consistsOfTunnelPart属性的xlink:href 属性只能指向外部的TunnelPart元素(其中外部TunnelPart元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  6. _BoundarySurfaceopening(类型:OpeningPropertyType)属性可以包含在内部定义过的 _Opening元素或使用XLink对外部 _Opening元素进行引用。在后一种情况下opening属性的xlink:href 属性只能指向外部的 _Opening元素(其中外部 _Opening元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  7. TunnelInstallationboundedBy(类型:BoundarySurfacePropertyType)属性可以包含在内部定义过的 _BoundarySurface元素或使用XLink对外部 _BoundarySurface元素进行引用。在后一种情况下boundedBy属性的xlink:href 属性只能指向外部的 _BoundarySurface元素(其中外部 _BoundarySurface元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  8. IntTunnelInstallationboundedBy(类型:BoundarySurfacePropertyType)属性可以包含在内部定义过的 _BoundarySurface元素或使用XLink对外部 _BoundarySurface元素进行引用。在后一种情况下boundedBy属性的xlink:href 属性只能指向外部的 _BoundarySurface元素(其中外部 _BoundarySurface元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

    只有FloorSurface, CeilingSurface, InteriorWallSurfaceClosureSurface元素才允许由 _AbstractTunnelboundedBy属性进行封装或引用。

  9. HollowSpaceboundedBy(类型:BoundarySurfacePropertyType)属性可以包含在内部定义过的 _BoundarySurface元素或使用XLink对外部 _BoundarySurface元素进行引用。在后一种情况下boundedBy属性的xlink:href 属性只能指向外部的 _BoundarySurface元素(其中外部 _BoundarySurface元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。 只有屋顶表面,墙面,地表面,外墙面,外地板表面和封闭表面元素才允许由HollowSpaceboundedBy属性进行封装或引用。

  10. HollowSpaceinteriorFurniture(类型:InteriorFurniturePropertyType)属性可以包含在内部定义过的TunnelFurniture元素或使用XLink对外部TunnelFurniture元素进行引用。在后一种情况下interiorFurniture属性的xlink:href 属性只能指向外部的TunnelFurniture元素(其中外部TunnelFurniture元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  11. HollowSpacehollowSpaceInstallation(类型:IntTunnelInstallationPropertyType)属性可以包含在内部定义过的IntTunnelInstallation元素或使用XLink对外部IntTunnelInstallation元素进行引用。在后一种情况下hollowSpaceInstallation属性的xlink:href 属性只能指向外部的IntTunnelInstallation元素(其中外部IntTunnelInstallation元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  12. TunnelInstallationlodXImplicitRepresentation(类型:core:ImplicitRepresentationPropertyType)属性可以包含在内部定义过的core:ImplicitGeometry元素或使用XLink对外部core:ImplicitGeometry元素进行引用。在后一种情况下lodXImplicitRepresentation属性的xlink:href 属性只能指向外部的core:ImplicitGeometry元素(其中外部core:ImplicitGeometry元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  13. IntTunnelInstallationlod4ImplicitRepresentation(类型:core:ImplicitRepresentationPropertyType)属性可以包含在内部定义过的core:ImplicitGeometry元素或使用XLink对外部core:ImplicitGeometry元素进行引用。在后一种情况下lod4ImplicitRepresentation属性的xlink:href 属性只能指向外部的core:ImplicitGeometry元素(其中外部core:ImplicitGeometry元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  14. _Opening的lodXImplicitRepresentation(类型:core:ImplicitRepresentationPropertyType)属性可以包含在内部定义过的core:ImplicitGeometry元素或使用XLink对外部core:ImplicitGeometry元素进行引用。在后一种情况下lodXImplicitRepresentation属性的xlink:href 属性只能指向外部的core:ImplicitGeometry元素(其中外部core:ImplicitGeometry元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

  15. TunnelFurniturelod4ImplicitRepresentation(类型:core:ImplicitRepresentationPropertyType)属性可以包含在内部定义过的core:ImplicitGeometry元素或使用XLink对外部core:ImplicitGeometry元素进行引用。在后一种情况下lod4ImplicitRepresentation属性的xlink:href 属性只能指向外部的core:ImplicitGeometry元素(其中外部core:ImplicitGeometry元素位于另一个文档或同一文档中的其他位置)。该元素及引用,只能选择都给出,或都不给出。

10.5. 桥梁模型

桥梁模型允许在四个细节层次(LOD 1–4)中表示桥梁和桥梁部分的主题,空间和视觉方面。CityGML的桥梁模型由主题扩展模块bridge定义(参见第7章)。图44示出了所有lod中的桥模型的示例。

Fig44
图 44. LOD1(左上),LOD2(右上),LOD3(左下)和LOD4(右下)中的桥梁模型示例(来源:Google 3D warehouse)

桥梁模型在结构和属性方面类似于建筑模型(参见第10.3章)。桥梁模型的UML图如图45所示,XML模式定义如附录A.3所示。

Fig45
图 45. 桥梁模型的UML图,第一部分。

(可移动或不可移动的)桥由Bridge类的对象表示。这个类从抽象基类 _AbstractBridge衍生,并继承其属性和关系。空间特性由四个LOD(lod1Solidlod4Solid的关系)中的每一个的实体定义。与建筑模型类似,从LOD1(块模型)到LOD3(建筑模型),语义和几何的丰富性都增加了。每个LOD中桥梁的简单示例如图46所示。室内结构(如房间)专用于LOD4。为了涵盖拓扑不满足实体特性(本质上是水密性)的桥梁模型情况,允许使用多曲面表示(lod1MultiSurfacelod4MultiSurface)。桥梁与地形表面接触的线由地形交点曲线表示。除了桥梁的实体表示外,绳索或天线等线性特征还可以通过LOD1多曲线到LOD4多曲线关系进行几何指定。如果这些特征应以语义表示,则可使用特征BridgeFurnitureBridgeConstructionElement(见第10.5.2节)。所有与语义对象和地理度量属性的关系都列在下图表7中。

Fig46
图 46. 桥梁模型的UML图,第一部分。

_AbstractBridge的语义属性是classfunctionusage和_movable。class属性用于对桥梁进行分类,例如区分不同的结构类型(参见图48)。function属性允许独立于构造表示桥梁的利用率。其可选用的值可以是铁路桥,公路桥,人行天桥,渡槽等。当桥梁的功能,与上述功能不同时,可以使用属性usage进行赋值。这些属性的类型是gml:CodeType,其值可以在代码列表中定义。桥的名称可以用gml:name 属性,它通过gml:_Feature _CityObject _Site从基类gml:_gml继承。可以使用address属性为每个桥或桥零件特征分配零个或多个地址。相应的AddressPropertyType在CityGML核心模块中定义(参见第10.1.4章)。

几何/语义主题 属性类型 LOD1 LOD2 LOD3 LOD4

桥梁外壳体块部件

gml:SolidType

·

·

·

·

桥梁外壳表皮部件

gml:MultiSurfaceType

·

·

·

·

地形相切曲线

_gml:MultiCurveType

·

·

·

·

桥梁外壳曲线部件

gml:MultiCurveType

·

·

·

桥梁部件

BridgePartType

·

·

·

·

边界表面

AbstractBoundarySurfaceType

·

·

·

外部桥梁装置

BridgeFurnitureType

·

·

·

桥梁建造要素

BridgeConstructionElementType

·

·

·

·

开口

AbstractOpeningType

·

·

桥梁空间

_BridgeRoomType_

·

内部建筑装置

IntBridgeFurnitureType

·

boolean属性is_movable,用于指定桥是否可移动。可运动的几何建模延迟到本标准的后续版本。图47中描绘了一些类型的可移动桥。

Fig47
图 47. 移动桥示例(来源:ISO 6707)。
Fig48
图 48. 不同类型桥梁的示例。

XML 命名空间

CityGML桥梁模块的XML命名空间由统一资源标识符(URI)标识http://www.opengis.net/citygml/bridge/2.0. 在Bridge模块的xmlschema定义中,这个URI还用于标识默认名称空间。

10.5.1. 桥梁和桥梁部件

BridgeType, Bridge

<xs:complexType name="BridgeType">
    <xs:complexContent>
        <xs:extension base="AbstractBridgeType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfBridge" minOccurs="0" maxOccurs="unbounde</xs:sequence></xs:extension></xs:complexContent></xs:complexType><!-- ========================================================================================= --><xs:element name="Bridge" type="BridgeType" substitutionGroup="_AbstractBridge"/><!-- ========================================================================================= --><xs:element name="_GenericApplicationPropertyOfBridge" type="xs:anyType" abstract="true"/>

BridgePartType, BridgePart

<xs:complexType name="BridgePartType">
    <xs:complexContent>
        <xs:extension base="AbstractBridgeType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfBridgePart" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="BridgePart" type="BridgePartType" substitutionGroup="_AbstractBridge"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfBridgePart" type="xs:anyType" abstract="true"/>

如果桥的某些部分在属性值方面与其他桥不同,或者坡道等部件可以标识为它们自己的对象,则这些部分可以表示为BridgePart。一个桥可以由多个桥部件组成。与Bridge一样,BridgePart也是 _AbstractBridge的一个子类,因此具有相同的属性和关系。consistOfBridgePart表示桥(或桥部件)及其桥部件之间的聚合层次结构。通过这种方法,可以对任意深度的聚合层次结构进行建模。每个BridgePart只属于一个Bridge(或BridgePart)。与建筑模型类似,桥梁的聚合结构形成一棵结构树。带有零件的桥其中的一个简单示例是双桥。第10.5.6章给出了另一个例子。

AbstractBridgeType, _AbstractBridge

<xs:complexType name="AbstractBridgeType" abstract="true">
    <xs:complexContent>
        <xs:extension base="core:AbstractSiteType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="yearOfConstruction" type="xs:gYear" minOccurs="0"/>
                <xs:element name="yearOfDemolition" type="xs:gYear" minOccurs="0"/>
                <xs:element name="isMovable" type="xs:boolean" default="false" minOccurs="0"/>
                <xs:element name="lod1Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod1MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod1TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod2Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod2MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod2MultiCurve" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod2TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="outerBridgeConstruction" type="BridgeConstructionElementPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="outerBridgeInstallation" type="BridgeInstallationPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="interiorBridgeInstallation" type="IntBridgeInstallationPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="boundedBy" type="BoundarySurfacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod3Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod3MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod3MultiCurve" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod3TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod4Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiCurve" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod4TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="interiorBridgeRoom" type="InteriorBridgeRoomPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="consistsOfBridgePart" type="BridgePartPropertyType" minOccurs="0" maxOccurs
                <xs:element name="address" type="core:AddressPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfAbstractBridge" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="_AbstractBridge" type="AbstractBridgeType" abstract="true" substitutionGroup="core:_Site"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfAbstractBridge" type="xs:anyType" abstract="true

抽象类AbstractBridgeBridgesBridgeParts的基类。它包含桥属性,纯几何表示以及桥或桥零件在不同详细程度上的几何/语义表示的属性。属性描述:

a) 桥梁或桥梁部分(class)的分类,不同的预期用途(function)和不同的实际用途(usage)。这些属性类型的数值可以在代码列表中指定。

b) 桥梁或桥梁部分的建造年份(yearOfConstruction)和拆除年份(yearOfDemolition)。这些属性可用于描述城市模型中桥梁发展的年表。时间点指的是真实世界的时间。

c) 桥是否可移动由Boolean属性isMovable指定。

10.5.2. 桥梁建造要素和桥梁装置

BridgeConstructionElementType, BridgeConstructionElement

<xs:complexType name="BridgeConstructionElementType">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod1Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod2Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod3Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod4Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod1TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod2TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod3TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod4TerrainIntersection" type="gml:MultiCurvePropertyType" minOccurs="0"/>
                <xs:element name="lod1ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element name="lod2ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element name="lod3ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element name="lod4ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element name="boundedBy" type="BoundarySurfacePropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfBridgeConstructionElement" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="BridgeConstructionElement" type="BridgeConstructionElementType" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfBridgeConstructionElement" type="xs:anyType"/>

BridgeFurnitureType, BridgeFurniture

<xs:complexType name="BridgeFurnitureType">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod4Geometry" type="gml:GeometryPropertyType" minOccurs="0"/>
                <xs:element name="lod4ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element ref="_GenericApplicationPropertyOfBridgeFurniture" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="BridgeFurniture" type="BridgeFurnitureType" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfBridgeFurniture" type="xs:anyType" abstract="true"/>

不具有BridgePart大小,影响或意义的桥梁图元可以建模为BridgeConstructionElementBridgeFurniture。从结构的角度来看,必不可少的构件被建模为BridgeConstructionElement,例如塔架,锚具等结构构件(参见图49)。构造元素的一般分类以及预期和实际功能由属性class, functionusage表示。可能存在于LOD1到LOD4中的BridgeConstructionElement的几何图形为gml:_Geometry。或者,几何体可以作为ImplicitGeometry。根据隐式几何的概念,桥梁构造原型的几何模型仅在局部坐标系中存储一次,可通过其桥梁构造元素特征进行调用(参见第8.2章)。桥梁结构元素的可见表面可以使用边界表面的概念进行语义分类(参见第10.5.3章)。

尽管BridgeConstructionElement具有结构相关性,但BridgeFurniture代表桥梁的一个构件,可以在不倒塌桥梁的情况下消除该构件(如楼梯,天线,栏杆)。BridgeFurniture仅出现在LOD 2至4中,其几何表示为gml:_Geometry。同样,隐式几何的概念也可以应用于桥梁设施,其可见表面可以使用边界表面的概念进行语义分类(参见第10.5.3章)。BridgeFurniture包含语义属性classfunctionusage。属性类给出了桥梁安装的分类。通过属性功能和用法,可以描述BridgeFurniture的名义功能和实际功能。所有属性的类型为gml:CodeType,其值可以在代码列表中定义。

Fig49
图 49. 桥梁结构悬索桥的构件。

10.5.3. 边界表面

AbstractBoundarySurfaceType, _BoundarySurface

<xs:complexType name="AbstractBoundarySurfaceType" abstract="true">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="lod2MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod3MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="opening" type="OpeningPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfBoundarySurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="_BoundarySurface" type="AbstractBoundarySurfaceType" abstract="true" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfBoundarySurface" type="xs:anyType" abstract=

桥梁的主题边界表面与建筑模块相似 _BoundarySurface是多个主题类的抽象基类,用于构造桥梁的外表面以及房间,桥梁构造元素和桥梁内外装置的可见表面。它是 _CityObject的一个子类,因此继承了所有属性,如GML3标准特征属性(gml:name etc.)以及CityGML特有的属性,比如外部引用。从边界表面出发,延伸出了屋顶表面,墙面,地面,外墙面,外地板表面,封闭表面,地板表面,内墙面和天花板表面等专题类。

对于Lod2到Lod4之间的每个等级, _BoundarySurface的几何体可以由不同的gml:MultiSurface 进行构建。

在LOD3和LOD4中, _BoundarySurface包含门和窗之类的 _Openings (参见第10.5.4章)。如果 _Openings的几何位置在拓扑上位于gml:MultiSurface的曲面组件内(例如 gml:Polygon),这些开口则表示为该曲面内的孔。孔由相应曲面几何体对象内的内环表示。根据GML3,这些点必须以相反的顺序指定(当从曲面法向量的相反方向看时,外部边界为逆时针方向,内部边界为顺时针方向)。如果此类开口由DoorWindowClosureSurface密封,则其外边界由与周围表面的内环(表示孔),其相同的点组成。Opening的边界表面属于相邻边界表面。例如,如果门密封了开口,则门的一侧属于InteriorWallSurface,另一侧属于WallSurface

图 50 描绘了具有 RoofSurfacesWallSurfacesOuterFloorSurfacesOuterCeilingSurfaces 的桥梁。 除了 BridgesBridgeParts 之外,BridgeConstructionElementsBridgeFurnitures 以及 IntBridgeFurnitures 也都可以与 _BoundarySurface 相关。 _BoundarySurfaces 出现在 LOD2 到 LOD4 中。 在 LOD3 和 LOD4 中,该表面可能包含 _Openings(参见第 10.3.4 章),如门和窗。

Fig50
图 50. 桥的不同边界表面。

GroundSurfaceType, GroundSurface

<xs:complexType name="GroundSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfGroundSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="GroundSurface" type="GroundSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfGroundSurface" type="xs:anyType" abstract="true

桥梁或桥梁零件的接地板面由 GroundSurface 进行建模。定义接地板的多边形与桥梁底部轮廓线一致。但是,接地板面的表面法线指向下方。

OuterCeilingSurfaceType, OuterCeilingSurface

<xs:complexType name="OuterCeilingSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfOuterCeilingSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="OuterCeilingSurface" type="OuterCeilingSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfOuterCeilingSurface" type="xs:anyType" abstract="true

属于外桥表面,且方向朝下的大部分水平表面可以建模为OuterCeilingSurface

WallSurfaceType, WallSurface

<xs:complexType name="WallSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfWallSurface" minOccurs="0" maxOccurs="unbounded</xs:sequence></xs:extension></xs:complexContent></xs:complexType><!-- ========================================================================================= --><xs:element name="WallSurface" type="WallSurfaceType" substitutionGroup="_BoundarySurface"/><!-- ========================================================================================= --><xs:element name="_GenericApplicationPropertyOfWallSurface" type="xs:anyType" abstract="true"/>

属于外桥表面的桥梁立面,其所有部分都可以通过WallSurface进行建模。

OuterFloorSurfaceType, OuterFloorSurface

<xs:complexType name="OuterFloorSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfOuterFloorSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="OuterFloorSurface" type="OuterFloorSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfOuterFloorSurface" type="xs:anyType" abstract="true"/>

属于外桥表面且方向朝上的大部分水平表面,可以建模为OuterFloorSurface

RoofSurfaceType, RoofSurface

<xs:complexType name="RoofSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfRoofSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================== -->
<xs:element name="RoofSurface" type="RoofSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================== -->
<xs:element name="_GenericApplicationPropertyOfRoofSurface" type="xs:anyType" abstract="true"/>

桥梁或桥梁部分的主要屋顶部分由RoofSurface类表示。

ClosureSurfaceType, ClosureSurface

<xs:complexType name="ClosureSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfClosureSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="ClosureSurface" type="ClosureSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfClosureSurface" type="xs:anyType" abstract="

没有被门或窗填充的桥梁开口可以被虚拟表面(ClosureSurface)进行密封(参见第 6.4 章)。 因此,通过虚拟封闭具有开口的桥,可以计算它们的体积。ClosureSurfaces也用于内部桥梁模型。 如果两个不同的房间在没有分隔门的情况下直接连接,则应使用ClosureSurface来分隔或连接两个房间的体积。

FloorSurfaceType, FloorSurface

<xs:complexType name="FloorSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfFloorSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="FloorSurface" type="FloorSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfFloorSurface" type="xs:anyType" abstract="true"/>

FloorSurface只能在 LOD4桥梁内部模型中,用于对桥梁房间的地板进行建模。

InteriorWallSurfaceType, InteriorWallSurface

<xs:complexType name="InteriorWallSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfInteriorWallSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="InteriorWallSurface" type="InteriorWallSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfInteriorWallSurface" type="xs:anyType" abstract="

InteriorWallSurface只能在 LOD4 桥梁内部模型中,用于对桥梁房间墙壁的可见表面进行建模。

CeilingSurfaceType, CeilingSurface

<xs:complexType name="CeilingSurfaceType">
    <xs:complexContent>
        <xs:extension base="AbstractBoundarySurfaceType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfCeilingSurface" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="CeilingSurface" type="CeilingSurfaceType" substitutionGroup="_BoundarySurface"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfCeilingSurface" type="xs:anyType" abstract="true

10.5.4. 开口

AbstractOpeningType, _Opening

<xs:complexType name="AbstractOpeningType" abstract="true">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="lod3MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="lod3ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element name="lod4ImplicitRepresentation" type="core:ImplicitRepresentationPropertyType" minOccurs="0"/>
                <xs:element ref="_GenericApplicationPropertyOfOpening" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="_Opening" type="AbstractOpeningType" abstract="true" substitutionGroup="core:_CityObject"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfOpening" type="xs:anyType" abstract="true"/>

_Opening 是抽象基类,用于在语义上描述门或窗等外边界表面或内边界表面(如墙壁和屋顶)中的开口。 开口仅存在于 LOD3 或 LOD4 模型中。 每个 _Opening 都与一个 gml:MultiSurface 几何体相关联。 或者,其几何形体可以作为ImplicitGeometry对象。 根据ImplicitGeometry的概念,开口的原型几何,仅需要在局部坐标系中存储一次,并通过其特征进行调用(见第8.2章)。

WindowType, Window

<xs:complexType name="WindowType">
    <xs:complexContent>
        <xs:extension base="AbstractOpeningType">
            <xs:sequence>
                <xs:element ref="_GenericApplicationPropertyOfWindow" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="Window" type="WindowType" substitutionGroup="_Opening"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfWindow" type="xs:anyType" abstract="true"/>

Window用于建模桥梁外表皮中的窗口或相邻房间之间的舱口。WindowDoor的形式上的区别在于,在正常情况下Window并不是专门用来运送人或车辆的。

DoorType, Door

<xs:complexType name="DoorType">
    <xs:complexContent>
        <xs:extension base="AbstractOpeningType">
            <xs:sequence>
                <xs:element name="address" type="core:AddressPropertyType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element ref="_GenericApplicationPropertyOfDoor" minOccurs="0" maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType><!-- ========================================================================================= -->
<xs:element name="Door" type="DoorType" substitutionGroup="_Opening"/>
<!-- ========================================================================================= -->
<xs:element name="_GenericApplicationPropertyOfDoor" type="xs:anyType" abstract="true"/>

Door主要用于在桥的外表皮中或相邻房间之间,对门进行建模。人们可以用门进出桥或房间。与ClosureSurface不同的是,Door可能是关闭的,阻碍了人们的通行。一扇门可以分配多个地址(也可以不进行分配)。相应的Address属性类型在CityGML核心模块中定义(参见第10.1.4章)。

10.5.5. 桥梁内部

BridgeRoomIntBridgeFurnitureBridgeFurniture表示桥梁内部构造。它们的设计类似于建筑模块中的Room, IntBuildingInstallationBuildingFurniture。桥梁内部只能在LOD4中建模。

BridgeRoomType, BridgeRoom

<xs:complexType name="BridgeRoomType">
    <xs:complexContent>
        <xs:extension base="core:AbstractCityObjectType">
            <xs:sequence>
                <xs:element name="class" type="gml:CodeType" minOccurs="0"/>
                <xs:element name="function" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="usage" type="gml:CodeType" minOccurs="0" maxOccurs="unbounded"/>
                <xs:element name="lod4Solid" type="gml:SolidPropertyType" minOccurs="0"/>
                <xs:element name="lod4MultiSurface" type="gml:MultiSurfacePropertyType" minOccurs="0"/>
                <xs:element name="boundedBy" type="BoundarySurfacePropertyType" minOccurs="