从FME写CityGML

FME CityGML编写器将任何不在CityGML中定义的特性类型定义映射到GenericCityObject(s)中。本主题解释了FME CityGML作者如何使用预定义的主题CityGML特征类型输出数据集,如建筑,城市家具,水体,道路,铁路等。

CityGML在FME中的特征类型

为受支持的CityGML特性获取CityGML编写器特性类型定义的最简单方法是从现有的CityGML数据集导入它们。

FME附带了两个样例CityGML数据集,可用于用所需的CityGML写入器特性类型填充Workbench。这些文件位于FME安装的“xml/CityGML/writer_feature_types”文件夹下。“citygml_feature_type .xml”和“citygml_noiseade_feature_type .xml”样本数据集分别有CityGML(0.4和1.0)和CityGML- noiseade(0.4和1.0)的特性类型定义。

注意:这些CityGML样本文件不是GML意义上的完整数据集;它们不包含任何有意义的读取数据,只用于将特性类型定义导入到写入器。

CityGML详细级别

CityGML指定了5个不同的细节级别(lod),范围从0(一般拓扑)到4(详细的建筑特征和家具)。大多数特性可能包含不同lod的几何模型。LOD0通常模拟地形特征。LOD1模拟简单的棱柱形建筑和一般的景观特征。L0D2在建筑模型中加入了一些建筑功能,在交通、植被和户外家具功能中加入了更详细的细节。LOD3模拟建筑物和户外物体的实际样子。LOD4模型详细描述了内部结构。

为了使各种应用程序能够正确地解释一个特性的多个几何图形,GML几何图形被包含在指示几何图形角色的元素中。如下图所示,LOD2的一个具有实体几何体的建筑特征:

< cityObjectMember >

<建筑:建筑gml: id =“building890384”>

<建筑:lod2Solid >

< gml:固体gml: id =“aebd7312”>

...

CityGML特征类型中的FME几何图形必须被标记为它们预期的几何角色,以便正确地写出来。几何角色是通过几何特征“citygml_lod_name”指定的。表1给出了每个特征类型的有效几何角色,表2显示了每个几何角色的有效FME几何类型。

在Workbench中设置几何角色

可以同时使用AttributeCreator和GeometryPropertySetter转换器设置几何角色。

我们在这里使用AttributeCreator的原因是将citygml_lod_name设置为一个属性,然后使用GeometryPropertySetter将其转换为一个特征。

因为我们已经为几何角色传递了一个有效的FME几何形状(一个“lod2Solid”的挤压),所以我们最终在输出中获得了一个包含该几何形状的Building功能:

< cityObjectMember >

<建筑:建筑gml: id =“boring_building_11”>

<建筑:lod2Solid >

< gml:固体srsDimension = " 3 " >

...

所有其他特定于CityGML的属性也可以通过AttributeCreator在FME特性上轻松设置,尽管许多这些属性有一组在CityGML外部代码列表中定义的受限制的值。详见表1-4。

向一个特性写入多个几何角色

为一个特性创建额外的几何角色并不难。简单地标记相同或任何其他具有适当角色的几何图形的副本,并将该功能的所有几何图形聚合为一个单一的几何图形:

以下是CityGML的道路功能:

< tran:道路gml: id = " 2 nd_west_boring_street " >
< tran: lod0Network >
< gml: LineString srsDimension = " 3 " >
 12 0 0 12 12 0 0 12 0
< / gml: LineString >
< / tran: lod0Network >
< tran: lod1MultiSurface >
< gml:多面srsDimension = " 3 " >
< gml: surfaceMember >
< gml:多边形>
< gml:外观>
< gml:线性>
13 0 0 11 0 0 11 11 0 0 11 0 0 13 0 13 13 0 0 0
< / gml: posList >
< / gml:线性>
< / gml:外观>
< / gml:多边形>
< / gml: surfaceMember >
< / gml:多面>
< / tran: lod1MultiSurface >
< tran: lod2MultiSurface >
<!——与lod1MultiSurface相同的gml:MultiSurface——>
< / tran: lod2MultiSurface >
> < / tran:路

一般来说,LOD2的几何图形应该比LOD1的几何图形有更多的细节,但是在这个例子中使用相同的几何图形是可行的。在这条路的情况下,它可能有额外的曲线代表道路的独立车道。

工作台中的几何验证

注意,在上面的例子中,我们将一个多边形标记为lodXMultiSurface,尽管它只代表一个区域。CityGML编写器将检查FME几何图形是否可以作为指定的几何图形角色输出。如果不能,而且很容易将几何图形转换为有效的类型,则编写器将进行转换。例如,我们的多边形被转换成一个表面,然后包裹在一个多表面中。如果FME几何图形对指定的几何角色无效,并且不能转换为有效的几何图形(例如。一个点标记为“lod3multiccurve”),它将不会被写出来。

设置CityGML属性和FME属性

