从BIM到GIS(高级)| IFC LOD 200转LOD 3 CityGML

从BIM到GIS(高级)| IFC LOD 200转LOD 3 CityGML

译文地址:

 

1、前言

本示例演示了将更复杂的LOD 200 IFC模型高级转换为LOD3 CityGML文档的方法。输出结果为LOD2和LOD3表示的Riverside Building数据。

2、详细步骤

2.1下载数据

本练习将使用DC Riverside Building LOD 100 IFC以及DC Riverside Building ARCH 200 IFC数据文件,在开始之前,请从Vectorworks网站下载LOD_100数据LOD_200数据(文末有链接)。

2.2读取数据

在本示例中,将使用Revit读模块用于读取LOD 200 IFC数据。这种方法的优势在于,该读模块提供了“具有层次结构的建筑元素”的参数选项,该选项可组合并公开建筑元素的属性,使用户可以更轻松地将Revit读模块读取的几何要素写入GIS之类的表示形式,例如CityGML文件格式。

具体操作为,将Autodesk Revit读模块添加到空白工作区,然后浏览并选择DC_Riverside_Bldg-ARCH-LOD_200.ifc数据集作为输入数据集。在参数设置中,确保将Revit Data View设置为“具有层次结构的建筑元素”选项即可。

AutoDesk Revit 读模块参数设置

在之后的弹窗中,请选择BuildingColumnStair,BuildingElementProxy,Door,Member,Opening,Slab,StairFlight,Wall和Window作为您要读取的要素类型。您的工作区界面上应该具有以上九种要素类型。

2.3按CityGML要素类型分组

了解CityCML格式文档的特定要素类型对应了IFC模型的哪些建筑元素或层是十分必要的。有时,一个CityGML要素类型对应了多个建筑物元素,在这种情况下,将它们通过公共ID进行合并,它们就可以一起汇集到同一要素类型。而由于IFC数据的元素ID不能作为有效的GML ID,因此我们将为每个要素创建新的GML ID。此外,每个要素还要具备一个属性,可以使要素通过该属性与其父类的GML ID(建筑物要素类型)结合起来。

具体操作为,在工作区界面上添加AttributeCreator转换器,并将其连接到StairFlight和BuildingElementProxy要素类型。在参数设置中,将_BldgInstallations作为“转换器名称”,然后创建一个名为feature_type的新属性,并为其赋值为BuildingInstallation,创建一个名为parent_name的新属性,并为其赋值为dc_riverside_building,最后,创建一个名为_uuid的新属性,并将其赋值为gml_ @ UUID()

使用AttributeCreator创建三个新属性

 

复制AttributeCreator转换器,并将其连接到BuildingColumn和Member要素类型。在参数设置中,将_BldgParts作为“转换器名称”,然后将feature_type的值更改为BuildingPart。

再复制AttributeCreator三遍,并按如下所示进行参数设置:

 

目前,Opening要素类型暂时保持未连接状态。

每种要素类型的AttributeCreator参数和连接

2.4缩放并创建坐标系

该模型当前以毫米为单位,我们需要先将其单位缩放为米。具体操作为,在工作区界面上添加一个Scaler转换,并将其与所有AttributeCreators进行连接,在参数设置中,将X,Y和Z设置为0.001。

虽然IFC数据中并没有存储坐标系信息,但我们仍能够使用LocalCoordinateSystemSetter转换器通过自动生成局部参考系(AZMEA)来标记所有要素。具体操作为,将LocalCoordinateSystemSetter添加到工作区界面,并将其连接到Scaler转换器,在参数中,设置以下内容:

原点XYLocalCoordinateSystemSetter参数

最后,按需求更改坐标系。具体操作为,将CsmapReprojector转换器添加到工作区,并将其连接到LocalCoordinateSystemSetter。在参数设置中,将“目标坐标系”设置为EPSG:2248,并将“垂直处理”设置为“相对于椭圆体或地心的高度”。

2.5创建建筑物要素类型

