计算新字段的值
概述
在本教程中,您将学习如何使用ExpressionEvaluator计算值以及如何使用AttributeValueMapper赋值。
下载(密码:9shg )
注意:由于您正在处理面向公众的数据库,因此有时可能会覆盖和/或修改表。如果您的转换产生意外结果,请参阅重置PostGIS培训数据库文章。或者,您可以下载提供的文件,并使用适当格式的读模块替换PostGIS读模块。
练习1 - 使用ExpressionEvaluator计算值
在第一个练习中,您将计算10年期间的人口变化。这需要在两个可以使用ExpressionEvaluator执行的FME要素属性之间进行简单的数学运算。
注意:此处显示的场景可能与预期的实际应用程序不同。由于使用面向公众的数据库的挑战,在这里您将从Neighborhood表中读取并最终写入名为Neighborhood_Pop的表。您可能会注意到Neighbor_Pop 已存在于预期的数据模型中,因为其他用户也会运行相同的工作空间。实际上,您可能会从Neighborhood读取,然后使用要素类处理选项“使用现有”来更新现有表格。
说明
1.启动FME Workbench
- 如果尚未打开,请启动FME Workbench。
2.选择“生成工作空间”
- 在“开始”页面的“创建工作空间”部分中,选择“生成(工作空间)”选项。或者,您可以使用快捷键Ctrl + G.
- 有关创建转换的详细信息,请参阅“ 桌面基础课程手册”。
3.设置读模块格式并连接到PostGIS Training Database
- 在“生成工作空间”对话框中,将“读模块格式”设置为PostGIS。
- 接下来,从读模块连接列表中选择PostGIS Training Database。
- 如果尚未设置数据库连接,请选择“添加数据库连接”并输入以下参数:
- 名称:PostGIS培训数据库
- 主机:postgis.train.safe.com
- 端口:5432
- 数据库:fmedata
- 用户名:fmedata
- 密码:fmedata
- 接下来,打开读模块参数并从表列中选择Neighborhoods表。
4.设置写模块格式并连接到PostGIS Training Database
- 将写模块格式设置为PostGIS,将写模块连接设置为与读模块(PostGIS Training Database)相同的连接,然后单击OK以生成工作空间。
5.设置要素操作和表处理
- 生成工作空间后,双击“写模块要素类”以打开“写模块要素类参数”对话框。
- 在“常规”部分中,将“表名称”设置为“Neighborhoods_Pop”。
- 在“表”部分中,确保“要素操作”设置为“插入”并将“表处理”设置为“删除和创建”。
注意:当需要清空表并对数据库模式进行更新时,将使用Drop和Create。例如,drop和create用于删除表结构,可能是添加或删除列,更改数据类型等。有关写模块要素类参数(如表处理)的详细信息,请参阅文档。
6.更新属性
- 切换到写模块参数对话框中的用户属性选项卡,将属性定义设置为Automatic。
- 单击“确定”接受更改并关闭“写模块参数”对话框。
注意:自动属性定义是指Workbench自动定义属性列表时,具体取决于所连接的读模块要素类。此外,只要在工作空间中更改(即重命名,删除等)属性,写模块要素类上的属性列表就会自动更新。有关用户属性和属性定义的更多信息,请参阅Docum entation。
7.添加FeatureHolder
- 要将FeatureHolder添加到画布,通过键入“FeatureHolder”以在快速添加搜索中显示FME转换器列表。通过双击或使用箭头键选中转换器列表中的FeatureHolder,然后按回车键将其添加到工作空间。
- 添加转换器后,将Neighborhoods读模块连接到FeatureHolder。
FeatureHolder在Neighborhoods表中读取和存储要素。一旦存储了所有要素,现有表将关闭,并允许FME删除现有表并创建新表。
8.添加ExpressionEvaluator
- 将 FeatureHolder:Output端口连接到ExpressionEvaluator。
- 确保ExpressionEvaluator:Output端口连接到Neighborhoods_Pop写模块。
ExpressionEvaluator对由FME要素函数,字符串函数,数学函数和数学运算符组成的表达式执行数学计算。在这种情况下,我们将用它来确定每个街区2001年至2011年的人口变化。有关构造属性的更多信息,请参阅“ 桌面基础课程手册”。
9.设置ExpressionEvaluator参数
- 添加ExpressionEvaluator后,双击ExpressionEvaluator或单击齿轮图标以打开转换器参数对话框。
- 将评估模式保留为“创建新属性”,并将新属性的名称设置为“popchange”。
10.使用算术表达式计算人口变化
FME允许您通过FME要素属性列表访问连接到ExpressionEvaluator的任何数据集的属性。要计算人口变化,请从2011年人口中减去2001年人口 - 这两个人口都是存储在表格中的属性。
- 在“算术表达式”对话框中展开“FME要素属性”列表,然后双击“TotalPopulation2011”将其添加到表达式中。
- 接下来,展开数学运算符列表,然后双击减法运算符(“ - ”)或按键盘上的“ - ”键。
- 从FME要素属性列表中添加“TotalPopulation2001”值,以便最终表达式如下所示:
- @Value (TotalPopulation2011 ) - @ Value (TotalPopulation2001 )
11.运行工作空间
- 单击工具栏上的“运行”按钮,或使用菜单栏上的“运行”>“运行转换”运行工作空间。
转换成功后,您的表格将有一个新列,其中包含每个街区的人口变化。您可以通过选择写模块并单击选择写模块时出现的快捷菜单中的“检查”按钮来查看新表。
结果
输入
输出
练习2 - 根据另一个属性赋值
在本练习中,您将使用AttributeValueMapper根据maintainer属性的值来赋值。AttributeValueMapper将查找maintainer属性的源值,并将目标值(部门代码)分配给一个新字段。这将允许您使用部门代码作为主键将表连接到DrinkingFountains表。
注意:此处显示的场景可能与预期的实际应用程序不同。由于使用面向公众的数据库所面临的挑战,您将在这里读取DrinkFountains表并最终写入名为DrinkingFountainsRemap的表。您可能会注意到DrinkFountainsRemap 已存在于预期的数据模型中,因为其他用户也会运行相同的工作空间。实际上,您可能会读取DrinkFountains,然后使用要素类处理选项“使用现有”更新现有表格。
说明
1.启动FME Workbench
- 如果尚未打开,请启动FME Workbench。
2.选择“生成工作空间”
- 在“开始”页面的“创建工作空间”部分中,选择“生成(工作空间)”选项。或者,您可以使用快捷键Ctrl + G.
有关创建转换的详细信息,请参阅“ 桌面基础课程手册”。
3.设置读模块格式并连接到PostGIS Training Database
- 在“生成工作空间”对话框中,将“读模块格式”设置为PostGIS。
- 接下来,从读模块连接列表中选择PostGIS Training Database。
- 如果尚未设置数据库连接,请选择“添加数据库连接”并输入以下参数:
- 主机:postgis.train.safe.com
- 端口:5432
- 数据库:fmedata
- 用户名:fmedata
- 密码:fmedata
- 接下来,打开读模块参数并从表列中选择DrinkingFountains表。
4.设置写模块格式并连接到PostGISTraining Database
- 将写模块格式设置为PostGIS,将写模块连接设置为与读模块(PostGIS Training Database)相同的连接,然后单击OK以生成工作空间:
5.设置要素操作和表处理
- 生成工作空间后,双击“写模块要素类”以打开“写模块要素类参数”对话框。
- 在“常规”部分中,将“表名称”设置为“DrinkingFountainsRemap”。
- 在“表”部分中,确保“要素操作”设置为“插入”并将“表处理”设置为“删除和创建”。
注意:当需要清空表并对数据库模式进行更新时,将使用Drop和Create。例如,drop和create用于删除表结构,可能是添加或删除列,更改数据类型等。有关写模块要素类参数(如表处理)的详细信息,请参阅文档。
6.更新属性
- 在“写模块要素类”的“用户属性”选项卡中,将“属性定义”设置为“自动”,以便在工作空间中修改或创建的任何列都将显示在新表中。
- 单击“确定”接受更改并关闭“写模块参数”对话框。
注意:自动属性定义是指Workbench自动定义属性列表时,具体取决于所连接的读模块要素类。此外,只要在工作空间中更改(即重命名,删除等)属性,写模块要素类上的属性列表就会自动更新。有关用户属性和属性定义的更多信息,请参阅文档。
7.添加FeatureHolder
- 要将FeatureHolder添加到画布,通过键入“FeatureHolder”以在快速添加搜索中显示FME转换器列表。通过双击或使用箭头键选择转换器列表中的FeatureHolder然后按回车键将其添加到工作空间。
- 添加转换器后,将DrinkingFountains 读模块连接到FeatureHolder。
FeatureHolder读取并存储DrinkingFountains表中的要素。一旦存储了所有要素,现有表将关闭,并允许FME删除现有表并创建新表。
8.检查属性
在重新映射属性值之前,首先需要知道我们正在处理的属性的值。注意:maintainer属性的值是Engineering或Parks。
- 单击Public.DrinkingFountains 读模块以显示快捷菜单,然后单击FME Data Inspector图标以预览该表。
在表视图中,请注意 maintainer属性的值是工程或公园( Engineering or Parks)。
预览数据集后,关闭FME Data Inspector并返回FME Workbench。
9.添加AttributeValueMapper
- 将AttributeValueMapper放在FeatureHolder之后。AttributeValueMapper将用于为新属性赋值。
10.设置AttributeValueMapper参数
我们想创建一个名为deptcode的新属性,并根据维护者属性赋值:
- 在AttributeValueMapper转换器参数中,将源属性设置为“maintainer”属性,并将目标属性设置为“deptcode”
11.设置源和目标值
由于您知道maintainer列中仅有两个属性是“Engineering”和“Parks”,因此您只需在值映射中将值键入源值即可。
- 如果maintainer字段的源值为Engineering,则将目标值设置为300。
- 同样,如果maintainer字段的源值为Parks,则将目标值设置为246。
确保您的Value Map与下面的屏幕截图类似,然后单击OK接受更改并关闭AttributeValueMapper参数
12.运行工作空间
- 单击工具栏上的“运行”按钮,或使用菜单栏上的“运行”>“运行转换”运行工作空间。
运行转换后,您的表格将有一个新列,其中包含工程(Engineering)和公园(Parks)部门的部门代码。您可以通过选择写模块并单击选择写模块时出现的快捷菜单中的“检查”按钮来查看新表。
结果
输入
输出
转换器
- AttributeValueMapper - 根据其他属性查找并分配属性值,并将查找的值存储在新属性中。
- ExpressionEvaluator - 对包含FME要素函数,字符串函数,数学函数和数学运算符的表达式执行数学计算。
- FeatureHolder - 存储传入的要素,直到它们全部到达,然后按原来的顺序释放它们。