span8
span4
由于有各种限制区域、多个航站楼和时间限制,在机场导航对任何人来说都是一个挑战。乘客尤其需要快速有效地到达目的地。苹果的室内地图计划可以帮助乘客在大型机场导航,但要添加这样的地图,需要将数据转换为苹果的室内地图数据格式(IMDF).
在本场景中,您将了解如何将维多利亚机场(Esri地理数据库)的地图数据转换为IMDF。在本例的最后,您将执行数据转换步骤,以生成准备发布到Apple Maps的数据集。
注:这个例子显示了从维多利亚机场数据如何进行处理。自己的源数据可以在结构和格式各不相同,因此需要不同的变换技术。
FME 2018.1 +
Python安装
ATB-PublicData.zip数据是©维多利亚机场管理局
FME中级技能水平
了解IMDF规格
提供的数据包含在三个不同的地理数据库中,分别对应机场的每一层。这些地理数据库包含整个机场结构的数据。由于我们只对机场布局和重要功能(如安全区域、值机柜台和行李传送带)的映射感兴趣,我们可以减少我们阅读的功能类型(功能类)的数量。
我们感兴趣的功能类型有:
处理前在FME数据查验观察上述特征类型
这种情况下进入尽可能多的细节尽可能,同时仍保持可读性。要了解更多关于每台变压器的具体参数,请参阅完成工作区。
Source Data Overview下列出的特性类型已经使用File Geodatabase (File Geodb Open API)读取器添加到工作区中。对于某些特性类型,只有一个实例(例如ATB_SURROUND),对于其他特性类型,有两个或三个实例;这是因为这些功能存在于多个楼层。
每个要素类型在准备写入IMDF之前都需要清理。清理包括地理参考、清理几何体、创建ID和操作属性。以下部分将详细说明每个要素类型完成的步骤。
亚搏在线ATB_环绕的数据清理工作流
构建ID是从ATB_SURROUND数据创建的。Sampler选择单个环绕特性,UUIDGenerator创建ID, variableletter创建名为building的变量,并为其提供ID值。
该变量在整个工作空间中被引用。如果稍后在工作空间中使用带特性缓存的运行,请确保variableletter是任何部分运行的一部分,否则,工作空间将会失败。
在ID变量创建的单独流上,使用Dissolver将周围区域分解为单个多边形。然后,使用DonutHoleExtractor,从建筑中创建的甜甜圈洞被删除。最后,数据通过applygeoriferencing自定义转换器运行,该转换器旋转、偏移、缩放和设置一个坐标系统。这个自定义转换器将在整个工作空间中使用多次。
在applygeoriferencing自定义转换器中,参数如下:
ATB_环绕的前后数据清理。背景地图平铺方式雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线工作流用于安全/ SECURITY_LINE数据清除
首先,使用ArcStroker变换器将圆弧几何体转换为直线,然后使用GeometryRefiner压缩几何体。下一步,使用解集器分解聚合线并闭合小间隙。“捕捉器”和“线闭合器”的组合用于将线合并为一条线,每层一条。最后,使用ApplyGeoReference自定义转换器对数据进行地理参考。
SECURITY/SECURITY_LINE的前后数据清洗。粉色线是一楼的安全线,紫色线是二楼的安全线。三楼没有警戒线。背景贴图雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线open的数据清理工作流
对于开口,最初,所有需要做的是,所有三层上的开口都需要使用applygeofrefering自定义转换器进行地理引用。
亚搏在线工作流数据清除两个建筑/墙壁多边形与建筑/间
所有三个ARCHITECTURAL/WALL POLYGON特征类型都连接到一个AttributeCreator转换器,以创建一个具有structure值的类别属性。然后使用applygeoriferencing自定义转换器对其进行地理引用。接下来,使用ArcStroker、Deaggregator、GeometryRefiner和Snapper的组合清理几何图形。然后使用AreaGapAndOverlayCleaner和另一个Deaggregator删除任何缝隙或重叠。使用空间过滤器和测试器,任何单独的墙壁或非公共区域都会被过滤掉。
使用Sampler、UUIDGenerator和VariableSetter变压器的组合为每个房间创建另一个变量。该变量使用fme_basename值,该值是机场的级别(ATB1、ATB2和ATB3)。在第二个数据流中,使用AttributeValueMapper来压缩房间(单元)类别基于NOTES属性。房间类型如下:
在AttributeValueMapper之后,数据通过applygereference自定义转换器连接到ARCHITECTURAL/WALL POLYGON工作流。亚搏在线
预建筑/墙壁多边形及预建筑/间数据清理和合并后的多边形数据清除。背景贴图雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线architecture /COUNTER的数据清理工作流
这些柜台是机场每个值机柜台的详细图纸。每一个都需要它们所在房间的属性,这最好使用简化的几何图形来完成。首先,一个GeometryExtractor变压器记录原始(详细的)数据的副本,然后使用CenterPointReplacer为每个计数器创建一个简单的中心点。接下来,使用SpatialFilter,将房间属性合并到每个签入计数器上。使用GeometryReplacer从GeometryExtractor检索存储的几何图形。
VertexCounter和aggregatfilter用于对数据进行排序以进行过滤。然后使用TestFilter过滤数据:
过滤数据后,将使用AttributeCreator为TestFilter上的每个输出端口创建一个新类别。
报到亭和移民服务台都被发送到一个名为MakePolygon的自定义转换器,该转换器使用多个几何体转换器生成多边形。签入台和安全设备被发送到BoundingBoxReplacer,以将几何体简化为矩形。最后,使用ApplyGeoReference自定义转换器对计数器进行地理参考。
亚搏在线architecture /CAROUSEL的数据清理工作流
一个Tester变压器用于从所有不同的行李提取传送带特性中提取行李提取传送带。然后使用AttributeCreator创建类别和名称。然后使用ArcStroker, Snapper和AreaBuilder,为每个旋转木马创建多边形。旋转木马被路由到连接到计数器工作流的相同applygeoriferencing自定义变压器。亚搏在线最后,中央传送带根据既定的时间表用于国际和国内行李,需要添加该信息。AreaBuilder_2还连接到ARCHITECTURAL/PUBLIC_AMENITY数据清理工作流,以添加该计划信息。亚搏在线
architecture /COUNTER和architecture /CAROUSEL的前后数据清理。背景贴图雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线工作流用于建筑/ PUBLIC_AMENITY数据清除
中央行李提取区通过使用活动墙在国内和国际之间切换转盘。维多利亚机场提供了转盘使用时间表。
一个供国内使用和一个在国际上使用:为了模拟这两个设施是为联合旋转木马创建的。调度是用于在合适的舒适性的每个使用类型。
AttributeKeeper仅保留行李传送带名称和fme_basename属性。然后,PointOnAreaOverlayer用于将行李传送带设施覆盖在行李传送带多边形上,并合并属性。测试仪用于查找组合的国际/国内旋转木马。然后使用AttributeCreator设置国内计划。偏移器用于创建第二个便利设施,以包含使用AttributeCreator创建的国际明细表。最后,使用ApplyGeoReference自定义转换器对所有建筑/公共设施要素类型进行地理参照。
使用AnchoredSnapper,在安全/ SECURITY_LINE,开放,建筑/计数器和建筑/轮播抢订在一起。建筑/墙壁多边形和建筑/ ROOM特征是,其他的数据被对齐到锚。这将捕捉的安全线和夹具的单位。
然后使用Snapper,安全顶点使用片段捕捉被捕捉到单元边界。所有多边形特性之间的公共顶点确保在导航应用程序中查看数据时,以及在写入IMDF时将数据重投影到纬度/经度时,数据在视觉上是对齐的。
与底图观察卡扣特征关闭
使用Snapper,安全顶点将使用片段捕捉被捕捉到单元边界。在Snapper之后,使用FeatureTypeFilter将特征过滤回它们各自的类型。
一旦数据清理干净,就需要在编写之前为IMDF规范做好准备。这意味着需要向每个特性添加惟一的id,几何类型必须正确,并且所有属性都遵循适当的命名约定。当写入到IMDF时,FME写入器自动将数据重新映射到LL84坐标系统。
由于以下部分的复杂性,流程描述可能会引用尚未提及的功能类型和转换器。为清楚起见,建议在阅读时打开示例工作区。
亚搏在线工作流程准备写会场出来IMDF
的聚会地点是包含建筑物的边界,该建筑物必须具有id且必须为多边形。
要创建场地,使用UUIDGenerator创建一个惟一的ID。然后使用AttributeCreator创建场地的特定属性。这些属性包括建筑名称、类别、网站、备选名称、工作时间和电话号码。在设置类别时,必须遵循特定的命名约定。看到苹果室内地图数据格式单位类别文档为更多的信息。
接下来,使用FeatureMerge将地址_id合并到场馆id上。然后使用CenterPointExtractor创建一个中心点。然后使用室内地图数据格式(IMDF)编写器写出场地。
用于场地输出在FME数据查验观看。背景贴图雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线准备写出地址和建筑物到IMDF的工作流程
的地址是邮政地址,该地址必须有一个ID,并且必须有一个空的几何形状。
要创建地址,使用UUIDGenerator创建一个惟一的address_id。然后使用AttributeRenamer将address_id重命名为id,这是为了与地点id合并。接下来,使用AttributeCreator创建地址属性,这包括街道地址、位置(城市或城镇名称)、省(或州)、国家和邮政编码(或邮政编码)。然后把地址作为地点写在IMDF的同一个写入器上。这可以很容易地做到,通过切换到writer > Add Feature Type,然后在Feature Type对话框中重命名Feature Type Name来地址,并确保IMDF writer被选中。
为地址输出在FME数据查验观察
的建筑是包含在场地内的物理建筑,必须有一个ID,必须有一个空的几何形状。该特性类型只存储属性信息,实际的建筑多边形存储在占用空间特性类型中。
使用先前创建的地址id,AttributeCreator用于创建建筑名称和类别。然后使用VariableRetriever检索使用ATB_环绕创建的建筑id。使用CenterPointExtractor transformer创建一个中心点,该中心点将作为属性存储,然后使用同一个写入器将建筑写入IMDF。
在FME数据检查器中查看建筑输出
亚搏在线准备向IMDF写入电平的工作流
的水平代表建筑物的每一层(或楼层)。关卡必须有一个ID,并且必须是一个多边形。
从FeatureTypeFilter,使用溶解器将所有单元溶解到各个级别;在这种情况下,将创建三个级别。然后使用两个VariableRetriever检索标高id和建筑id。使用StringSearcher,从fme_basename中提取级别编号;这是因为每个起始地理数据库代表一个级别(ATB1、ATB2、ATB3)。
一个AttributeCreator被用于创建属性具体到每一个层面,这包括类别,级别是否室外(是/否),序号,级别名称和短名称。然后中心点被提取和空的名字和SHORT_NAME属性映射到<缺失>使用NullAttributeMapper。最后,该水平被写入到IMDF。
在FME数据检查器中查看的水平输出。背景贴图雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线准备将内存占用写到IMDF的工作流
的足迹是建筑物(多个)的近似多边形。足迹必须有一个ID,并且必须是一个多边形。
连接到创建级别属性的AttributeCreator, AttributeRemover用于删除级别名称。然后使用TestFilter,按顺序(空中、地面和地下)组织级别。连接到天线和地面输出端口的溶解器用于将电平溶解成脚印。然后使用DonutHoleExtractor删除任何创建的甜甜圈洞。然后使用AttributeCreator给出天线类别的足迹。
接下来,将一个AttributeCreator连接到TestFilter上的地面输出端口,以给足迹提供地面的类别。
最后,将另一个溶解器、DonutHoleExtractor和AttributeCreator连接到TestFilter上的地下输出端口,并将占用空间指定为地下类别。
那么这三个AttributeCreators连接到一个UUIDGenerator创建footprint_id,然后将其写入到IMDF。
在FME数据检查器中查看的足迹输出。背景贴图雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线准备将geofence写到IMDF的工作流
一个土工栅栏通过设置限制分隔一个或多个区域。就机场而言,这将是事前和事后的安保。地理围栏必须具有ID,并且必须是多边形。
一个Intersector变压器连接到创建级别属性的AttributeCreator,该属性用于通过安全线分隔单元。然后使用AreaBuilder为安全线的每一层创建新的多边形。然后使用geometryextractor保存几何图形;这样做是为了在不影响几何体的情况下操纵属性并与其他属性合并。CenterPointReplacer用于创建一个包含每个多边形所有属性的点。然后使用Clipper剪切点,只为了保持关卡中的新多边形。LeftRightSpatialCalculator用于确定每个多边形落在安全线的哪一边,这是由fme_basename分组的,因此它保持每个级别分开。ListSearcher用于对多边形进行分类;如果多边形位于线条的右侧,则为pre-security;如果多边形位于线条的左侧,则为post-security。然后使用attributecreator设置类别。
最后,使用GeometryReplacer将多边形带回来,然后使用AttributeRemover删除任何级别特定的属性。使用两个variableetriever检索id,使用UUIDGenerator创建geofence id。创建一个中心点,然后将地栅写入IMDF。
在FME数据检查器中查看地栅的输出。背景贴图雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线工作流程准备写开出IMDF
一个开放表示一个房间或建筑的入口,可以是门或门槛。开口必须有一个ID,并且必须有一个几何形状的行字符串。
要创建这些开口,需要将一个UUIDGenerator连接到FeatureTypeFilter,然后连接一个VariableRetriever来创建和检索id。GeometryCoercer连接到创建关卡的Dissolver;这用于强制水平边界到开始的行。一个空间过滤器然后连接到两个几何coercer和可变etriever在水平边界上找到开口;这将决定开口是内部的还是外部的。然后使用两个attributecreator创建行人(内部)或行人的类别。主要的(外部)。然后计算一个中点作为显示点;这是通过使用一个GeometryExtractor, Snipper, CoordinateExtractor和GeometryReplacer来完成的。一旦创建了显示点,空的名称属性就被设置为<缺少>,并且开始被写入到IMDF。
用于打开输出在FME数据查验观看。背景贴图雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线工作流程准备写单元出来IMDF
一个单位代表一个房间或走廊,是一个封闭的空间。一个单元必须有一个ID并且必须是一个多边形。
UUIDGenerator用于创建ID,并连接到FeatureTypeFilter。然后使用AttributeCreator创建一个名为_predicate的属性,该属性将在SpatialRelator中使用;它连接到用于创建开口的variableetriever。SpatialRelator连接到UUIDGenerator, AttributeCreator和_predicate属性用于测试关系。VariableRetriever用于获取level_id。另一个AttributeCreator用于将NOTES属性复制到一个名为name的属性;这将是每个单元的名称。创建一个中心点,将空名称属性设置为<缺失的>,然后将单元写入IMDF。
在FME数据检查员中查看的单元输出。背景贴图雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线准备写便利性和锚定到IMDF的工作流程
一个美化市容是一种像洗手间或饮水机一样提供方便服务的功能。设施必须有一个标识,必须有一个点的几何形状。
使用UUIDGenerator创建一个便利标识,然后将便利覆盖在单元之上,使用PointOnAreaOverlayer获取单元标识。然后使用AttributeCreator创建Name、category和unit_id属性。空名称属性被设置为<缺少>,然后使用Tester设施与锚分开。最后,锚和便利写入IMDF。
在FME数据检查器中查看的舒适性输出。背景贴图雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
一个锚是用于显示特定地址或不可寻址位置的指定点。锚用作另一个特性可以继承锚属性的点。
锚遵循与便利功能相同的工作流,除了Tester用亚搏在线于测试类别。任何未指明的设施、服务、餐饮服务或租车都被视为锚。
在FME数据检查器中查看锚的输出。背景地图平铺方式雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线工作流程准备乘员写出来,希望IMDF
一个主人是提供商品或服务的企业的所在地。这些居住者由锚代表。
一旦确定了锚,就会重命名和创建惟一id,然后使用AttributeValueMapper将属性重新映射到特定的IMDF类别。DatabaseJoiner用于使用锚连接包含业务信息的CSV文件,以创建占用者。创建一个属性以包含数据有效性。修改日期,然后在最终写入IMDF之前将空属性映射到<缺失的>。
在FME数据检查员中查看乘员输出
亚搏在线准备写节到IMDF的工作流
一个部分是一个服务于特定目的的领域。例如,机场有行李领取处、登机区、登机口和安检区。section必须有一个ID,并且必须是一个多边形。
一个AttributeValueMapper连接到FeatureTypeFilter来将单元重新映射到一个section类别,对于这个例子来说,这些是:
一旦名称被重新映射,就会使用Tester删除任何没有section类别的单元。然后单位的边界与一个部分被溶解使用溶解器为每个部分创建一个多边形。然后使用UUIDGenerator和VariableRetriever创建和检索id。使用CenterPointReplacer和DonutHoleExtractor创建一个中心点,并删除所有多边形孔。最后,将空名称属性设置为<缺少的>,然后将部分写入IMDF。
在FME数据检查器中查看的部分的输出。背景贴图雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
亚搏在线准备将夹具写入IMDF的工作流程
一个夹具表示包含可以移动或者是半永久性的一个单元内的物理对象。在这个例子中,这将代表着行李转盘或值机柜台。的固定件必须有一个ID,并且必须为多边形。
fixture在FeatureTypeFilter之后再次被过滤,使用另一个FeatureTypeFilter来分离出carousel和计数器。Tester用于确定fixture是非公共的还是一个结构。然后使用Clipper剪辑出任何非公开的旋转木马部件。然后创建和检索id,并创建一个中心点。一旦空名称属性被重命名为
在FME数据检查器中查看的夹具输出。背景地图平铺方式雄蕊设计下,CC 3.0.数据开放地图下,ODbL.
一个关系是与包括中间元件选项两个地图要素之间的关联。在这个例子中,这将是一个电梯,楼梯或自动扶梯,其连接多个级别。此外,横向关系被添加到限定在中央行李传送带国际或国内之间切换可移动的分区。的关系必须有一个ID,且必须包含空几何。
亚搏在线准备写电梯关系到IMDF的工作流
电梯关系首先是通过使用Tester只提取电梯单元来创建的。然后使用NeighborFinder,电梯通过在堆栈中创建一个id列表链接在一起。ListSorter和ListConcatenator按层对电梯列表进行排序,然后创建堆栈id。然后使用duplicatfilter删除重复堆栈。PythonCaller用于创建从列表中提取关系信息的函数。最后,使用AttributeCreator创建方向属性。
亚搏在线准备把楼梯和自动扶梯的关系写出来给IMDF的工作流程
自动扶梯和楼梯关系比电梯比较复杂,通过使用测试仪只提取楼梯,自动扶梯单位创建。然后,一个AttributeCreator用于设定所述特征类型(楼梯或自动扶梯),然后设置opening_id。一个NeighborFinder用于链接堆栈,并创建ID的列表,如先前电梯完成。自动扶梯方向使用AttributeValueMapper映射。然后列表进行排序自下而上(楼梯或自动扶梯)或从上到下(上下扶梯)。堆栈的副本则弥补了水平的每一个独特的组合,与列表切片,只包括那些水平和任何它们之间。接着,将各堆拷贝变成一个关系特征,在顶部开口和底部电平作为源和目的地。所有横向单位设置为中介。
亚搏在线准备将移动分区关系写出来到IMDF的工作流
移动分区关系根据行李传送带计划控制人员流动。分区是从楼梯和自动扶梯关系中使用Tester失败端口提取的。然后使用ListExploder,使用opened list元素展开关系。然后使用Aggregator将单元连接到一起。ListSearchers用于搜索国际/国内行李提取单元列表元素,然后进一步通过国内行李提取,最后通过到达大厅。然后使用AttributeCreators设置操作时间。最后,添加IMDF属性。
一旦创建了电梯、自动扶梯、楼梯和分区的关系,就会给它们一个唯一的id,然后将其写入IMDF。
在FME数据检查器中查看的关系输出
运行翻译后,可以使用安全软件IMDF验证页面验证已完成的IMDF文件,该页面将通过电子邮件向您发送报告,指出任何警告或错误。亚搏在线这个文件应该没有任何错误,但会有一些警告。这些警告主要是由于线段比规范阈值短。也会有关于不在建筑足迹之内的功能的警告。这些是由于占用空间检查中的协调舍入,可以忽略。
有关IMDF验证的更多信息,请参阅验证IMDF数据集文章。
数据是©维多利亚机场管理局
©2019 S亚搏在线afe Software Inc |法律