FeatureMerger
将一组功能的属性和/或几何合并到另一组特征上,基于匹配的密钥属性值和表达式。
典型的使用
- 基于一个共同的键属性值或表达式,组合来自两个不同特性流的属性和/或几何图形。
它是如何工作的?
FeatureMerger通过它的输入端口接收两个特性流。
请求者:请求者是将接收新属性和/或几何的功能。
供应商:供应商提供将合并到请求者的属性和/或几何。
之间的匹配请求者和供应商是根据加入在参数对话框中的配置。Join条件可以是简单的,也可以是复杂的,可以使用属性值、常量、函数或其中任何一个表达式形式的组合。可以定义多个连接条件(特性必须满足所有条件才能匹配)。
当一个请求者找到匹配供应商的属性和/或几何形状供应商合并到请求者.
- 如果请求者已经具有供应商也具有的属性,则可以保留或覆盖该属性的请求者的原始值。
- 一个供应商可以被多个请求者使用。
- 许多供应商可以合并到单个Requestor上。
- 属性名冲突时,可以使用解决冲突参数,以及空值是否遵循相同的行为忽略null参数。
请求者特征匹配供应商属性中指定的每个键对(支持表达式)时的特性加入表对两者都具有相同的值请求者和供应商特征。
例子
在这个例子中,我们有两个数据集—历史犯罪报告的CSV文本文件和公共街道的形状文件。这两个数据集都有一条共同的信息,即“百”块形式的地址。
的FeatureJoiner执行简单的属性值连接可能更有效,但是,每个数据集中的地址格式略有不同。CSV数据使用字符串“XX”代替地址中的零:
而街道数据则采用更传统的形式,带有零:
我们的目标是将街道几何图形合并到犯罪数据中——为每个犯罪记录生成一个输出特征。所以,CSV数据被路由到请求者输入端口,和街道路由进入供应商港口。
在参数对话框中,我们需要创建一个加入一双请求者和供应商值。由于地址的格式不相同,我们将调整其中一个,构造一个密钥。在文本编辑器的帮助下,我们创建了一个表达式,该表达式将用“00”替换地址的“XX”,从而匹配街道(供应商)数据的格式。
配对的另一半是属性值HBLOCK从街道数据。
功能合并类型被设置为属性和几何.的默认值属性积累(合并供应商)将提供正确的结果。
的合并后的输出包含犯罪记录,现在带有街道和相关街道属性的几何图形。注意,地址格式实际上并没有被所构造的表达式改变——它只是用于匹配求值。在这个地方,发现了137个犯罪记录。现在每一个都有(相同的)几何形状。
要查看这个示例的反面——将所有犯罪记录附加到单个街道上——请参阅下一个示例。
在这个示例中,我们反转了上面示例中的场景。我们希望将所有的历史犯罪记录合并到街道数据中,每个街道线段(块)产生一个记录,并使用列表属性包含犯罪数据。
在这种情况下,街道是请求者特征,犯罪数据是供应商.
在参数对话框中,我们再次创建一个加入对,使用表达式匹配这两种(略有不同)的100个块格式。的功能合并类型是属性只,因为请求者(街道)已经有了想要的几何形状。
过程重复的供应商启用。如果不这样做,第一个匹配将被处理,其余的将被丢弃。匹配的供应商(犯罪)数量将保存在供应商数量,名叫Incident_Count.
生成列表已启用,并给出列表名称的Crime_Records.我们只会添加选择属性,然后选择类型和一年.
的合并后的输出特性现在有列表属性,包含CSV中的所有匹配记录。注意Incident_Count属性。
使用笔记
- 对于简单的连接,FeatureJoiner可以提供比FeatureMerger更好的性能。然而,FeatureJoiner只接受属性值作为键,而不接受构造的表达式,并且不支持列表属性。此外,FeatureMerger能够(选择性地)在多个匹配供应商的情况下限制输出到一个功能,而FeatureJoiner将为所有匹配创建多个功能。
- 对于使用SQL语法的复杂连接,或两个以上的输入特性流,请考虑使用inlinequerier.
- 在需要多个特性合并的地方,考虑使用inlinequerier代替。
- 如果要查询的所有数据已经存在于支持sql的数据源中,那么使用SQLCreator或者SQLExecutor,它允许数据库在进入FME环境之前直接执行数据的查询和过滤。
- 要在工作空间中已经存在的特性和驻留在外部数据库中的数据之间执行连接,请考虑databasejoiner..
- 要执行请求者密钥的连接列表属性,考虑使用ListBasedFeatureMerger.
- 加入功能匹配几何形状,考虑匹配器.FeatureMerger不接受几何体作为键。
选择特征连接方法
许多变形金刚基于匹配属性,表达式和/或几何来执行数据加入。选择一个特定的加入任务时,考虑因素包括连接,数据格式,索引,冲突处理和期望结果的复杂性。一些变形金刚使用SQL语法,并直接访问外部数据库。他们可能会或可能不支持列表属性阅读和创作。
一般来说,选择一个最具体的任务,您需要完成将提供最佳的性能结果。如果有不止一种方法可以完成(通常是这样),那么在性能测试替代方法上花费时间可能是值得的。由于读取外部表时是否存在关键索引(与工作空间中已经存在的功能相反),性能可能会有很大差异。
变压器 |
匹配的 |
使用SQL语句 |
可以创建列表 |
输入类型 |
值得注意的 |
描述 |
---|---|---|---|---|---|---|
FeatureJoiner | 属性 | 不 | 不 | 特性 |
|
通过基于公共键属性值组合特性的属性和/或几何形状来连接特性。执行等同于Inner、Left和Full SQL连接的操作。 |
FeatureMerger | 属性 | 不 | 是的 | 特性 |
|
将一组功能的属性和/或几何合并到另一组特征上,基于匹配的密钥属性值和表达式。 |
ListBasedFeatureMerger | 列表属性为单一属性 | 不 | 是的 | 特性 |
|
根据匹配,将一组特征的属性和/或几何形状合并到另一组特征上列表属性带有键属性值和表达式的值。 |
inlinequerier | SQL查询 | 是的 | 不 | 特性 |
|
从引入的特性创建一组SQLite数据库表,对它们执行SQL查询,并将结果作为特性输出。 |
SQLCreator | SQL查询 | 是的 | 不 | 外部数据库 |
|
根据对数据库执行一次SQL查询的结果生成FME特性。为SQL查询结果的每一行创建一个FME特性。 |
SQLExecutor | SQL查询 | 是的 | 不 | 外部数据库 |
|
针对数据库执行SQL查询。为进入变压器的每个发起功能发出一个查询。查询的启动功能和结果都可以作为特征输出。 |
databasejoiner. | 属性 | 不 | 是的 | 外部DB及特性 |
|
基于一个或多个通用键,将外部表的属性连接到工作空间中已经存在的特性。不需要SQL知识。非阻塞的变压器。 |
匹配器 | 几何和/或属性 | 不 | 是的 | 特性 |
|
检测彼此匹配的特征。当特性具有匹配的几何形状、匹配的属性值或两者都具有时,它们就被声明为匹配。还可以指定特性之间必须不同的属性列表。 如果只匹配属性(而不是几何形状),使用featuremerge或其他方法将提供更好的性能。 |
配置
输入端口
功能将接收新的属性和/或几何形状的功能连接到供应商港口。
属性的新属性和/或特性的几何形状的来源请求者港口。
注意,通过设置过程重复的供应商来是的,多个供应商可以合并到每个请求者。这些供应商可能来自不同的来源(例如不同的数据库表)。
输出端口
匹配一个供应商(或者可能是多个供应商,如果过程重复的供应商被设置为是的).
请求者,不匹配任何供应商。如果一个加入key在Requestor特性上为空或缺失,该特性将输出到该端口。
被至少一个请求者找到的供应商。
Note: ">笔记:供应商仍然可以通过该端口输出,即使它的属性没有被合并。之所以会出现这种情况,是因为所有属性都已经出现在Requestor中,或者是由早期的supplier提供的。
供应商做的不匹配任何请求者。如果一个加入key为空或在Supplier特性上缺失,则该特性将输出到此端口。
参数
集团 | 输入特征可以用集团参数。如果你选择集团属性,那么特性之间的引用只有在它们共享所选属性的公共值时才会被解析。 如果你不选择集团属性,所有的特征一起处理。 如果您有多个Reader,一个典型的用法是按reader_id分组,以确保在正确的特性集内解析引用。 |
组的模式 | 进程结束(阻塞):这是默认行为。只有当所有输入都存在时,才会在这个转换器中进行处理。 组更改时的处理(高级):此变压器将按顺序处理输入组。输入流上Group By参数值的更改将触发对当前累积组的处理。这可能会提高整体速度(特别是对于多个大小相同的组),但如果输入组不是真正有序的,可能会导致不希望的行为。
考虑使用集团
有两个典型的使用原因组更改时的处理(高级).第一个是要分组处理的传入数据(并且已经按顺序排列了)。在这种情况下,结构规定了按用法分组——而不是考虑性能。 第二个可能的原因是潜在的性能提升。 当数据已经排序(或使用SQL命令声明),因为FME需要的工作较少。如果数据需要排序,可以在工作区中对其进行排序(尽管增加的处理开销可能会抵消任何收益)。 根据数据流的数量进行排序变得更加困难。多个数据流几乎不可能按正确的顺序排序,因为所有的特征都匹配集团需要在属于下一个组的任何功能(任何特征类型或数据集)之前到达。在这种情况下,使用集团与进程结束(阻塞)可能是等效的更简单的方法。 Note: ">笔记:多个特征类型和来自多个数据集的特征通常不会自然地以正确的顺序出现。 与许多情况一样,使用您的数据测试工作区中的不同方法是识别性能增益的唯一明确方式。 |
供应商第一次 | 启用此选项后,变压器将假设所有供应商将在任何请求者之前进入变压器。一旦第一个请求者到达,它将处理和输出请求者,因为它们进入。在处理所有请求者后,供应商将输出。 Note: ">笔记:用户有责任确保所有供应商在请求者之前到达。当启用此选项时,转换器将在收到第一个Requestor后停止接受supplier。 |
请求者 | 的表达式请求者功能匹配供应商特性表达式。 表达式可以是常量、属性值、函数或混合物。从求值表达式中删除前导和尾随空格字符。当所有Requestor表达式的修剪值与它们对应的Supplier表达式的修剪值相等时进行匹配。 |
供应商 | 的表达式供应商功能匹配请求者特性表达式。 表达式可以是常量、属性值、函数或混合物。从求值表达式中删除前导和尾随空格字符。当所有Requestor表达式的修剪值与它们对应的Supplier表达式的修剪值相等时进行匹配。 通常,供应商将具有定义的表达式,该表达式导致与请求者唯一的匹配,并且变压器忽略任何重复的供应商。但是,如果过程重复的供应商参数设置为是的,则其表达式与相应的Requestor表达式相匹配的所有supplier将被组合到该Requestor上。 |
比较模式 | 比较模式列指定如何进行比较请求者和供应商属性值。如果指定了自动或数字,则在比较之前将尝试将属性值转换为数字。 |
功能合并类型 | 此参数指定要合并到已完成的特性上的内容。选择包括:
|
拒绝Null和丢失的键 | 是的:包含空连接键或缺失连接键的任何Requestor或Supplier特性将通过<拒绝>港口。 没有:null和缺少键被视为空字符串。 |
如果在给定的Requestor中找到多个Supplier,则过程重复的供应商未启用,然后首次输出后的每个供应商<拒绝>端口,只有第一个供应商将与请求者匹配。
如果过程重复的供应商时,重复的provider都与相应的Requestor匹配。属性根据属性积累模式合并,并可选地输出为列表属性,使用指定的列表名称.使用指定的名称合并供应商几何图形几何合并类型.
请注意,使生成列表也含蓄地使过程重复的供应商.
几何合并类型 | 指定如何将重复的供应商合并到请求者。只有当功能合并类型指定合并几何图形。选择包括:
|
||||||||||||||||||
宽容 | 在二维中,几何图形在被认为相等之前的最小距离,以地面单位表示。如果容忍是没有一个,几何形状必须完全相同被认为是相等的。如果容忍是自动,将基于输入几何形状的位置自动计算公差。另外,可以使用自定义公差。 |
||||||||||||||||||
连接Z模式 | 如果适用,选择处理z值的方法。
连接Z模式
当在2D(忽略Z)中查看时,路径(可以定义多边形的边界)可能会像下图所示的那样是关闭的。同样的路径,在3D视图中,可能会显示为打开的,如下图所示。 要指定在3D中如何(以及是否)关闭路径,请选择列出的模式之一。
|
||||||||||||||||||
供应商数量 | 属性的名称,该属性存储匹配Requestor的供应商数量的计数。 |
如果Supplier和Requestor特性上的属性共享相同的名称,但不是以FME_,然后他们被视为冲突。
累积模式 | 合并供应商请求者特性将保留所有自己的非冲突属性,并将额外获得供应商特性的任何非冲突属性。该模式将处理基于解决冲突参数。 前缀供应商请求者特性将保留它自己的所有属性。此外,Requestor将获得反映供应商特性属性的属性,名称以前缀参数。 只使用供应商:请求器功能将删除其所有属性,除了从中开始的几何属性fme_.然后,将从一个(任意)供应商功能的所有属性放在请求者上。 |
解决冲突 | 使用请求者:如果发生冲突,将保持Requestor值。 使用供应商:如果发生冲突,则供应商的值将转移到请求者上。 |
忽略null | 不:像对待其他属性值一样对待null属性值。 是的:将null属性值视为不如其他属性值不那么重要。无论何种空值都合并为非空值,无论何种方式都要占用非空值解决冲突设置为。 Note: ">笔记:null和其他属性值始终比缺少属性值更大。也就是说,无论何时属性值都与缺少属性值合并,无论如何,属性值应占用忽略null和解决冲突设置。 |
前缀 | 为了防止由于Requestor属性已经存在而忽略Supplier属性,您可以选择指定一个前缀,该前缀将在添加到Requestor时应用于每个Supplier属性。 当一个Requestor特性有多个Supplier特性时,多个Supplier属性值将合并到同一个带前缀的属性中。当多个Supplier特性具有相同属性时,通常会从最后一个特性中获取生成的属性值。然而,这个过程是由忽略null参数。 |
如果有重复的供应商和生成列表,则任何与Requestor组合的supplier都将其属性添加到Requestor上的指定列表中。请注意,使生成列表也含蓄地使过程重复的供应商.
Note: ">笔记:属性列表不能从Workbench中的输出模式访问,除非首先使用对它们进行操作的转换器来处理它们,例如list exploder.或者ListConcatenator.另外,AttributeExposer可以使用。
列表名称 | 为列表属性输入一个名称。 |
添加到列表 | 所有属性:与Requestor组合的Supplier的每个属性都将添加到指定的列表中在列表名称中. 选择属性:只有所指定的属性选择属性参数将添加到指定的列表中列表名称. |
选择属性 | 要添加到列表中的属性添加到列表是选择属性. |
保护功能秩序 | 此参数控制特性退出变压器的顺序。 当变压器有多个输出端口时,通常一次只输出一个端口。有时,保持特性到达的顺序可能是有用的,根据需要从一个端口切换到另一个端口。这允许保留特性顺序,尽管可能会以处理效率为代价。 选择特征排序的方法。
|
编辑变压器参数
使用一组菜单选项,可以通过引用工作区中的其他元素来分配变压器参数。一些变压器也可提供更高级的功能,例如高级编辑器和算术编辑器。要访问这些选项的菜单,请单击除适用的参数旁边。有关更多信息,请参阅变压器参数菜单选项.
定义值
有几种方法可以定义在Transformer中使用的值。最简单的方法是简单地输入值或字符串,其中可以包括各种类型的函数,如属性引用、数学和字符串函数以及工作空间参数。有许多工具和快捷方式可以帮助构造值,通常可以从值字段附近的下拉上下文菜单中获得。
使用文本编辑器
文本编辑器提供了一种方便的方法来构建来自各种数据源的文本字符串(包括正则表达式),例如属性,参数和常量,其中结果直接在参数内使用。
使用算术编辑器
算术编辑器提供了一种方便的方法来构建来自各种数据源的数学表达式,例如属性,参数和特征函数,其中结果直接在参数内使用。
条件值
根据一个或多个通过或失败的测试条件设置值。
内容
表达式和字符串可以包括许多函数、字符、参数等等。
当设置值时——无论是直接输入参数还是使用其中一个编辑器构造的值——包含String、Math、Date/Time或FME Feature Functions的字符串和表达式将对这些函数进行计算。因此,这些函数的名称(以@<的形式)function_name>)不应该用作字符串的文字值。
对话框选项-表格
带有表格样式参数的转换器有额外的工具来填充和操作值。
行重新排序 |
单击行项目后启用。选择包括:
|
剪切、复制和粘贴 |
单击行项目后启用。选择包括:
剪切、复制和粘贴可以在变压器内部使用,也可以在变压器之间使用。 |
过滤器 |
开始键入一个字符串,矩阵将只显示匹配这些字符的行。搜索所有列。这只影响转换器中属性的显示——它不会改变输出的属性。 |
进口 |
Import使用从数据集读取的一组新属性填充表。具体应用因变压器而异。 |
重置/刷新 |
通常将表重置为初始状态,并可能提供额外的选项来删除无效项。不同的变压器行为不同。 |
笔记:并不是所有的工具都可以在所有的变压器中使用。
参考
处理行为 |
|
功能持有 |
是的 |
依赖关系 | 没有一个 |
别名 | |
历史 |
FME社亚搏国际在线官网区
FME社区是演示亚搏国际在线官网、操作指南、文章、faq和更多内容的地方。获得问题的答案,向其他用户学习,并对新功能提出建议、投票和评论。
搜索所有关于FeatureMerger的结果在FME社区。亚搏国际在线官网
例子可能包含根据开放政府许可证-温哥华和/或开放政府许可证-加拿大获得许可的信息。