CityGML特性表征

本节描述在CityGML Reader和writer中如何处理多个几何图形,如何描述细节级别,并解释当CityGML Reader解释一个CityGML数据集时创建的特性层次结构。

从CityGML Reader读取的CityGML特性在FME中的名称与它们在应用程序模式中的名称相同。例如,CityGML Building将创建一个名为建筑FME基金。唯一的例外是GenericCityObjects.作为通用对象,特性类型的名称将在可能的情况下匹配其gml_name属性的名称。

多个几何图形

在一个CityGML数据集中,相同的特征可以同时以多级细节表示。由于FME不支持一个特性上的多个几何图形,CityGML阅读器将为一个特性类型创建一个几何图形集合,每个细节级别对应一个几何图形。

如果一个特征类型只有一个细节级别可用,那么表示该特征的非聚合几何体将被创建。

由于在CityGML中定义的多个几何图形可能映射到一个单一的FME几何图形,因此我们将原始的CityGML几何图形保留为一个名为gml_geometry

这种几何形状的灵活性给希望编写CityGML的用户带来了一个问题。给定一个带有一些几何学的特征,作者将如何解释几何学的作用。例如,一个建筑支持十几种不同的几何元素。作者如何确定合适角色几何?通常,您必须用一个几何特征来标记每个几何组件,该特征定义了几何组件所扮演的几何角色。例如,如果您正在编写一个具有多面几何和实体几何的Building,您可以使用GeometryPropertySetter转换器来设置属性citygml_lod_name要建立角色,使用以下标记多面:lod3MultiSurface固体Lod2Solid.在某些情况下,可能需要使用Deaggreagator转换器来拆分几何图形,标记每个组件,然后再次将它们聚合在一起。

价值citygml_lod_name属性也必须与几何类型兼容。例如,标记为lod3MultiSurface必须是MultiSurface,否则几何图形将不会被写出来。在某些情况下,对给定角色无效的几何图形将被转换为有效的几何图形。例如,带有lod3MultiSurface将被包裹在MultiSurface中,并用lod2MultiCurve将转换为多曲线。

为了帮助自动翻译,几何图形没有citygml_lod_nameTrait将被假定为lod4Geometry元素,如果它们的特性类型是GenericCityObject

的详细程度

为了跟踪具有几何体的特性的特定细节级别,CityGML Reader将创建一个名为citygml_level_of_detail.列表元素的值将是0到4之间的整数(包括4)。如果特性类型是特性的集合,那么list属性将包含与该集合中几何图形数量相同的元素。聚合中的几何图形保持它们的顺序,list属性按顺序跟踪每个几何图形的详细级别。

如果创建了非聚合几何,则citygml_level_of_detail属性将只包含一个引用所创建几何体细节级别的元素。

除了citygml_level_of_detail列表属性,两个几何特征将放在几何本身,以确定其细节级别:citygml_level_of_detailcitygml_lod_name

功能层次结构

CityGML的设计原则是将真实世界的实体作为功能模型,如建筑和墙壁,并保持功能之间的“部分”关系。例如,一扇窗和一扇门可能在同一语义层面上,因此它们都可能是同一面墙的“一部分”。

CityGML Reader通过为每个CityGML特性创建一个特性来模仿CityGML主题模型的这种层次结构,并通过它来维护“部分”关系gml_idgml_parent_id属性。在上面的例子中,窗口和门都指定了agml_parent_id相当于gml_id他们将成为这堵墙的一部分。

属性也可以抑制纹理数据的读取外表参数,以加快翻译速度。如果纹理读取被抑制,X3DMaterial, GeoreferencedTexture和ParameterizedTexture特征将总是被创建。

没有几何但有参考点的数据特征(例如,在隐式几何的情况下)将创建一个与这个参考点相对应的点几何。

CityGML Writer类似地使用gml_idgml_parent_id属性来确定特征层次结构。