span8
span4
由于有各种限制区域、多个航站楼和时间限制,在机场导航对任何人来说都是一个挑战。特别是乘客,他们需要快速高效地到达目的地。苹果的室内地图计划可以帮助乘客在一个大型机场建筑群中导航,但要添加这样的地图,就需要将数据转换成苹果的室内地图数据格式(IMDF)。
在这个场景中,您将了解如何将维多利亚机场(Esri Geodatabases)的地图数据转换为IMDF。在本例的最后,您将执行数据转换步骤,以生成可发布到Apple Maps的数据集。
注意:这个例子展示了如何处理来自维多利亚机场的数据。您自己的源数据可能在结构和格式上有所不同,因此需要不同的转换技术。
FME 2018.1 +
Python安装
ATB-PublicData.zip数据是©维多利亚机场管理局
中级FME技能水平
了解IMDF规格
提供的数据包含在三个不同的地理数据库中,机场的每层都有一个地理数据库。这些地理数据库包含了整个机场结构的数据。由于我们只对映射机场的布局和重要功能(如安全区、登机柜台和行李传送带)感兴趣,因此可以减少所读取的功能类型(功能类)的数量。
我们感兴趣的功能类型是:
以上功能类型在处理前在FME数据检查器中查看
这个场景尽可能详细,同时仍然保持可读性。要了解关于每个变压器的具体参数的更多信息,请参阅完成的工作区。
下源数据概述中列出的特征类型已经使用文件地理数据库(文件地理数据库开放API)读取器添加到工作空间。对于一些特征类型存在用于其他只有一个它的实例(即ATB_SURROUND)有两个或三个;这是因为在多个楼层存在这些功能。
每个特性类型在准备写入到IMDF之前都需要被清除。清理包括地理定位、清理几何图形、创建id和操作属性。下面的部分将详细说明为每个特性类型完成的步骤。
亚搏在线ATB_SURROUND的数据清理工作流
建筑物ID从ATB_SURROUND数据创建的。采样选择单个环绕特征,UUIDGenerator创建ID和VariableSetter创建一个名为构建并给予它id的值可变。
该变量在整个工作区中被引用。如果稍后在工作空间中使用带特性缓存的Run,请确保VariableSetter是任何部分运行的一部分,否则,工作空间将失败。
在ID变量创建的单独流中,使用溶解器将周围区域溶解为单个多边形。然后,使用DonutHoleExtractor,从建筑物中创建的甜甜圈洞被移除。最后,数据通过ApplyGeoreferencing自定义转换器运行,该转换器可以旋转、偏移、缩放和设置坐标系统。这个自定义转换器将在整个工作空间中被多次使用。
内ApplyGeoreferencing定制变压器的参数是:
ATB_SURROUND的前后数据清理。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线安全/SECURITY_LINE数据清理工作流程
首先,使用ArcStroker转换器将圆弧几何图形转换成直线,然后使用GeometryRefiner压缩几何图形。接下来,Deaggregator用于分解聚合行并消除小的间隙。Snapper和LineCloser的一个组合被用来把线合并成一个单一的线,一个为每个水平。最后,使用ApplyGeoreferencing自定义变压器对数据进行地理标定。
前后数据清理出于安全/ SECURITY_LINE。粉红色的线是一楼的安全线,紫线是在二楼。这里是三楼没有安全线。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线用于打开的数据清理工作流程
对于开口,首先,所有需要做的就是使用ApplyGeofreferecing自定义变压器对所有三层的开口进行地理标定。
亚搏在线用于建筑/墙面多边形和建筑/房间数据清理的工作流
所有三种架构/墙壁多边形特性类型都连接到一个AttributeCreator转换器,以创建一个值为structure的category属性。然后使用ApplyGeoreferencing自定义变压器进行地理标定。接下来,使用ArcStroker、Deaggregator、GeometryRefiner和Snapper组合清理几何图形。然后,使用AreaGapAndOverlayCleaner和另一个解聚集器删除任何空白或重叠。使用空间过滤器和测试器,任何单独的墙壁或非公共区域都会被过滤掉。
使用采样器、UUIDGenerator和VariableSetter转换器的组合为每个房间创建另一个变量。该变量使用fme_basename值,该值是机场的级别(ATB1、ATB2和ATB3)。在第二个数据流中,使用AttributeValueMapper来压缩房间(单位)类别基于NOTES属性。房间类型如下:
在AttributeValueMapper之后,数据通过ApplyGeoreferencing自定义转换器连接到架构/墙多边形工作流。亚搏在线
前建筑/墙多边形和前建筑/房间数据清理和合并多边形后的数据清理。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线用于架构/计数器数据清理的工作流
计数器有非常详细的每个值机柜台在机场的图纸。每一个需要他们居住在房间的属性,这是使用一个简化的几何形状做得最好。首先,变压器记录原始的副本的GeometryExtractor(详细)数据,则CenterPointReplacer被用来创建用于每个计数器的一个简单的中心点。接下来,使用SpatialFilter,房间属性合并到每个登记柜台。一个GeometryReplacer用于检索从GeometryExtractor存储的几何形状。
VertexCounter和AggregateFilter用于对过滤的数据进行排序。然后使用TestFilter通过以下方式对数据进行过滤:
一旦筛选了数据,就会使用AttributeCreator为TestFilter上的每个输出端口创建一个新类别。
Checkin Kiosk和Immigration Desk都被发送到一个自定义的变压器MakePolygon,它使用几个几何变压器制造多边形。签入台和安全设备被发送到一个BoundingBoxReplacer以简化几何图形为矩形。最后,使用ApplyGeoreferencing自定义变压器对计数器进行地理标定。
亚搏在线工作流用于建筑/轮播数据清除
的测试仪变压器被用于提取仅从所有不同的转盘特征行李拾取转盘。然后使用AttributeCreator类别和名称创建。使用ArcStroker,鲷鱼,和AreaBuilder然后,多边形的每个转盘的创建。该转盘被路由到连接到计数器的工作流程相同ApplyGeoreferencing定制变压器。亚搏在线最后,中央转盘用于基于一组时间表国际和国内的行李,在加入该信息的需求。该AreaBuilder_2也连接到建筑/ PUBLIC_AMENITY数据清理工作流程,添加此计划信息。亚搏在线
架构/计数器和架构/旋转木马的前后数据清理。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线用于架构/公共设施数据清理的工作流
中央行李领取区设有旋转木马,可通过移动墙在国内和国际间切换。维多利亚机场提供了旋转木马的使用时间表。
为了实现这一点,我们为联合旋转木马设计了两个设施:一个供国内使用,一个供国际使用。附表是针对每种使用类型的适当设施。
AttributeKeeper只保留行李传送带名称和fme_basename属性。然后使用PointOnAreaOverlayer将行李传送带设施覆盖在行李传送带多边形上,并合并属性。该测试仪用于寻找国际/国内组合传送带。然后使用AttributeCreator设置国内调度。一个偏移器用于创建第二个便利来包含使用AttributeCreator创建的国际日程安排。最后,使用ApplyGeoreferencing自定义转换器对所有架构/公共设施特性类型进行地理匹配。
使用AnchoredSnapper, SECURITY/SECURITY_LINE、OPENING、architecture /COUNTER和architecture /CAROUSEL都被快照在一起。建筑/墙壁多边形和建筑/房间特性是其他数据的锚点。这将切断安全线和固定装置到单位。
然后使用Snapper,安全顶点被捕捉到单位边界使用分段捕获。所有多边形特征之间的公共顶点确保了当在导航应用程序中查看数据时,以及当数据在写入到IMDF时重新投影到纬度/经度时,数据在视觉上对齐。
在基本地图关闭的情况下查看的功能快照
使用Snapper,安全顶点将被捕捉到单位边界使用片段捕捉。在Snapper之后,然后使用FeatureTypeFilter将特性过滤回它们各自的类型。
一旦数据是干净的,它需要准备IMDF规格之前被写入。这意味着需要向每个特性添加惟一的id,几何类型必须正确,并且所有属性都遵循适当的命名约定。当写入到IMDF时,FME写入器会自动将数据重新投影到LL84坐标系统。
由于下一节的复杂性,流程描述可能会引用尚未提到的特性类型和转换器。为了清晰起见,建议在阅读时打开示例工作区。
亚搏在线工作流程,准备写出地点到IMDF
该聚会地点是包含建筑的边界,该建筑必须有一个id,并且必须是一个多边形。
要创建会场,使用UUIDGenerator创建一个唯一的ID。然后,有关场地的特定属性使用AttributeCreator创建。这些属性包括建筑,类别,网站,备用名称,时间和电话号码的名称。当设置类别,有一个特定的命名约定必须遵守的。查看苹果室内映射数据格式单位类别文档为更多的信息。
接下来,使用FeatureMerger将address_id合并到地点id上。然后使用centerpointex拖拉机,创建一个中心点。然后用室内测绘数据格式(IMDF)书写出场地。
在FME数据检查器中查看的场地输出。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线工作流程,准备写出地址和建立到IMDF
该地址是必须有ID和空几何图形的邮政地址。
要创建地址,使用UUIDGenerator创建一个惟一的address_id。address_id是重命名为id,使用AttributeRenamer,这样做是为了与场地id合并的目的。接下来,地址与AttributeCreator创建的属性,这包括街道地址、位置(城市或城镇名称)、省(或状态),国家,邮政编码(或邮政编码)。然后,地址被写出来给同一IMDF作家,作为地点。这可以很容易地做到,通过进入writer > Add Feature Type,然后在Feature Type对话框中重命名Feature Type Name to address,并确保选中了IMDF writer。
在FME数据检查器中查看地址的输出
该建造场馆内的物理建筑必须有一个ID,并且必须有一个空几何图形。该特性类型只存储属性信息,实际的构建多边形存储在内存占用特性类型中。
使用前面创建的address_id,使用AttributeCreator创建构建名称和类别。然后使用VariableRetriever检索使用ATB_SURROUND创建的建筑id。使用centerpointex拖拉机转换器创建一个中心点,它将作为一个属性存储,然后使用同一个写入器将建筑写入到IMDF中。
建筑产出的FME数据检查观察
亚搏在线工作流准备写入水平输出到IMDF
该水平表示建筑物的每一层(或地板)。该级别必须有一个ID,并且必须是一个多边形。
从特征类型过滤器,所有单位溶解成水平使用溶解器;在本例中,创建了三个级别。然后使用两个变量返回,检索级别id和构建id。使用StringSearcher,从fme_basename中提取级别号;这是因为每个启动的地理数据库代表一个级别(ATB1、ATB2、ATB3)。
AttributeCreator用于创建特定于每个级别的属性,包括类别、级别是否在户外(Yes/No)、序号、级别名称和短名称。然后提取中心点,并使用NullAttributeMapper将空名称和short_name属性映射到
在FME数据检查器中查看级别的输出。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线工作流程准备写足迹出来IMDF
该足迹是建筑物的近似多边形。足迹必须有一个ID,并且必须是一个多边形。
连接到创建水平属性AttributeCreator,一个AttributeRemover用于去除级别名称。然后,使用TestFilter,级别由序(空中,地面和地下)组织的。溶解器连接到空中和地面输出端口用于水平溶解到足迹。然后一个DonutHoleExtractor被用于去除创建的任何环形孔。然后,一个AttributeCreator是用来给的足迹空中类别。
接着,AttributeCreator被连接到在TestFilter地面输出端口,得到足迹的地面的类别。
最后,另一个分解器DonutHoleExtractor和AttributeCreator连接到TestFilter上的subterranean输出端口,并且内存占用被指定为subterranean类别。
然后,所有三个attributecreator都连接到UUIDGenerator以创建一个footprint_id,然后将其写入到IMDF中。
FME数据检查器中查看的内存占用情况的输出。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线编写geofence到IMDF的工作流程
一种geofence按一组限制分隔一个或多个区域。在机场的情况下,这将是前后安全。地理位置必须有一个ID,并且必须是一个多边形。
一个部门间变压器连接到AttributeCreator,该AttributeCreator创建了级别属性,用于通过安全线分隔单元。然后使用一个AreaBuilder为安全线两边的每一层创建新的多边形。然后使用GeometryExtactor保存几何图形;这样做是为了在不影响几何形状的情况下操作属性并与其他属性合并。使用CenterPointReplacer创建一个包含每个多边形的所有属性的单点。然后使用裁剪器只对该点进行裁剪,以使新的多边形保持在级别内。一个LeftRightSpatialCalculator用于确定每个多边形落在安全线的哪一边,这是由fme_basename分组的,因此它保持每个级别独立。利用列表检索器对多边形进行分类;如果多边形在线的右边,它是前安全的,如果它在左边,它是后安全的。然后使用AttributeCreators来设置类别。
最后,使用GeometryReplacer恢复多边形,然后使用AttributeRemover删除任何特定级别的属性。使用两个变量备份检索id,使用UUIDGenerator创建geofence id。创建一个中心点,然后将地理位置写入到IMDF。
对于地理围栏输出在FME数据查验观看。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线工作流准备写,打开到IMDF
一个开放表示房间或建筑物的入口,an可以是门或门槛。一个开口必须有一个ID,并且必须有一个作为几何图形的线串。
要创建这些开口,将UUIDGenerator连接到FeatureTypeFilter,然后将VariableRetriever连接到创建和检索id。几何约束器连接到创建层次的溶解器;这是用来强制水平边界的开始行。空间滤波器然后连接到几何校正器和变量校正器,以找到水平边界上的开口;这将决定开口是在内部还是外部。然后使用两个属性转换器来创建行人(内部)或行人的类别。主要的(外部)。然后计算一个中点作为显示点;这是通过使用GeometryExtractor, Snipper, CoordinateExtractor和GeometryReplacer来完成的。一旦创建了显示点,空名称属性设置为
在FME数据检查器中查看打开的输出。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线编写单元到IMDF的工作流程
一种单位代表一个房间或走廊和是一个封闭的空间。甲单元必须有一个ID,并且必须为多边形。
甲UUIDGenerator用于创建的ID,并且被连接到FeatureTypeFilter。然后,一个AttributeCreator用于创建一个属性称为_predicate将在SpatialRelator使用;这被连接到VariableRetriever用于创建开口。甲SpatialRelator连接到UUIDGenerator和AttributeCreator和_predicate属性用于测试的关系。一个VariableRetriever被用来获取level_id。另一个AttributeCreator用于复制的NOTES属性称为名称属性;这将是每个单位的名称。创建一个中心点,空名称属性被设置为<缺失>,然后将单元被写出到IMDF。
在FME数据检查器中查看的单元的输出。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线工作流程准备编写amenity和锚出到IMDF
一个礼仪是作为一种便利服务提供的功能,如洗手间或饮水机。设施必须有一个ID,必须有一个点几何。
使用UUIDGenerator创建设施id,然后将设施覆盖在单元之上,使用PointOnAreaOverlayer获得单元id。然后使用AttributeCreator创建名称、类别和unit_id属性。空名称属性设置为
对于舒适性输出在FME数据查验观看。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
一个锚是用于显示一个特定的地址或不可寻址的位置的指定点。锚作为一个点在另一个特点可以继承锚的属性。
锚遵循与舒适性相同的工作流程,除了一个测试器被用亚搏在线来测试一个类别。任何未指明的设施、服务、餐饮服务或汽车租赁都被视为锚。
在FME数据检查器中查看锚的输出。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线准备将居住者写入到IMDF的工作流
一个主人是提供商品或服务的企业所在地。锚代表了这些居住者。
一旦锚已经确定,唯一的ID被重命名和创建的,则该属性使用AttributeValueMapper具体IMDF类别重新映射。一个DatabaseJoiner用于连接包含与锚业务信息来创建乘员CSV文件。创建一个属性所包含的数据validity.modified日期,则空属性映射到<缺失>之前最后写出到IMDF。
为乘员输出在FME数据查验观察
亚搏在线工作流程准备写节输出到IMDF
一种部分是服务于特定目的的区域。例如,机场将有领取行李,登机区,门和安全性的部分。A节必须有一个ID,并且必须为多边形。
AttributeValueMapper连接到FeatureTypeFilter,将单元映射到section类别,在这个例子中,这些是:
一旦名称被重新映射,测试人员就会删除任何没有section类别的单元。然后,使用溶解器溶解带有剖面的单元边界,为每个剖面创建一个多边形。然后使用UUIDGenerator和VariableRetriever创建和检索id。使用CenterPointReplacer和DonutHoleExtractor创建一个中心点并去除任何多边形孔。最后,将空名称属性设置为
在FME数据检查器中查看的部分的输出。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
亚搏在线工作流程准备写夹具出来IMDF
一种夹具表示包含在可移动或半永久的单元中的物理对象。对于本例,它表示行李传送带或登机柜台。一个夹具必须有一个ID并且必须是一个多边形。
在FeatureTypeFilter之后,通过使用另一个FeatureTypeFilter来分离carousel和计数器,将再次过滤fixture。测试器用于确定夹具是非公共的还是一个结构。然后使用裁剪器来裁剪非公开的任何carousel部分。然后创建和检索Ids,并创建一个中心点。将空名称属性重命名为
输出在FME数据检查器中查看的夹具。背景地图图块通过雄蕊设计下,CC 3.0。通过数据开放地图下,ODbL。
一种的关系是两个映射元素之间的关联,可选择包含中间元素。在本例中,这将是一个连接多个楼层的电梯、楼梯或自动扶梯。此外,还添加了一个横向关系,以定义在中央行李传送带在国际或国内之间切换时可以移动的分区。关系必须有一个ID,并且必须包含空几何图形。
亚搏在线编写电梯关系到IMDF的工作流程
电梯关系首先通过使用一个测试器来提取电梯单元来创建。然后使用NeighborFinder,通过在堆栈中创建id列表,将电梯链接在一起。列表排序器和列表连接器按级别对电梯列表进行排序,然后创建一个堆栈id。然后使用duplicate atefilter删除重复的堆栈。PythonCaller用于创建从列表中提取关系信息的函数。最后,使用AttributeCreator创建方向属性。
亚搏在线准备向IMDF写出扶梯和扶梯关系的工作流程
扶梯和扶梯的关系比电梯更复杂,是通过使用测试器来提取扶梯和扶梯单元而创建的。然后使用AttributeCreator设置特性类型(楼梯或自动扶梯),然后设置opening_id。睦邻finder用于链接堆栈并创建id列表,就像前面对电梯所做的那样。使用AttributeValueMapper映射自动扶梯的方向。然后将列表从下到上(楼梯或自动扶梯)或从上到下(扶梯)进行排序。然后为每个惟一的级别组合创建堆栈的副本,并将列表分割为只覆盖这些级别和它们之间的任何级别。接下来,每个堆栈副本被转换为一个关系特性,顶部和底部的开口作为源和目标。所有的横线单位都被设置为中间单位。
亚搏在线工作流准备将移动分区关系写入到IMDF
移动分区关系根据行李传送带时间表控制人员流动。使用楼梯和自动扶梯关系中的测试人员失败端口提取分区。然后使用list爆炸器,使用开口列表元素展开关系。然后这些单元通过使用聚合器连接到一起。列表搜索器用于搜索国际/国内行李取件的单位列表元素,然后是国内行李取件,最后是到达大厅。然后使用AttributeCreators设置操作时间,最后添加IMDF属性。
一旦创建了电梯、自动扶梯、楼梯和分区的关系,就会给它们一个惟一的id,然后将其写入到IMDF中。
FME数据检查器中查看的关系的输出
运行翻译后,完成的IMDF文件可以验证使用安全软件IMDF验证页,将电子邮件报告您的任何警告或错误。亚搏在线这个文件应该验证无误,但是会有一些警告。这些警告主要是由于线段比规范阈值短。也会有警告,如果特征不在建筑足迹内。这些是由于在内存占用检查中协调舍入造成的,可以忽略。
有关IMDF验证的更多信息,请参见验证IMDF数据集篇文章。
数据是©维多利亚机场管理局
©2019安全亚搏在线软件公司|法律