CityGML特征的非几何属性和属性是通过FME特征类型的某些属性指定的。这些属性中的大多数都以“citygml_”作为前缀。例如,FME Building特性的“citygml_屋面_type”属性的值将被写成CityGML Building特性的“屋面类型”元素的值。

CityGML特性类型的有效属性的完整列表将出现在从包含这些特性的CityGML文档导入特性类型所定义的特性类型上。

大多数接受字符串值的CityGML属性和属性都具有CityGML外部代码列表中列出的有效值枚举列表。例如,对于建筑特征的“屋顶类型”元素,“1070”表示亭子屋顶。FME中的CityGML特性的相应属性应该设置为这些有效值之一,尽管FME目前没有对这些值进行验证。

从FME写CityGML出场

FME 2010支持CityGML外观的读写。在FME中,Appearance对象存储在公共库中,表面包含应用于它们的Appearance的引用。FME外观包含关于常量(材料)和非常量(纹理)表面属性的信息。任何被传递到CityGML Writer的表面引用的FME外观都将被写为ParameterizedTexture或X3DMaterial,这取决于外观是否包含纹理信息。在ParameterizedTexture或X3DMaterial特性被传入的情况下,作者将尝试重用任何现有的元素(例如。在CityGML到CityGML的转换过程中)。在本例中,元素将作为原始CityGML外观的成员写出来,并置于其原始主题之下。如果必须创建新元素,它们将是CityModel下的新Appearance的成员。默认的主题名是“FMETheme”,但是它可以通过高级工作台参数“theme name”更改。ParameterizedTexture和X3DMaterial元素可以属于同一个主题,即使在不同的外观特征下。

如果任何引用的FME外观包含纹理信息,图像文件将被写入目标文件夹的子文件夹。按照CityGML惯例,这个文件夹默认命名为“appearance”。文件夹名称可以通过高级工作台参数“纹理子文件夹”指定。

CityGML功能层次结构

许多CityGML功能是其他功能的聚合。在FME中,可以通过“gml_id”和“gml_parent_id”属性指定这种关系。子元素的“gml_parent_id”的值应该与父元素的“gml_id”的值相等。id属性对于CityGML文档中的所有特性必须是唯一的。使用UUIDGenerator变压器将确保这些值是惟一的,但是它们必须以非数字字符作为前缀。注意,CityGML Writer将为它所写的所有特性动态生成gml:id属性值(基本上使用下面所示的相同方法),所以除非必须访问gml_id属性的值,否则没有必要使用这些转换器。

该工作区生成以下输出:

<建筑:建筑gml: id =“exciting_building_123”>
<建筑:boundedBy >
<建筑:RoofSurface gml: id = " uuid_47be0fd6 - ccec - 45 - ab - 96 f7 - 0868 ff9208d0”>
<建筑:lod3MultiSurface >
...
< /建筑物:lod3MultiSurface >
< /建筑物:RoofSurface >
< /建筑物:boundedBy >
<建筑:boundedBy >
<建筑:WallSurface gml: id = " uuid_dafb5306 - 41 - aa - 4 - e07 - 8 f58 - 80874167 - a2a7”>
<建筑:lod3MultiSurface >
...
< /建筑物:lod3MultiSurface >
< /建筑物:WallSurface >
< /建筑物:boundedBy >
<!——三个WallSurfaces >
< /建筑:建筑>

有效的几何角色列表

注意:“citygml_lod_name Value”只需要列出的值中的一个。

表1:CityGML特征类型的有效LOD类型

CityGML功能类型

citygml_lod_name价值

GenericCityObject

lod(0 - 4)几何

lod (0 - 4) TerrainIntersection

地址 多点

建筑

BuildingPart

lod固体[1 - 4]

lod[1 - 4]多面

lod[2 - 4]多曲线

lod [1 - 4] TerrainIntersection

BuildingInstallation lod[2 - 4]几何学

RoofSurface

WallSurface

GroundSurface

ClosureSurface

FloorSurface

InteriorWallSurface

CeilingSurface

lod[2 - 4]多面

窗口

lod[3 - 4]多面
房间

lod4Solid

lod4MultiSurface

BuildingFurniture

IntBuildingInstallation

lod4Geometry
严禁

lod(0 - 1)多曲线

lod(0 - 1)多面

lod固体[1 - 4]

WaterSurface

WaterGroundSurface

lod [2 - 4]

TransportationComplex

跟踪

铁路

广场

lod0Network

lod[1 - 4]多面

TrafficArea

AuxiliaryTrafficArea

lod[2 - 4]多面
SolitaryVegetationObject lod[1 - 4]几何学
PlantCover

lod[1 - 4]多面

lod [1 - 3] MultiSolid

CityFurniture

lod[1 - 4]几何学

lod [1 - 4] TerrainIntersection

土地利用 lod(0 - 4)多面
GeoreferencedTexture referencePoint
TINRelief 程度上
MassPointRelief reliefPoints
BreaklineRelief

ridgeOrValleyLines

破裂线

NoiseRoadSegment

NoiseRailwaySegment

NoiseCityFurnitureSegment

lod0BaseLine

