span8
span4
由于有各种限制区域、多个航站楼和时间限制,在机场中穿行对任何人来说都是一个挑战。特别是乘客,他们需要快速高效地到达目的地。苹果的室内地图计划可以帮助乘客在大型机场导航,但要添加这样的地图需要将数据转换成苹果的室内地图数据格式(IMDF).
在这个场景中,您将了解如何将维多利亚机场的地图数据(Esri地理数据库)转换为IMDF。在本例的最后,您将完成数据转换步骤,以生成准备发布到Apple Maps的数据集。
注:这个例子展示了如何处理来自维多利亚机场的数据。您自己的源数据可能在结构和格式上有所不同,因此需要不同的转换技术。
FME 2018.1 +
Python安装
ATB-PublicData.zip数据是©维多利亚机场管理局
中等FME技能水平
了解IMDF规范
所提供的数据包含在三个不同的地理数据库中,分别对应机场的每一层。这些地理数据库包含整个机场结构的数据。由于我们只对机场布局和重要功能(如安全区、登记柜台和行李传送带)的映射感兴趣,所以我们可以减少读取的功能类型(功能类)的数量。
我们感兴趣的功能类型有:
处理前在FME数据检查器中查看的上述特性类型
这个场景尽可能详细,同时仍然保持可读性。要了解更多关于每个transformer的具体参数,请参考完成的工作区。
源数据概述下列出的特性类型已经使用文件Geodatabase(文件Geodb开放API)阅读器添加到工作空间中。对于某些特性类型,它只有一个实例(即其他的有两到三种;这是因为这些功能存在于多个楼层。
每个特性类型在准备写入IMDF之前都需要进行清理。清洗包括地理标记、清洗几何图形、创建id和操作属性。下面的小节将详细介绍为每种功能类型完成哪些步骤。
亚搏在线ATB_SURROUND的数据清理工作流程
建筑ID是从ATB_SURROUND数据创建的。采样器选择一个单一的环绕特性,UUIDGenerator创建ID,而VariableSetter创建一个名为building的变量,并赋予它ID的值。
该变量在整个工作区中都被引用。如果稍后在工作空间中使用带有特性缓存的Run,请确保VariableSetter是任何部分运行的一部分,否则工作空间将失败。
在独立于ID变量创建的流中,使用溶解器将周围区域溶解为单个多边形。然后,使用DonutHoleExtractor,将建筑物上的甜甜圈洞移除。最后,数据通过ApplyGeoreferencing自定义转换器运行,该自定义转换器旋转、偏移、缩放并设置一个坐标系统。此自定义转换器将在整个工作区中多次使用。
在ApplyGeoreferencing自定义变压器的参数是:
ATB_SURROUND的前后数据清理。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线安全/SECURITY_LINE的数据清理工作流程
首先,使用ArcStroker转换器将arc几何图形转换成直线,然后使用GeometryRefiner压缩几何图形。接下来,使用Deaggregator拆分聚合行并关闭小间隙。Snapper和LineCloser的组合用于将行组合成单个行,每个级别一个。最后,使用ApplyGeoreferencing自定义转换器对数据进行地理定位。
安全/SECURITY_LINE的前后数据清理。粉红色的线是一楼的安全线,紫色的线是二楼的安全线。三楼没有安全线。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线开放的数据清理工作流程
对于开口,首先需要做的是所有三层的开口都需要使用ApplyGeofreferecing定制变压器进行地理定位。
亚搏在线建筑/墙壁多边形和建筑/房间的数据清理工作流程
所有这三种架构/墙壁多边形特征类型都连接到AttributeCreator转换器,以创建具有结构值的类别属性。然后使用ApplyGeoreferencing自定义转换器对其进行地理定位。接下来,使用ArcStroker、Deaggregator、GeometryRefiner和Snapper的组合清理几何图形。然后使用AreaGapAndOverlayCleaner和另一个Deaggregator删除任何间隙或重叠。使用空间过滤器和测试器,任何单独的墙壁或非公共区域都会被过滤掉。
使用采样器、UUIDGenerator和可变变压器的组合为每个房间创建另一个变量。该变量使用fme_basename值,该值表示机场的级别(ATB1、ATB2和ATB3)。在第二个数据流中,使用AttributeValueMapper对房间(单位)类别基于NOTES属性。房间类型如下:
在AttributeValueMapper之后,通过ApplyGeoreferencing custom transformer将数据连接到体系结构/墙壁多边形工作流。亚搏在线
前建筑/墙壁多边形&前建筑/房间数据清理和合并多边形后数据清理。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线架构/计数器的数据清理工作流程
柜台是非常详细的图纸在每个登记柜台在机场。每个都需要它们所居住的房间的属性,这最好使用简化的几何图形来完成。首先,几何提取器转换器记录原始(详细)数据的副本,然后使用CenterPointReplacer为每个计数器创建一个简单的中心点。接下来,使用SpatialFilter,将房间属性合并到每个登记柜台。使用GeometryReplacer从GeometryExtractor检索存储的几何图形。
VertexCounter和AggregateFilter用于对数据进行筛选排序。然后使用TestFilter过滤数据:
过滤数据之后,使用TestFilter上的每个输出端口的AttributeCreator创建一个新类别。
登记亭和移民服务台都被发送到名为MakePolygon的自定义转换器,该自定义转换器使用多个几何转换器生成多边形。签到台和安全设备被发送到一个BoundingBoxReplacer,以将几何图形简化为一个矩形。最后,使用ApplyGeoreferencing自定义转换器对计数器进行地理定位。
亚搏在线架构/旋转木马的数据清理工作流程
一个测试变压器是用来提取行李提取传送带从所有不同的传送带功能。然后使用AttributeCreator创建类别和名称。然后使用ArcStroker、Snapper和AreaBuilder为每个carousel创建多边形。旋转木马被路由到连接到计数器工作流的相同的ApplyGeoreferencing自定义转换器。亚搏在线最后,国际行李和国内行李都使用中央传送带,这是根据既定的时间表,需要添加的信息。一个reaBuilder_2还连接到体系结构/PUBLIC_AMENITY数据清理工作流,以添加此调度信息。亚搏在线
架构/计数器和架构/旋转木马的前后数据清理。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线架构/PUBLIC_AMENITY的数据清理工作流程
中心行李提取区设有传送带,可通过移动的墙壁在国内和国际之间切换。维多利亚机场已经提供了旋转木马使用的时间表。
为了模拟这一点,为联合旋转木马创建了两个设施:一个供家庭使用,另一个供国际使用。时间表是为每一种使用类型在适当的礼仪。
AttributeKeeper只保留行李传送带名称和fme_basename属性。然后用PointOnAreaOverlayer将行李传送带设施覆盖在行李传送带多边形上,并合并属性。测试仪用于查找国际/国内组合旋转木马。然后使用attributecreator来设置家庭日程。offetter用于创建第二个设施,以包含使用attributecreator创建的国际日程表。最后,所有建筑/公共设施功能类型都使用applygeoferencement自定义转换器进行地理参照。
使用锚定捕捉器,安全/安全线、开口、建筑/柜台和建筑/旋转木马都被捕捉在一起。建筑/墙多边形和建筑/房间功能是其他数据捕捉到的定位点。这会把安全线和固定装置卡在装置上。
然后使用捕捉器,使用分段捕捉将安全顶点捕捉到单位边界。所有多边形功能之间的公共顶点确保在导航应用程序中查看数据时以及在向imdf写入数据时将数据重新投影到纬度/经度时,数据在视觉上对齐。
关闭basemap查看的快照功能
使用捕捉器,将使用分段捕捉将安全顶点捕捉到单位边界。在snaper之后,使用featuretypefilter将特征过滤回各自的类型。
一旦数据是干净的,就需要在编写之前按照imdf规范进行准备。这意味着需要向每个特征添加唯一的id,几何体类型必须正确,并且所有属性都遵循适当的命名约定。当写入IMDF时,FME写入程序自动将数据重新投影到LL84坐标系。
由于下一节的复杂性,过程描述可能会引用尚未提及的特征类型和变压器。为了清楚起见,建议在阅读时打开示例工作区。
亚搏在线准备向IMDF写场地的工作流程
这个地点是包含必须具有ID且必须是多边形的建筑的边界。
要创建场地,将使用UuidGenerator创建唯一的ID。然后使用attributecreator创建关于场地的特定属性。这些属性包括建筑物的名称、类别、网站、备用名称、小时和电话号码。设置类别时,必须遵循特定的命名约定。见苹果室内地图数据格式单元分类文档欲了解更多信息。
接下来,地址id使用featuremerger合并到场馆id上。然后使用centerpointextractor创建一个中心点。然后使用室内地图数据格式(imdf)编写器写出场地。
在FME数据检查器中查看场地的输出。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线工作流程准备写出来的地址和建筑物外的IMDF
这个地址必须具有ID且必须具有空几何体的邮政地址。
要创建地址,将使用UuidGenerator创建唯一的地址ID。然后将地址id重命名为id,使用attributenamer,这是为了与场馆id合并。接下来,使用attributecreator创建address属性,这包括街道地址、地点(城市或城镇名称)、省(或州)、国家和邮政编码(或邮政编码)。然后把地址写给同一个imdf作者,作为地点。这可以通过转到writers>add feature type,然后在featuretype对话框中将featuretype名称重命名为address,并确保选择了imdf writer来轻松完成。
在FME数据检查器中查看地址的输出
这个建筑是包含在场馆内的物理建筑,必须具有ID并且必须具有空几何体。此要素类型仅存储属性信息,实际建筑多边形存储在示意图要素类型中。
使用先前创建的地址id,attributecreator用于创建建筑名称和类别。然后使用variablereriever检索用atb_surround创建的建筑id。使用centerpointextractor transformer创建一个中心点,它将作为属性存储,然后使用同一个writer将建筑写入imdf。
在FME数据检查器中查看的建筑物输出
亚搏在线准备向IMDF写入级别的工作流
这个水平表示建筑的每一层(或楼层)。级别必须具有ID并且必须是多边形。
在特征型过滤器中,所有单元使用溶解器溶解成水平;在这种情况下,将创建三个级别。然后使用两个变量检索器,检索级别ID和建筑ID。使用StringSearcher,从fme_basename中提取级别号;这是因为每个起始的地理数据库代表一个级别(atb1、atb2、atb3)。
attributecreator用于创建特定于每个级别的属性,包括类别、级别是否在室外(是/否)、序号、级别名称和短名称。然后提取中心点并将空名称和短名称属性映射到
在FME数据检查器中查看的级别的输出。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线准备将封装外形写入IMDF的工作流
这个足迹是建筑物的近似多边形。封装外形必须有一个ID,并且必须是多边形。
连接到创建级别属性的AttributeCreator,使用AttributeRemover删除级别名称。然后使用TestFilter,将层次按序数(空中、地面和地下)组织起来。一个连接到空中和地面输出端口的溶解器被用来将水平面溶解成脚印。然后用一个油炸圈饼提取器来去除任何炸出的洞。然后使用一个AttributeCreator来给出航迹的类别。
接下来,将AttributeCreator连接到TestFilter上的地面输出端口,以向足迹提供地面的类别。
最后,将另一个溶解器DonutHoleExtractor和AttributeCreator连接到TestFilter上的地下输出端口,并将足迹指定为地下类别。
然后将所有三个AttributeCreators连接到UUIDGenerator,创建一个footprint_id,然后将其写入IMDF。
在FME数据检查器中查看的封装外形输出。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线准备将地理围栏写入IMDF的工作流
一个地理围栏通过设置限制分隔一个或多个区域。就机场而言,这将是安检前和安检后的工作。地理围栏必须有一个ID,并且必须是一个多边形。
一个扇区之间的转换器被连接到创建级别属性的AttributeCreator,该属性用于通过安全线分隔单元。然后使用一个AreaBuilder为安全线两边的每一层创建新的多边形。然后使用GeometryExtactor保存几何图形;这样做可以在不影响几何形状的情况下操作属性并与其他属性合并。CenterPointReplacer用于创建一个包含每个多边形的所有属性的单点。然后使用裁剪器裁剪该点,只保留级别内的新多边形。LeftRightSpatialCalculator用于确定每个多边形落在安全线的哪一侧,这是根据fme_basename进行分组的,因此它将每个级别分隔开来。使用列表检索器对多边形进行分类;如果多边形在直线的右边,则为安全前,如果在左边,则为安全后。然后使用AttributeCreators设置类别。
最后,使用GeometryReplacer返回多边形,然后使用AttributeRemover删除任何级别特定的属性。使用两个VariableRetrievers检索id,使用UUIDGenerator创建一个geofence id。创建一个中心点,然后将geofence写入IMDF。
在FME数据检查器中查看的GeoFence输出。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线准备向IMDF写入期初的工作流
一个开放表示房间或建筑物的入口,既可以是门,也可以是门槛。一个开头必须有一个ID,并且必须有一个作为几何图形的行字符串。
为了创建开口,UUIDGenerator被连接到FeatureTypeFilter,然后VariableRetriever被连接到创建和检索id。几何强制器连接到创建水平的溶解器;这是用来强制水平边界的开放行。然后将SpatialFilter连接到geometrycoer和VariableRetriever,以在水平边界上找到开口;这将决定开口是内部的还是外部的。然后使用两个AttributeCreators来创建行人(内部)或行人的类别。主要的(外部)。然后计算一个中点作为显示点;这是通过使用GeometryExtractor、Snipper、CoordinateExtractor和GeometryReplacer来完成的。一旦创建了显示点,就将空名称属性设置为
在FME数据检查器中查看的打开输出。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线准备向IMDF写入单元的工作流
一个单元表示一个房间或走廊,是一个封闭的空间。一个单位必须有一个ID并且必须是一个多边形。
UUIDGenerator用于创建ID,并连接到FeatureTypeFilter。然后使用AttributeCreator创建一个名为_predicate的属性,该属性将在SpatialRelator中使用;这是连接到VariableRetriever用于创建开口。SpatialRelator连接到UUIDGenerator, AttributeCreator和_predicate属性用于测试关系。VariableRetriever用于获取level_id。另一个AttributeCreator用于将NOTES属性复制到名为name的属性;这是每个单元的名称。创建一个中心点,将空名称属性设置为
在FME数据检查器中查看的单元的输出。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线准备向IMDF提供便利和锚定的工作流程
一个舒适是一种提供方便服务的功能,如洗手间或饮水机。设施必须有一个ID,必须有一个点几何。
设施id是使用UUIDGenerator创建的,然后设施被覆盖在单元的顶部,从而使用PointOnAreaOverlayer获得单元id。然后使用AttributeCreator创建名称、类别和unit_id属性。空名称属性被设置为
在FME数据检查器中查看的舒适性输出。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
一个锚是用于显示特定地址或不可寻址位置的指定点。锚点作为另一个特性可以继承锚点属性的点。
除了用于测试某个类别的测试之外,锚点遵循与舒适性亚搏在线相同的工作流程。任何未指定的设施,服务,餐饮服务,或汽车租赁被视为一个锚。
在FME数据检查器中查看锚的输出。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线准备向IMDF写出占用者的工作流程
一个居住者提供商品或服务的企业的所在地。这些居住者由锚表示。
一旦确定了锚点,就会重命名并创建惟一id,然后使用AttributeValueMapper将属性重新映射到特定的IMDF类别。数据库Joiner用于将包含业务信息的CSV文件与锚连接起来,创建占用者。创建一个属性来包含数据有效性。modified date, then the empty attributes are mapped to
在FME数据检查器中查看的乘员输出
亚搏在线准备将章节写入IMDF的工作流程
一个部分是一个服务于特定目的的领域。例如,机场会有行李认领区、登机区、登机门和安检区。一个section必须有一个ID,并且必须是一个多边形。
AttributeValueMapper连接到FeatureTypeFilter来将单元重映射到一个section类别,在本例中,它们是:
一旦名称被重新映射,一个测试器被用来删除任何没有section类别的单元。然后用溶解器将带有一个剖面的单元的边界溶解,为每个剖面创建一个多边形。然后使用UUIDGenerator和VariableRetriever创建和检索id。创建一个中心点,使用CenterPointReplacer和DonutHoleExtractor删除任何多边形孔。最后,将空名称属性设置为
在FME数据检查器中查看的部分的输出。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
亚搏在线准备将夹具写入IMDF的工作流
一个固定装置表示包含在可以移动或半永久的单元中的物理对象。对于本例,这表示行李传送带或登记柜台。一个装置必须有一个ID并且必须是一个多边形。
通过使用另一个FeatureTypeFilter将carousel和计数器分离出来,fixture在FeatureTypeFilter之后再次过滤。测试人员用于确定装置是非公共的还是结构。然后使用裁剪器裁剪出任何非公共的旋转木马部件。然后创建和检索id,并创建一个中心点。一旦空名称属性被重命名为
在FME数据检查器中查看的夹具输出。背景地图雄蕊设计下,抄送3.0。数据开放式街道地图下,ODBL公司。
一个关系是两个映射元素之间的关联,其中包含一个中间元素。在本例中,这是一个连接多个楼层的电梯、楼梯或自动扶梯。此外,还添加了一个横向关系来定义当中央行李传送带在国际或国内之间切换时可以移动的分区。一个关系必须有一个ID,并且必须包含空几何。
亚搏在线准备将电梯关系写入IMDF的工作流
电梯关系首先通过使用测试器来提取电梯单元来创建。然后使用NeighborFinder,通过在堆栈中创建一个id列表将电梯连接起来。ListSorter和ListConcatenator按级别对电梯列表进行排序,然后创建堆栈id。然后使用复印机来删除重复的堆栈。PythonCaller用于创建一个从列表中提取关系信息的函数。最后,使用AttributeCreator创建一个方向属性。
亚搏在线准备将楼梯和自动扶梯关系写入IMDF的工作流
自动扶梯和楼梯之间的关系比电梯要复杂得多,它们是通过使用测试器来提取楼梯和自动扶梯单元而创建的。然后使用AttributeCreator设置特性类型(楼梯或自动扶梯),然后设置opening_id。使用NeighborFinder来链接堆栈并创建id列表,就像之前使用电梯一样。使用属性求值器映射扶梯方向。然后将列表从下到上(楼梯或自动扶梯)或从上到下(自动扶梯)排序。然后,堆栈的副本由每个级别的唯一组合组成,列表被分割为只覆盖那些级别和它们之间的任何级别。接下来,将每个堆栈副本转换为一个关系特性,将顶部和底部的开口作为源和目标。所有的截线单元都设置为中介体。
亚搏在线准备将移动分区关系写出到imdf的工作流
移动的分区关系根据行李传送带计划控制人员的流动。使用测试失败端口从楼梯和自动扶梯关系中提取分区。然后使用list剥取器使用开口列表元素扩展关系。然后通过使用聚合器连接开口将单元分组在一起。列表搜索器用于搜索国际/国内行李提取的单元列表元素,然后进一步按国内行李提取,最后按到达大厅。然后使用属性控制器设置操作时间。最后,添加IMDF属性。
一旦创建了电梯、自动扶梯、楼梯和分区的关系,就会给它们一个惟一的id,然后将其写入IMDF。
在FME数据检查器中查看的关系的输出
运行翻译后,完整的IMDF文件可以使用安全软件IMDF验证页面进行验证,该页面将向您发送报告,指出任何警告或错误。亚搏在线这个文件应该没有任何错误,但会有一些警告。这些警告主要是由于线段比规范阈值短。还会有关于功能不在构建范围内的警告。这些是由于协调舍入在足迹检查,可以忽略。
有关IMDF验证的更多信息,请参见验证IMDF数据集篇文章。
数据是©维多利亚机场管理局
©2019安全亚搏在线软件公司法律