span8
span4
下面来看看,可以利用执行某些高级操作SchemaMapper程序变压器。我们将结合属性映射、属性设置和特征类型映射来研究高级过滤。对于伟大的模式映射来说,责任重大,因此我们还将提供一些关于常见错误和调试复杂模式映射的提示。
过滤器动作集了类型“IF语句”,通过该FME可以在查找表中匹配映射到的映射应用特征的。在这个例子中,将的SchemaMapper使用多个过滤器属性来定义的条款。有在被包括在工作区模板的查找表中定义六个项目:
MaterialTypeAttribute
:限定所述管材料的属性的名称。材料类型值
:管道材料的潜在值。。DiameterAttribute
:定义管道直径的属性的名称。直径值
:管道直径的潜在值。StatusAttribute
:定义管道状态的属性的名称。状态值
:管材状态的潜在价值。在SchemaMapper中的“查找表参数”窗口中,“预览”窗格显示每个条件子句,其中填充了我们要用作筛选器的属性值:
步骤1 -要利用这些,请在SchemaMapper中设置多个筛选器操作。每个过滤器特性动作将处理一对属性和条件值。筛选器功能操作的设置如下:
这些操作一起创建了一个条件子句,该子句声明:
如果MaterialTypeAttribute=MaterialTypeValue和DiameterAttribute=DiameterValue和StatusAttribute=StatusValue
例如:
IF材料=钢和直径= 300和LifecycleStatus =活动
使用这一套逻辑的条件下,现在的SchemaMapper可以基于多个过滤属性的变革行动。
除了操纵模式类型和属性,该变压器的SchemaMapper可用于集合的属性值。使用中的SchemaMapper“新属性”动作,属性和它们的值可以被添加到数据集或架构中的现有属性进行修改。
例如,设置特征符号的值:
autocad颜色
:用于定义要素颜色的属性的名称。颜色
:该值等效的数值以所希望的颜色autocad_线宽
:用于定义要素线宽的属性的名称重量
:等于所需线宽的数值。为了简化映射表,将每个属性作为单独的行添加。查找表中将有更多的行,但更容易进行编辑。您可以在CSV预览窗口中看到:
每种组合类型
,直径
和状态
有两行-每个符号属性一行。这是因为FME不会在它找到的第一个匹配处停止,而是继续并执行它找到的所有映射。此技术使“映射字段”对话框变得简单,因为定义一个映射将设置多个属性。
第2步 -在SchemaMapper参数中添加“New Attribute”操作。
当与过滤功能作用一起使用时,显示画面也将是这样的:
最后,当运行工作区时Water_Distribution / wMain
,这将是下面的输出:
在输出中的特征数据组已被分配基于其管属性(大小,状态,材料)不同的颜色/重量。所有这一切都使用三个筛选器操作和内部的SchemaMapper一个新的属性一蹴而就。
要素类型映射也可以包含在查找表中。使用format属性fme_feature_type
,此示例显示如何将要素类型映射添加为新行,类似于上面创建符号的方式。
例如,已将要素类型映射添加到行:
材料,St,直径,450,生命周期状态,活动,fme U特征U型,小钢管
它看起来像这样在预览的SchemaMapper:
然后,可以在工作区中使用扇出或类似方式处理要素类型。
下面的主题处理如何使用这台变压器时,解决问题的能力。它包含了技巧和提示,以帮助解决可能出现的任何问题。
查找表中的行顺序很重要。FME将继续应用映射,因为它在查找表中是自上而下工作的。例如,给定查找表中的这两行:
材料,钢,直径,450,LifecycleStatus,活动,autocad_color,1(红色)的材料,钢,直径,450,LifecycleStatus,活动,autocad_color,2(黄色)
该功能将首先被指定为红色,然后将被黄色覆盖。
这可以知道有用:
1) 可能存在导致意外映射的重复子句集。
2)的顺序可以被用于设置一个“默认值”。例如,把此行的查找表的顶部:
材料,钢,,,,autocad颜色,1
型“钢”的所有功能将匹配这一点,并给予红色(无论大小或地位的)。然后,在所述查找表进一步,设有一个匹配直径
和生命周期状态
将设置为不同的值。因此,输出中仍为红色的所有特征都是与完整过滤器不匹配的特征。这些红色特性可以用作错误检查映射逻辑的方法。换言之,应该首先在查找表中放置不太特定的筛选器,然后再放置更为特定的筛选器。
使用此技术的关键是,它只在catch all高于其他映射时才起作用。如果它在下面,那么它将重置任何已经映射的内容。
3) 可以设置辅助映射以简化工作区。
例如,以这个查找表为例:
材料,钢,新材料,所有管道材料,球墨铸铁,新材料,所有管道材料,PVC,新型,所有管道材料,所有管道,autocad颜色,5
在这个例子中,某些功能被映射到输入所有管道
然后输入所有管道
映射到蓝色(#5在AutoCAD颜色索引中)。该表将所有要素映射到新要素类型,然后将该要素类型映射到新颜色。只有当特征类型映射在颜色映射之前时,这才有效。
该变压器的SchemaMapper添加属性_schemamapper_行ID
每个映射的特征。这是在架构表的映射过程中引用的行号的列表。
在某些情况下,您可能必须减小架构映射表的大小,以仅包含特定功能类型应引用的行,然后再从这些行开始工作。模式表中行的顺序很重要-请参见上文。更一般的过滤器应该放在查找表的第一位,后面跟着更具体的过滤器。
你不必只使用一个的SchemaMapper。你可能只是域值映射和要素类型和属性映射查找表的另一个,并在您的工作空间2个的SchemaMapper变压器。
您知道FME函数调用可以嵌入到SchemaMapper查找表的value字段中吗?当读取表时,FME将运行它们。例如,可以将值设置为:
@UpperCase(@Value(A))
更现代的函数需要包装在@Evaluate函数中,如下所示:
@EvaluateExpression(unused1,<在> DateTimeNow,unused2)
这不太可能是一种常见的用法,但它是可以做到的。
下载内容如下:
此处使用的数据源于温哥华市, 不列颠哥伦比亚省。它包含了开放政府许可协议进行许可信息 - 温哥华。
在这种情况下,我需要解析同一单元格中的多个查找值。我已经成功地实现了上面的解决方案,但是无法通过seam来解决多编码域问题。
例如:
数据表:
列1 | 二氧化碳 |
1 | 无效的 |
2 | 无效的 |
1,2个 | 无效的 |
查阅表格:
Col1Code | COL1值 |
1 | 绿色 |
2 | 红色 |
输出表(目标):
COL1 | COL2 |
1 | 绿色 |
2 | 红色 |
1,2个 | 绿色,红色 |
有什么想法吗?
我不能创建一个包含所有的组合例如查找表“1,2”,“2,1”,因为我与成千上万的数据集和查找值的工作。
谢谢你的回复@标记保险箱亚搏在线
虽然我遇到过非s57数据,是的-这是一个s57任务,我正在试图解决。
但是也有一些列表(L)型S57中的许多属性。使用上述解决方案将是伟大的一列,但我需要在许多要素类(数百个)要做到这一点查找到许多属性。这将导致有大量的AttributeSplitters和Databasejoiners。
©2020安全亚搏在线软件公司|合法的