表2:citygml_lod_name属性值的有效几何图形

LOD的名字

FME几何图形有效:

GML几何

lod0Geometry

lod1Geometry

lod2Geometry

lod3Geometry

lod4Geometry

relativeGMLGeometry

几何

除了null、光栅和空聚合

gml: GeometryType

lod1MultiSolid

lod2MultiSolid

lod3MultiSolid

所有的固体

所有表面

表面或区域的均匀聚集物

gml: MultiSolidType

lod0MultiSurface

lod1MultiSurface

lod2MultiSurface

lod3MultiSurface

lod4MultiSurface

所有表面

各领域的

表面或区域的均匀聚集物

gml: MultiSurfaceType

lod0MultiCurve

lod1MultiCurve

lod2MultiCurve

lod3MultiCurve

lod4MultiCurve

所有表面

所有的固体

线、弧、面或固体的均匀聚集体

gml: MultiCurveType

lod1Solid

lod2Solid

lod3Solid

lod4Solid

所有的固体

所有表面

包含单一固体或表面的聚集体

gml: SolidType

lod2Surface

lod3Surface

lod4Surface

所有表面

各领域的

包含单一表面或面积的聚集体

gml: SurfaceType

lod0TerrainIntersection

lod1TerrainIntersection

lod2TerrainIntersection

lod3TerrainIntersection

lod4TerrainIntersection

所有表面

所有的固体

线、弧、面或固体的均匀聚集体

gml: MultiCurveType
lod0Network

所有的点

各领域的

所有表面

所有的固体

包含单个

点、线、弧、面积、表面或实体

gml: GeometricComplexType
噪声:lod0BaseLine(移动我)

包含单线或弧线的聚合体

gml: CurveType
referencePoint

包含单点的聚合

gml: PointType
reliefPoints

点的同质聚集

gml: MultiPointType
程度上

长方形脸

各领域的

包含单个面、矩形面或区域的聚合体

gml: PolygonType
ridgeOrValleyLines

所有表面

所有的固体

线、弧、面或固体的均匀聚集体

gml: MultiCurveType
破裂线

所有表面

所有的固体

线、弧、面或固体的均匀聚集体

gml: MultiCurveType
多点

包含单点的集合

gml: MultiPointType

表3:CityGML特性角色

CityGML功能类型

citygml_feature_role价值

外观

外观*

appearanceMember *

GeoreferencedTexture

ParameterizedTexture

X3DMaterial

surfaceDataMember

TINRelief

MassPointRelief

BreaklineRelief

reliefComponent
BuildingInstallation outerBuildingInstallation
IntBuildingInstallation

interiorBuildingInstallation

roomInstallation

RoofSurface

WallSurface

GroundSurface

ClosureSurface

CeilingSurface

InteriorWallSurface

FloorSurface

建筑/ boundedBy * *
房间 interiorRoom
BuildingPart consistsOfBuildingPart
地址 地址

窗口

开放
BuildingFurniture interiorFurniture

WaterSurface

WaterGroundSurface

严禁/ boundedBy * *
TrafficArea trafficArea
AuxiliaryTrafficArea auxiliaryTrafficArea
噪声:NoiseRailwaySegment 噪声:noiseRailwaySegmentProperty
噪声:NoiseRoadSegment 噪声:noiseRoadSegmentProperty
噪声:NoiseCityFurnitureSegment 噪声:noiseCityFurnitureSegmentProperty
噪声:火车 的声音:“

表4:CityGML特性属性

CityGML父特性类型

有效的属性

所有特征类型

地址

X3DMaterial

ParameterizedTexture

GeoreferencedTexture

噪声:火车

外观*

appearanceMember *

外观 surfaceDataMember
ReliefFeature reliefComponent

建筑

BuildingPart

outerBuildingInstallation

interiorBuildingInstallation

建筑/ boundedBy * *

interiorRoom

consistsOfBuildingPart

地址

RoofSurface

WallSurface

GroundSurface

ClosureSurface

FloorSurface

InteriorWallSurface

CeilingSurface

开放
地址
房间

建筑/ boundedBy * *

interiorFurniture

roomInstallation

严禁 严禁/ boundedBy * *

TransportationComplex

跟踪

广场

trafficArea

auxiliaryTrafficArea

trafficArea

auxiliaryTrafficArea

噪声:noiseRoadSegmentProperty

铁路

trafficArea

auxiliaryTrafficArea

噪声:noiseRailwaySegmentProperty

CityFurniture 噪声:noiseCityFurnitureSegmentProperty
噪声:NoiseRailwaySegment 的声音:“

在CityGML v0.4中,作为其他特性属性的外观特性被包含在一个“Appearance member”元素中。在1.0版中,作为特性属性的外观包含在“app:appearance”元素中,但作为CityModel属性的外观包含在“app:appearance”元素中。

**

" boundedBy "是AbstractBuildingType和WaterBodyType的属性,尽管允许的值因模块而不同。这两个属性的可识别的“citygml_feature_role”值是“boundedBy”。