IFC模型的层次结构通常比CityGML格式文档的层次结构更为复杂。在此示例中,我们以简化的方式组装CityGML模型,除了Opening之外,所有建筑元素都是建筑要素类型的子元素。

具体操作为,将Industry Foundation Class STEP文件(IFC)读模块添加到工作区,然后浏览并选择DC_Riverside_Bldg-LOD_100.ifc作为输入数据集。在参数中,将“读取IfcSpace几何形状”选项设置为“是”,而在随后的“选择要素类型”对话框中,仅选择IfcSpace和IfcSlab。

IFC读模块参数;将Read IfcSpace Geometry设置为Yes

接下来,我们需要创建一个格网。具体操作为,在工作区添加一个Triangulator转换器,并将其连接到IfcSpace和IfcSlab要素类型,在参数设置中,确保将“汇总处理”设置为“分解”。之后,将MeshMerger转换器添加到工作区,并将其连接到Triangulator上的TINSurface输出端口即可。

Triangulator连接到IfcSlabIfcSpace,将MeshMerger连接到TINSurface输出端口

2.6创建CityGML属性

由于可以从CityGML_feature_types.xml文件中直接导入所有要素类型架构,所以我们无需创建每一个CityGML要素类型。CityGML_feature_types.xml文件可以在Safe FME安装的XML文件夹中找到,要创建CityGML文档,设置有效的几何形状,要素角色以及每个要素的细节级别是十分重要的。我们必须将几何角色设置为几何上的特征,而CityGML写模块将使用该特征来为要素创建正确并有效的几何。而要素角色和细节级别将被设置为属性。

具体操作为,将CityGMLGeometrySetter自定义转换器添加到工作区,并将其连接到MeshMerger。该自定义转换器可创建遵循严格命名规则的CityGML要素角色和细节级别属性。使用该转换器可以防止由于区分大小写产生的错别字,在参数设置中,将CityGML Lod Name设置为lod2Solid,然后将Feature Role设置为cityObjectMember。

之后,添加AttributeCreator到工作区,并将其与CityGMLGeometrySetter进行连接,在参数设置中,创建以下属性:

2.7将建筑物要素写入CityGML

突出显示并复制Scaler,LocalCoordinateSystemSetter和CsmapReprojector转换器,并将Scaler_2与IfcSpace和IfcSlab工作流中的AttributeCreator转换器进行连接。

之后,将CityGML写模块添加到工作区,然后选择要保存的文件夹位置,将文件命名为riverside_lod3.gml,然后将“特征类型定义”设置为“自动”,并默认其余参数设置,点击确定。接下来,在弹出的“要素类型”窗口中,将“要素类型名称”更改为“building”,设置好后,将写模块连接到CsmapReprojector_2即可。

CityGML中创建建筑物的工作流程

2.8挂接父类gml_id

接下来,将建筑物元素与建筑物进行挂接。具体操作为,将FeatureMerger转换器添加到工作区,将Building Elements工作流中的CsmapReprojector转换器连接到Requestor输入端口,然后将IfcSpace和IfcSlab工作流中的AttributeCreator连接到Supplier输入端口。

Revit 读模块和IFC读模块工作流汇入FeatureMerger

 

在参数设置中,将挂接选项中的“Requestor”设置为parent_name,然后将“Supplier”设置为gml_name。之后,将属性累积模式设置为Prefix Supplier,然后设置前缀为suppl_。

FeatureMerger参数;挂接parent_namegml_name,并将Prefix设置为suppl_

2.9保留和新建属性

当前我们的数据带有许多不需要读取的属性,我们需要进行选择性的保留。具体操作为,将AttributeKeeper转换器添加到工作区,并将其连接到FeatureMerger上的合并输出端口,然后仅选择以下属性予以保留:

  • _uuid
  • Element_id
  • element_parent_id
  • feature_type
  • name
  • Peset_SlabCommon.IsExternal
  • suppl_gml_name

AttributeKeeper参数

之后,将AttributeCreator添加到工作区并将其连接到AttributeKeeper,在AttributeCreator参数中设置以下内容:

2.10 属性过滤

