大多数转换要考虑源数据的结构(我们拥有的)和用户的目标数据的结构。需要(我们想要的)。动态转换的布局既不反映源结构,也不反映目标结构。它是一种通用布局,旨在处理数据,而不考虑使用的结构。
动态读模块
在读模块方面,动态工作空间与使用合并参数非常相似。要素类型可自由进入工作空间,无论它们是否在其中定义。无论属性或几何类型如何,也会读取数据。
动态写模块
动态工作空间的写模块端模仿读模块部分;要素类型将写入目标数据集,无论它们是否在工作空间中定义。
此外,所有属性和几何都会被写入,无论它们是否也在写模块要素类型中预定义。
当作者使用“生成工作空间”对话框创建转换时,所谓的工作流有两个选项:静态结构和动态结构。
“静态结构”选项是包含结构的工作空间的默认值。选择“动态结构”选项将创建一个具有动态读模块和写模块的无结构工作空间。
但是,也可以创建一个工作空间,其中只有读模块是动态的,或者只有作者…
“添加读模块”对话框具有类似的静态和动态选项;但是,在本例中,我们尝试通过标注它们“单个要素类型”和“单个合并要素类型”来使它们更加用户友好:
实质上,动态读模块类似于仅设置合并要素类型选项。
添加写模块对话框包含有关如何定义要素类型及其属性的选项。最常用的是手动和自动。还有一个选项可以在动态模式下添加写模块:
注意:
自动与动态。自动属性从与其连接的任何转换器中获取其定义。如果“源数据集”参数发生更改,则该更改将不起作用。
动态属性是不同的。如果更改了SourceDataset参数,则属性定义将来自读取的任何源数据,而不管连接到该源数据的内容如何。
蛋蛋的,对于读模块来说,真正发生的只是打开了合并功能类型设置:
结构的三个组件1)要素类型、2)属性、3)几何、都具有不同的设置方式。
源数据结构
默认情况下,动态转换中的写模块结构不是在工作空间中定义的,而是由源数据集定义的。因此,无论选择什么数据集作为输入,都会定义所选的输出结构。
但是,写模块要素类型中的参数允许我们更改该结构的定义方式。我们可以选择将结构从完全不同的数据集带到源。
写模块功能类型具有标记为“结构源”的动态参数:
此参数定义将从何处获取目标结构。默认情况下,此参数设置为正在读取的任何源数据集。这样,输出结构始终是输入的副本。
但是,可以将其设置为使用任何格式的任何读模块数据集作为传出结构的源。
例如,此处的工作空间作者正在将公园数据转换为Esri地理数据库,但已选择Excel电子表格作为输出数据集的所需结构。
如果数据是扇出的(例如通过NeighborhoodName),则Excel电子表格应该为每个邻域提供不同的工作表,并且该结构将用作结构此工作空间中的输出。
结构源读模块
可以将“源结构”参数设置为指向任何读模块作为动态结构的源。但是,在大多数情况下,我们从数据集中需要的只是结构,而不是数据。
这是可以使用结构源读模块的地方。
结构源读模块是返回数据集结构但不返回数据的读模块。一个是使用菜单栏上的“读模块”>“将读模块添加为资源”添加的:
在这里,用户将PostGIS数据库添加为资源,并显示在“导航”窗口中:
一旦可用,资源读模块就可以用作动态写模块的源结构。
为什么使用外部结构?
使用外部数据集结构的主要原因是遵循固定数据标准。也许最有用的方面是,如果数据集的结构发生更改,则工作空间会自动使用它。无需手动更新工作空间,因为输出要求已更改。
SchemaMapper转换器对于将数据与所需的结构进行协调非常有用-这是因为SchemaMapper也可以使用外部查找表,这意味着动态可以更改工作空间以满足任何所需的输出结构,而无需在workbench中进行编辑!
结构有三个主要组件:
要素类型
属性
几何类型
定义要素类型名称
在静态写模块要素类型中,要素类型名称通常为固定值。但是,它也可以通过属性(或从属性构造的字符串)来定义。我们称之为Fanout。
在动态平移中,会自动设置扇出。默认情况下,名为fme_feature_type的FME属性用作要素类型名称:
fme_feature_type是一个FME属性,用于在传入要素上存储原始要素类型的名称。默认使用此属性是有意义的,因为这样所有数据都将写入与其来源相同的要素类型,并且我们得到的输出是输入的副本。
但是,如果您愿意,没有理由不能使用其他属性来定义一组不同的输出要素类型:
例如,在这里,作者使用NeighborhoodName来提供要创建的图层的名称。例如,要素可能具有“市中心”、“西区”或“锦绣”值。
在运行时,FME会查找每个源结构,以查找名为Downtown的表。它将使用该表的结构来定义动态写模块输出中允许的属性和几何图形。
结构要求
当然,请注意,这与扇出并不完全一回事。扇出从静态定义创建图层。动态工作空间从其他位置(源结构)获取该定义。因此,所选要素类型名称必须与该源结构中存在的图层匹配。
定义属性名称
这可能是动态转换中最复杂的部分,所以让我们一步一步地进行解释,在必要时回到一些旧的地方。
正如我们所看到的,在动态转换中,每个传入的要素都有一个属性(fme_feature_type或其他属性),该属性指定到哪个要素键入要写入的数据。
结构源参数定义这些要素类型的存在位置,并使用它们来定义写入输出的属性和几何类型。
例如,在这里,我们有一组正在写入Esri地理数据库的公园数据。请注意,输出要素类型(表)名称设置为邻域名称属性。
结构是从Excel电子表格中获取的,并添加为资源读模块。如果对于特定功能,NeighborhoodName=“Strathcona”,则作者在Excel电子表格文件中查找名为Strathcona的工作表,然后写入使用与该表相同的属性的要素。
但是。…在此对话框的“源结构”参数下方是“结构定义名称”的设置。结构定义名称将覆盖属性定义:
例如,在这里,用户仍指定NeighborhoodName以提供要写入的要素类型,但通过说它们必须来自表来覆盖属性叫公园。
结构定义名称是一个固定值,所有输出要素类型都具有相同的属性定义。但是,结构定义名称也可以来自属性;意味着一个属性定义要素类型名称,另一个属性定义属性结构将从中获取的要素类型!
添加或删除属性
除了指定要使用的属性集外,有时(即使在动态转换中)也需要添加或删除特定属性。这很简单。
添加新属性
将新属性添加到动态要素类型的所有输出中,只需编辑要素类型定义以添加该属性即可:
换言之,添加到要素类型定义中的任何属性都会添加到通过该定义输出的所有要素中,而不管源结构或资源结构如何。
例如,在上面,用户添加一个属性以在工作空间中存储区域计算器转换器的结果。
删除属性
删除现有属性是通过动态结构定义对话框完成的。该对话框的底部是用于删除属性的字段:
编辑[…]按钮将打开一个对话框,您可以在其中选择或手动输入源结构中但不希望在输出中显示的属性
动态几何类型
结构的三个主要组件:
要素类型
属性
几何类型
…最后一个要研究的是几何类型;特别是工作空间作者如何确定哪些几何对特定要素类型有效。
输出数据集中允许的几何类型取决于所使用的格式。某些格式允许任何几何(或几何混合)存在于要素类型中。
但是,某些格式不允许在单个要素类型中混合使用几何,这可能会导致问题。
例如,地理数据库写模块要素类型允许您选取该文件中允许的几何:
在动态工作空间中,这种情况会发生变化。允许的几何类型取决于所选结构中定义的几何类型:
注意
默认情况下-当源结构与读模块正在读取的源数据相同时-则允许的几何是该源数据集的副本。
但是,当源结构参数更改为指向另一个数据集时,允许的几何类型即由该数据集的结构定义。
如果要写入的数据的几何与该结构不同,并且目标格式不支持多种几何类型,则将删除要素。
固定几何定义
即使在动态转换中,工作空间作者也可以将允许几何图形的动态结构参数设置回固定值。例如,作者可以选择geodb_polygon(对于地理数据库)或shape_polygon(对于Shapefile)。
这将覆盖所选结构源定义的几何,以便可以写入面要素(但仅限面要素)。
以第一个要素定义几何
用于定义几何类型的另一个选项是“第一个特征定义几何类型”。
在动态平移中,几何类型可能难以处理,因为对于源数据中可能存在哪些几何类型以及效果如何存在一定程度的不确定性它们将与源结构中指定的几何类型匹配。但是,这种相同的不确定性使得难以设置固定的几何定义。
“第一个特征定义几何类型”选项可解决此问题。选定后,到达写模块的第一个特征将设置几何类型。这样,作者就不需要事先知道正在处理的几何图形或结构允许的几何图形。
例如,如果第一个要素是面,则该要素类型的几何类型将设置为仅面;如果发往相同要素类型的后续要素不具有相同的面几何,则将拒绝这些要素。