span8
span4
许多FME转换器专门设计用于处理列表属性。它们可用于创建、操作、转换和分析列表。
一些最重要和高度使用的列表转换器是:
我们将在下面更详细地探讨这些特定于列表的转换器!还有一些列表转换器可用FME中心
下载并在FME workbench中打开这些工作空间模板,以查看列表转换器的一些示例。
咨询表格看它的六个变压器的出现在每个区模板:
工作区模板:listexploder.fmwt
的ListExploder是一个常用的列表转换器。事实上,在487部变形金刚中,它的受欢迎程度排在第32位!其中一个原因是ListExploder它非常受欢迎,因为它可以将列表简化为具有非列表属性的不同特性:它将列表分解为组成元素,为每个列表元素创建一个特性。使用城市树点数据使用转换器创建列表以教程为例,生成的模式通过basic运行ListExploder将看起来像以下:
注意列表中的每个列表属性_trees {}
属性在每个特性输出中成为独立属性ListExploder。还要注意新的_element_index
属性,它指示每个特性的列表元素的原始索引:这是源列表中的每个元素(即_tree {0},_tree {1},_tree {2}
)已作为单独的功能输出。
让我们转向ListExploder工作空间,以获得更详细的示例。此工作区显示如何读取一组多边形特性,将每个顶点的坐标对提取到列表属性中,然后使用ListExploder将它们分解为单独的特性,以便在文本文件中以坐标对的行形式编写。
工作空间读取空间数据集—在本例中,从MapInfo选项卡文件中读取park数据。数据被整理,从每个多边形中提取坐标,并将其存储在单个属性中,作为由分号分隔的长行值。
这从一个斯坦利公园的乐趣:
现在我们已经有了所有可用的坐标,我们可以将这个长属性值转换为list属性。
下面是斯坦利公园的坐标了,但在列表格式:
请记住,我们的最终目标是输出一个看起来像这样的文本文件:
赤柱公园491042.12,5460549.07 490995.16,5460561.47 490991.53,5460562.19。。。
本质上,我们希望文本文件中的每一行都是FME中的一个特性,但是目前我们在一个特性的list属性中包含了一个park的所有坐标。这是一个完美的场景ListExploder,因为它将把这个坐标列表平展成单独的特性,每个特性对应一个列表元素。如果您运行工作区,请注意特性计数的变化74
来4301
在经历了ListExploder。
我们可以潜得更深ListExploder参数,看看在引擎盖下发生了什么。的“属性累积”标题下ListExploder参数,可以确定保留哪些属性以及在分解后的特性上使用什么累积模式。这里要问的主要问题是,“难道我要继续所有属性,或者我要优先考虑无论从原始数据集或爆炸列表保存属性?”
在“属性累积参数”中存在许多组合,我们建议参考ListExploder变压器资料详细描述所有的可能性,但请继续阅读,以得到一个精简的解释!
简而言之,有三种积累模式:
在上述任何一种累加模式中,如果原始属性和列表属性彼此重复,则根据解决冲突
参数,该参数本身可以对原始属性或列表属性进行优先级排序。需要考虑很多参数,但是要记住有两组属性在起作用—来自原始特性的属性和包含在即将爆炸的list属性中的属性。这都是关于保留或删除这些属性的子集。
在工作区中,与列表操作并行,创建每个公园的标头特性,并将其排序到坐标列表中,这样公园名称将出现在输出文本文件中每个列表的开头。
看看最终输出来获得的,我们已经走了多远感在源数据读取之后:
当我们读取公园数据时,FME在后台存储了所有这些几何信息。我们将其提取到一个包含一长串值的属性中。然后,我们使用元素索引将数据操作为实际的列表属性。因为FME可以识别列表属性的结构,所以我们能够将每个元素转换为一个独特的特性,这样文本文件中的每一行都代表一个坐标对。
类似于ListExploder,一个ListIndexer将属性映射到新特性。但是,它并没有爆炸所有的列表属性,它只爆炸给定元素索引处的属性(例如。0,1,2 ..
)。例如,一个ListIndexer的坐标列表ListExploder上面的示例将给出整个坐标列表和一个新属性,该属性包含transformer参数中定义的给定索引的一对坐标。在本例中,指定的索引是0
新属性的前缀是“1”,因为它是列表的第一个坐标:
工作区模板:workingwithlists.fmwt
的ListElementCounter是什么计数器transformer,它将一个数值属性添加到一个特性中,并随着每个新引入的特性增加该值。柜台在ListElementCounter计算传入列表中的元素数量,而不是计算传入特性类型中的特性数量。我们可以把这个变压器与StatisticsCalculator在我们的列表中运行报告。
例如,在提供的工作区中ListElementCounter中的元素计数_parks {}
列表。由于元素的数量表示位于特定多边形内的点的数量,因此输出可以回答以下问题什么是一个公园内发现的树木数量最少?什么是最?有多少公园有树?
在这里,我们可以看到,中国溪公园北有清单2元计,因为没有包含在两个记录我们_parks {}
列表:
工作区模板:workingwithlists.fmwt和listhistogrammer.fmwtt
的ListHistogrammer构建列表中找到的值的直方图,并在新列表属性中返回这些值。将对新列表进行排序,以便出现次数最多的值排在第一位。中的数据使用此转换器正与列表工作区,我们可以很容易地找到拥有最多树木的公园,以及每个公园中有多少物种。另外,您可以指定自己的直方图列表名称,这使得在一个特性上可以有多个直方图。
这里,我们使用的计数一个公园内的每个树种的发生ListHistogrammer:
在ListHistogrammer工作空间,用户需要计算每种类型有多少个特性(区
),以收集分区数据。可以通过创建源数据的人工聚合和列表,然后通过ListHistogrammer。
工作空间实际上更进一步:它使用一个定制的转换器将直方图转换成一组属性和值。它还展示了AttributeExposer从分区数据导入值,以便可以公开和检查新生成的属性。
工作区模板:workingwithlists.fmwt
的ListConcatenator可用于获取列表并将列表中的元素串成逗号分隔的单个属性值。这对于将列表信息的一部分提取到单个属性中非常有用。
在我们的例子中,我们可以添加一个逗号分隔的列表TreeID
每个公园的信息的值。
事实上,它甚至不必是一个逗号分隔的列表—您可以指定分隔符为任何您想要的字符。甚至像换行符这样的特殊字符也可以使用。
工作区模板:listbuilder.fmwt
有时,您可能需要手动创建一个列表ListBuilder变压器由一组特征的属性组合为单个列表结构使此。的ListBuilder可以被认为是的逆ListExploder或作为聚集的特征和它们的属性到包含在列表中的属性的所有数据的单个特征的一种方法。
在ListExploder工作区,我们希望在这个结构中的文本文件来查看数据:
[ParkName] [vertex.coordinatepair0] [vertex.coordinatepair1]。。。[ParkName]。。。
这是伟大的视觉,伟大的记录保存,并在其他系统中使用灵活的格式。但是,如果我们想继续保持类似的逻辑结构,每个公园的名字坐标列表,但保留列表数据格式的力量,我们可以使用ListBuilder而不是ListExploder操纵我们的坐标。
在这个例子中,ListBuilder聚集体的所有元素_coordinateList {}
属性由创建AttributeSplitter还有ParkName
。因为分组依据参数由设置为组ParkName
,一个特点是每个公园包含该园区所有坐标的嵌套列表输出!
ListBuilder参数:
输出是在结构上与我们的视觉文本输出非常相似,但在列表格式。注意嵌套结构,而且ParkName
现在的部分_CoordsList {}
列表。我们只是合并多个属性到列表和创建的列表进行列表!因此,许多名单。
注意:ListBuilder并删除几何,所以有必要使用重新创建几何VertexCreator或者如果需要类似变压器的几何形状。
这里使用的数据来自经提供开放的数据起源温哥华市, 不列颠哥伦比亚省。它包含了开放政府许可协议进行许可信息 - 温哥华。
©2019安全亚搏在线软件公司法律