所有要素都已经接收到对应的CityGML属性,现在我们需要根据要素类型来设置样式,使用AttributeFilter转换器分离出要素类型。具体操作为,先将AttributeFilter转换器添加到工作区,并将其连接到AttributeKeeper,在参数设置中,将“过滤属性依据”设置为feature_type,然后在“可能的属性值”类型栏输入以下内容:

  • BuildingInstallation
  • BuildingPart
  • Floor_Roof
  • Wall
  • Windows_Doors

AttributeFilter参数以分离出要素类型

 

2.11  Building Installations和Building Parts

Building Installations和Building Parts的规范因所选的几何形状和要素角色而异。要编写出有效的CityGML文档,我们必须知道哪些角色对于某些要素类型是有效的。Building installations是CityGML中限制最小的几何角色之一的示例,任意GML几何形状都可以表示lod3Geometry,而Building Part则受限于lod3Solid,lod3Multisurface,lod3Multicurve和lod3TerrainIntersection。对于从IFC到CityGML的转换,lod3Mulitsurface可能是最安全的选择,因为如果使用lod3Solid,则某些要素可能无法建立有效的实体几何形状。

将CityGMLGeometrySetter添加到工作区,并将其连接到AttributeFilter上的BuildingInstallation输出端口。在参数设置中,将CityGML Lod Name设置为lod3Geometry,并将Feature Role设置为outsideBuildingInstallation。

接下来,再在工作区添加一个ApperanceSetter转换器,并将其Geometry Input端口连接到CityGMLGeometrySetter_2。在参数中,展开“颜色参数”并将“外观名称”设置为“Installation”,将“贴图颜色”设置为0.317647、0.317647、0.317647,然后将“ Alpha”设置为1。

AppearanceSetter参数,设置外观名称,贴图颜色和Alpha

添加写模块要素类型并将其命名为BuildingInstallation,之后将它连接到AppearanceSetter的“输出”端口。

复制CityGMLGeometrySetter,AppeareanceSetter转换器以及写模块要素类型,并将它们连接到AttributeFilter上的Building Part输出端口。

接下来,在CityGMLGeometrySetter_3的参数中,将CityGML Lod名称更改为lod3MultiSurface,并将Feature Role更改为includesOfBuildingPart。在AppearanceSetter_2中,将“外观名称”设置为Part,将“贴图颜色”设置为黑色。最后,将写模块要素类型重命名为BuildingPart即可。

BuildingPartBuilding Installation 工作流

2.12  Roof, Walls, 以及Floors

在工作区中添加另一个CityGMLGeometrySetter转换器,这次将其连接到TestFilter(用于扇出Floor、Roof和Wall),以及AttributeFilter上的Wall输出端口。在CityGMLGeometrySetter参数设置中,将CityGML Lod名称设置为lod3MultiSurface,将Feature Role设置为boundedBy。

接下来,将要素拆分为各个部分。在工作区添加TestFilter转换器,在参数中,将第一个IF测试条件设置为“Name contains ROOF OR Pset_SlabCommon.IsExternal =Yes”,然后将“输出端口”设置为“Roof”;将Else If设置为“Name contains Wall”,将“输出端口”设置为“Wall”;最后,将其他输出端口设置为Floor。

设置TestFilter参数创建RoofWallFloor输出端口

接下来,添加一个AppearanceSetter并将Geometry输入端口连接到TestFilter的Roof输出端口。在参数设置中,将“外观名称”设置为Roof,将“贴图颜色”设置为Red,将“Alpha”设置为1。之后,添加另一个写模块要素类型,将其命名为RoofSurface,并将其连接到AppearenceSetter的输出端口。

复制AppearenceSetter和写模块要素类型,并将它们连接到TestFilter上的Wall输出端口。在AppearanceSetter参数中,将Appearance Name更改为Wall,将颜色更改为浅黄色。将写模块要素类型重命名为WallSurface。

再次复制AppearenceSetter和写模块要素类型,并将其连接到Floor输出端口,在AppearanceSetter参数中,将“外观名称”更改为Floor,将颜色更改为棕色,然后将写模块要素类型重命名为FloorSurface。

       Roof, Walls, Floors写入CityGML要素类型的工作流

