斯潘8
斯潘4
这个例子创建了一个简单的,我们的Interopolis 3DS模型中的纹理城市模型上一个示例.citygml是一个OGC标准化的GML应用程序模式,用于表示三维城市和景观。它是一种具有非常严格的对象类型的层次表示,它可以通过细节层次在一个文件中表示城市模型的多个层次。例如,您可以在一个单独的模型中以不同的细节级别拥有建筑模型和带有家具的建筑内部。
在前面的示例中,向三维城市模型添加不同的纹理,我们采用了Interopolis的3DS模型,在屋顶和墙壁上添加了不同的纹理,写一个三维PDF。现在,我们将采用相同的已完成工作区并对其进行修改,以创建一个纹理化的CityXML模型。
从下载部分下载3ds-to-3dfd-textures.fmwt作为开始工作区,并在fme工作台中打开它。这是的已完成工作区上一个示例.我们将在此基础上创建一个纹理化的citygml模型。
将Adobe PDF编写器替换为CityXML编写器。添加CityXML编写器时,参数设置如下:
下一步,移除最后一个几何体,因为我们不再希望将所有对象组合为一个网格。citygml的数据模型将允许我们将屋顶和墙壁作为建筑对象的子对象来分隔。
每个CityXML功能都需要一个唯一的ID。我们将使用buildingID属性,跟踪哪些特征是哪个建筑的一部分,为我们的“建筑”功能类型创建ID。citygml功能ID不能以数字开头,所以我们将使用字符串连接符 在建筑物ID之前预加字符串“gml_uuu”。将聚合器输出端口连接到StringConcatenator。
键入“GMLYID”对于“new attribute”。对于管柱部件,连接:
弦零件 | 字符串值 |
常数 | GMLY |
属性值 | 建筑标识 |
我们实际上不想写任何几何图形到citygml建筑物特征类型。相反,我们只想创建一个空的高级类,该类将成为屋顶和墙表面的父ID属性。如果我们愿意的话,这个ID将允许我们将建筑物的屋顶和墙面组合在一起。我们将通过连接几何去除剂到StringConcatenator。
将几何图形移除器的输出端口连接到建筑特征类型。
在接下来的几个步骤中,我们将创建自定义转换器。
我们需要将每个建筑的所有墙组合成一个单一的多曲面几何体。附加一个聚合器到“墙纹理外观”的输出端口,确保将“分组依据”设置为建筑标识.
CityXML功能需要定义其详细程度和几何类型。在FME中,这些信息存储在几何特征中。在我们给几何添加特征之前,我们需要使用属性创建器.如下表所示填写参数。
属性名 | 价值 |
城市级细节 | 二 |
城市名 | LOD2多表面 |
城市角色 | 有界的 |
现在我们已经将几何体类型存储在属性中了,我们需要使用几何特性分析器.几何特征与属性相似,但是存储在几何体中,而不是在它旁边。下源属性,选择城市名.
citygml要求每个功能都有一个唯一的ID。这个紫外线发生器将创建唯一ID并将其分配给属性,uuu.
UuidGenerator创建以数字开头的唯一ID,在citygml中无效。类似于上面的建筑等级,我们将使用字符串连接符在每个ID的开头添加“gml_uuu”。在参数中,命名新属性:“GMLYID”,并按下表设置字符串部分:
字符串类型 | 字符串值 |
常数 | GMLY |
属性值 | 乌鲁伊德 |
串联结果,当您填写了参数后,会自动生成该参数,如下所示:
gml_uid值(uid)
我们需要定义父功能的ID,使FME能够在citygml模型中正确地构建层次结构。我们需要复制为上面的building类创建的gml_id。添加另一个StringConcatenator。将“新属性”重命名为'gml_父级\u id'.设置字符串部分如下:
字符串类型 | 字符串值 |
常数 | GMLY |
属性值 | 建筑标识 |
连接结果:
gml_u@value(buildingID)
确保墙壁外观设置输出端口连接到聚合器_2。从步骤6(聚合器2)到11(字符串连接器3)选择所有变压器。右键单击并选择“创建自定义转换器”。说出它的名字CITGYMLBu建器,将category设置为3d,然后按OK。现在,您将在选项卡主菜单旁边的顶部功能区的选项卡中看到它。在这里,您将找到构成自定义变压器的变压器。
打开输入参数,聚合器输入。确保建筑标识签入“要公开的外部属性”。此步骤很重要,因为citygmlbuilder的最后一个StringConcatenator依赖于此属性作为其参数的一部分。因为属性是在自定义转换器外部创建的,在外部属性被公开之前,StringConcatenator不会将该属性识别为有效参数。
您可能会注意到您的变压器没有输出端口。要添加输出端口,右键单击画布,并选择插入变压器输出.将输出连接到字符串_concatenator_3。同样地,如果缺少输入,你也可以从这里添加一个。请记住检查buildingID是否在其参数中公开。
回到主选项卡,检查citygmlbuilder的参数,并确保属性buildingID也被选作用户参数中的属性。将输出连接到主工作区中的CityXML Feature类型的Wallsface。
选项卡中的自定义转换器,CityGMLBuilder。
复制自定义变压器并将其连接到车顶外观控制器的输出端口,将自定义变压器的输出端口连接到屋顶特征类型。
在运行工作区之前,请清除功能类型中的属性。在墙面特征类型参数,在用户属性中,删除除“citygml_feature_role”之外的所有属性。然后在格式属性中,确保城市名,GMLYID和gml_父级_id暴露。为…做同样的事屋面.对于建筑物特征类型,删除所有用户属性。确保在格式属性中显示gml_id,并在格式属性下取消选中citygml_lod_name和gml_parent_id。
运行工作区。在确保创建有效的citygml之后,在“导航器”窗口中的citygml writer参数下,请考虑将validate输出文件更改为no以提高性能。
删除不必要的属性。只保留已连接的属性(绿色三角形)。
生成的citygml输出显示在本机FzkViewer中。
如果使用fzkviewer查看,您将需要在源阅读器功能类型之后添加一个reprojector,跨国公司。将其重新投影到LL84。这一步是必要的,因为我们的数据目前在德克萨斯州的平面坐标系中。由于FzkViewer无法识别该坐标系,我们需要把它重新投影到一个它能识别的坐标系中,这样我们就能看到它。
如果要在FzkViewer中查看原始纹理,转到菜单栏中的“显示”,然后纹理,并选择“从实体”。
祝贺你!我们已经成功地将我们的3DS模型编写成一个纹理化的citygml模型。当模型在本地CityXML查看器中正确显示时,我们知道我们已经正确地写出了citygml的必要结构。
?2019安全亚搏在线软件公司|合法的