【FME- HOW- TO系列】04 计算新字段的值

计算新字段的值    

 

概述

在本教程中,您将学习如何使用ExpressionEvaluator计算值以及如何使用AttributeValueMapper赋值


下载(密码:9shg )

calculating-field-values.fmwt

drinkingfountains.csv

neighborhoodsgdb.zip

注意:由于您正在处理面向公众的数据库,因此有时可能会覆盖和/或修改表。如果您的转换产生意外结果,请参阅重置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。
  • 如果尚未设置数据库连接,请选择“添加数据库连接”并输入以下参数:
  • 接下来,打开读模块参数并从表列中选择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 - 存储传入的要素,直到它们全部到达,然后按原来的顺序释放它们。

 

发布了350 篇原创文章 · 获赞 169 · 访问量 36万+

猜你喜欢

转载自blog.csdn.net/fmechina/article/details/90261730