​​​​​​​2.13  保留层次

IFC模型的开放层可以为每个门、窗提供其所属墙的元素ID。要将这个为2的层次结构转换为CityGML中所需的层次结构,我们需要进行两个挂接。

首先是挂接先前与Wall一起添加的Opening要素类型。具体操作为,将FeatureMerger添加到工作区,并将其Supplier输入端口连接到AttributeFilter中Wall输出端口。然后将“Opening要素类型”连接到Requestor输入端口。在参数中,将“Requestor”设置为element_parent_id,将“Supplier”设置为element_id。然后将“属性累积模式”设置为“Prefix Supplier”,并添加前缀为suppl_wall_。

之后,再添加一个FeatureMerger到工作区,并将AttributeFilter上的Windows_Doors输出端口连接到Requestor输入端口,然后将上一个FeatureMerger的合并输出端口连接到Supplier输入端口。在参数设置中,将“Requestor”设置为element_parent_id,将“Supplier”设置为element_id。然后将“属性累积模式”设置为Prefix Supplier,并添加前缀为suppl_。

Opening保留层次的工作流

​​​​​​​2.14  Windows和Doors

创建门窗要素的最后一步是设置CityGML格式属性和应用外观。具体操作为,添加一个AttributeCreator,并将其连接到FeatureMerger_3的合并输出端口。在参数中,设置以下内容:

之后,添加一个GeometryPropertySetter并连接到AttributeCreator,在参数中,将“源属性”设置为citygml_lod_name。

然后通过将Tester转换器添加到工作区中,并将其连接到GeometryPropertySetter上的Set输出端口上,实现对窗户和门的分离扇出。在Tester参数中,将测试条件设置为“Name=Window”。

分离门窗后,在工作区上添加一个AppearanceSetter,并将其连接到Tester的“Passed”输出端口,用于设置窗口的外观。在参数中,将“外观名称”设置为“Window”,并将“贴图颜色”设置为浅蓝色。为了使窗口外观具有类似于玻璃的透明效果,请将Alpha值设置为0.2,将Shinness值设置为1。

添加另一个写模块要素类型,将其命名为Window,并将其连接到AppearenceSetter的输出端口。

接下来,添加另一个AppearanceSetter,并将其连接到Tester的“Failed”输出端口,用于将设置门的外观。在参数中,将“外观名称”设置为“Door”,将“贴图颜色”设置为浅棕色,将Alpha值设置为1。

之后,添加另一个写模块要素类型,将其命名为Door,并将其连接到AppearanceSetter的输出端口。

 

 

 

整个完成的工作区

2.15   检查并验证CityGML文档

在运行工作区之前,请确保将“Rejected Feature Handling”设置为“Continue Translation”,然后运行工作区。

FME Data Inspector中查看的输出CityGML文件

3、验证方式

在Data Inspector中打开生成的CityGML文件以检查是否缺少几何形状或外观错误。而XMLValidator转换器则可用于验证一个CityGML文档。具体操作为,将一个Creator转换器连接到XMLValidator以开启验证,在XMLValidator参数中,选择CityGML文件作为输入,并选择适当的模式文件以进行模式验证。而对于CityGML 1.0,请使用:

<FMEHome> \ xml \ schemas \ CityGML \ CityGML \ 1.0.0 \ CityGML.xsd

如果在写入CityGML时发现错误或几何遗失,则还可以使用GeometryValidator转换器,在写入要素之前对输出数据中的2D和3D几何图形错误进行检查。该转换器甚至还有修复选项,但用户应谨慎使用该功能,并验证修复结果,因为任何修复都有可能引入新的错误。

 

数据来源

Riverside Building项目演示数据由Nemetschek Vectorworks制作并提供。

 

资源下载地址:

链接:https://pan.baidu.com/s/1Tp3RPy4jHDTeNlULoEQi0g 
提取码:2020

 

猜你喜欢

转载自blog.csdn.net/fmechina/article/details/108405852
LOD