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