练习7 投票分析项目
数据 选举地图(GML)
选举统计(Microsoft Excel)
总体目标 绘制投票模式统计图
演示 数据转换
启动工作区 C:\fmedata2016\workspaces\desktopbasic\transformation-ex7-begin.fmw
结束工作空间 C:\fmedata2016\workspaces\desktopbasic\transformation-ex7-complete.fmw
C:\fmedata2016\workspaces\desktopbasic\transformation-ex7-complete-advanced.fmw

在地面维修项目的中断中,市选举官员听说了你的能力,并要求帮助确定在上次选举中投票率低的投票部门,或者在理解投票过程方面存在困难的分歧。

他请求您的帮助,您建议将结果以Google KML格式显示,因此,工作人员无需使用全面的地理信息系统就可以查看它们。


1)检查数据
启动FME数据检查器并打开我们将使用的两个数据集:

读者格式 地理标记语言
读者数据集 C:\fmedata2016\data\elections\electionvoting.gml
读者格式 微软Excel
读者数据集 C:\fmedata2016\data\elections\electionresults.xls

注意,两个数据集都有一个划分属性,通过该属性可以识别每个投票划分(区域)。Excel数据是非空间数据,但具有一组其他投票属性:

  • 选民:登记选民人数
  • 选票:投票的选民人数
  • 空白:留下空白或损坏选票的投票者人数
  • 票数过多:投票支持过多候选人的选民人数
  • 欠保护:未投票数

高估和低估属性是投票过程被理解程度的一个指标。每一位投票者可以投票选出最多10名候选人(30人中)。

高估者是指那些投票支持10多个候选人的选民。票数不足是指本来可以投的票数,但不是(例如,选民只投了5名候选人的票)。


2)启动工作台
启动工作台并打开启动工作区。它已经增加了读写器来处理数据;我们所要做的就是进行转换:


3)增加功能合并
第一个任务是将统计的选举数据合并到实际的特性中。我们将使用一个featuremerge transformer来实现这一点(本课程稍后将详细介绍这个transformer)。

添加一个功能更强的变压器。将VotingDivisions数据连接到请求程序端口,和议员(结果)数据给供应商。


4)设置参数
单击齿轮图标打开FeatureMerge参数对话框。对于请求者和供应商联接字段,单击下拉箭头和属性值>分割。

这是合并数据的常用键:

单击OK键关闭对话框。


5)增加检测变压器
在特性合并后添加一个inspector transformer:合并的输出端口。运行工作区。

忽略报告意外输入的任何警告或日志消息。

确保该连接上的功能计数与来自VotingDivisions的传入功能数相同(注意,委员会成员的数据中会有未使用的额外功能,因为这包括我们感兴趣的领域以外的部门)。

还要检查FME数据检查器中的数据,以确保所有分割多边形现在包括从Excel电子表格复制的一组属性数据:


6)增加ExpressionEvaluator
既然我们有了所需的数字,我们可以开始计算一些统计数字。为了做到这一点,我们将首先使用一个ExpressionEvaluator Transformer来计算每个分区的投票率百分比。

在FeatureMerger之后放置一个ExpressionEvaluator转换器——将它连接到FeatureMerger的合并输出端口——并打开parameters对话框。

将新属性设置为switch(以匹配目标模式中的内容)。

在表达式窗口中,将表达式设置为:

(@value(投票)/@value(投票人))*100

您不需要在中键入此内容,@value(投票)和@value(投票人)部分可以通过双击左侧列表中的属性获得。

单击“确定”关闭对话框。如果您希望重新连接一个检查器并重新运行翻译,看看结果如何。


7)增加ExpressionEvaluator
使用类似的技术,使用ExpressionEvaluator计算每个投票者的未投赞成票数量,并将其放入与输出模式匹配的属性中。表达式如下:

@价值(低估)/@价值(选民)


8)添加AttributeRounder
把我们的统计数字计算到13位或更多是有点过分了。我们应该稍微截断这些数字。

在变压器下方放置一个属性器。

打开参数对话框。在“要舍入的属性”下,选择新创建的道岔和低估属性。将小数位数设置为2:

单击“确定”关闭对话框,然后,再一次,如果愿意,运行工作区检查结果。


9)连接架构
最后一步,让我们将attributeRounder连接到输出模式。只需将attributeRounder连接到两种编写器功能类型:

运行工作区并检查GoogleEarth中的输出,以证明它具有正确的属性并位于正确的位置。


高级练习
项目已经完成,但产出非常明显。改进结果的外观会更好,有几种方法可以用KML实现这一点。

我们可以简单地根据他们的投票率/得票过多程度给投票区涂上不同的颜色,但更令人印象深刻的方法是使用三维块。

按照以下步骤在输出KML数据集中创建三维形状…


10)增加ExpressionEvaluator
每个区段的高度应与该区段的道岔成比例。然而,为了使差异清晰可见,垂直比例需要放大。

在属性下方和道岔特征类型之间放置一个ExpressionEvaluator。将参数设置为将道岔属性乘以50。把它放入一个新的属性,叫做turnoutcaled。


11)增加3dforcer
添加一个3dforcer变压器。这将使功能提升到所需高度。打开parameters对话框,将标高设置为属性值> turnoutscale。


12)添加kmlpropertySetter
添加一个KMLPropertySetter转换器。这将允许我们在输出中设置3D块。打开参数对话框。设置:

  • 高度模式:绝对
  • 挤压:是的


13)添加kmlstyler最后添加一个kmlstyler变压器。工作区现在将如下所示:

打开参数对话框。为功能选择颜色和填充颜色。将填充不透明度增加到0.75左右。

保存并运行工作区。在Google Earth中,现在的输出应该如下所示:

这些3D模块将向用户显示城市中投票率高/低的地方。

如果你愿意,重复这些步骤,为低估的统计数据提供三维表示。


祝贺你
通过完成本练习,您证明了自己知道如何:
  • 使用变形金刚(ExpressionEvaluator,属性下,3 dforcer)
  • 使用Transformer参数创建与编写器架构匹配的属性
  • 在单个工作区中使用多个变压器流
您还学习了如何:
  • 使用公共密钥合并多个数据流(FeatureMerge)
  • 使用FME的内置数学编辑器对话框
  • 使用变压器为输出功能设置符号(样式)

结果匹配”他说:“这是一个很好的选择。”

    没有匹配的结果“他说:“这是一个很好的选择。”