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