免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 1329|回复: 6
收起左侧

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

[复制链接]

665

主题

2万

铜板

34

好友

传奇会员

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
20649

精华勋章爱心勋章地信专家组贡献勋章冰雪节勋章

发表于 2021-4-2 14:51 | 显示全部楼层 |阅读模式
计算新字段的值   
概述

在本教程中,您将学习如何使用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 - 存储传入的要素,直到它们全部到达,然后按原来的顺序释放它们。


本文转载来自CSDN作者:fmechina   版权归作者所有

10

主题

2万

铜板

34

好友

黄金会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
4394

精华勋章灌水勋章活跃勋章贡献勋章

发表于 2021-4-2 17:17 | 显示全部楼层
谢谢分享
回复

使用道具 举报

0

主题

490

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
49
发表于 2021-11-30 15:05 | 显示全部楼层
学习一下。。。。。。
回复

使用道具 举报

7

主题

3661

铜板

15

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
728

冰雪节勋章

QQ
发表于 2022-5-27 15:16 | 显示全部楼层
66666666666666
回复 支持 反对

使用道具 举报

0

主题

1万

铜板

3

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3270
发表于 2022-11-27 19:44 | 显示全部楼层
好资料,正在学习中....
回复 支持 反对

使用道具 举报

2

主题

3万

铜板

6

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
5687
发表于 2024-3-4 19:27 | 显示全部楼层
谢谢分享
回复

使用道具 举报

1

主题

1万

铜板

14

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1281
发表于 2024-3-17 16:09 | 显示全部楼层
66666666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表