作者:活力贝贝

第二期兴趣班从3月13日开始,至3月20日截至,一周时间内,14人提交了17份模板。首先感谢大家在繁忙的工作中参与这项活动,有了大家的参与,相信兴趣班会越办越好。这一期的任务小结,是我主动向欣欣班长申请的,一是这项工作需要大家共同参与,二来嘛,本人对国土系统工作及这期任务涉及的格式相对比较熟悉。

各人对于同一件事情,理解不尽相同,小结里面观点仅仅为我本人对于该件事情的理解,说得不一定对,如有错误,欢迎大家批评指正。这也是本人第一次做小结,不到之处,敬请谅解。

一、 本次任务难点

这一期的任务是根据“勘测定界界址点坐标交换格式(TXT文件)”,将界址点坐标生成面,并将其地块属性数据增加到相应的字段中,最终写入SHP文件并设置相应投影系。具体应该怎么做呢?简单说就像大象放冰箱,FME分为三步,第一步读取读模块;二、设置转换器;三、写入写模块,呵呵,开个玩笑啦,事情没有想象的那么简单。这一期的难度,个人认为并不简单。依据文本文件里的坐标生成点、线、面,然后扣除岛难度不太大,本期主要的难点在于如何将地块的属性行数据挂接到该地块的坐标行。从数据格式上可以看出,在同一个文本文件中,一行地块属性行后面,跟着若干坐标行数据。这与大家平时处理的数据格式不太一样吧,如果是刚刚接触FME的新手,更不知从何处下手。那就一起来看看提交作业的同学是如何处理的吧。

二、 模版性能测试汇总表格(图片不清晰,可点击下方链接下载原文)

由于原测试数据只有3个地块,数据行也不多,对于数据性能不能很好地比较,测试时,我将测试文件地块增加到331个,数据2715行。具体统计详见下表:

插播:为了公平起见,活力贝贝做的两个模板是根据他的评分标准由欣欣打分的。

三、 数据处理方案比较

从上表可以看出,数据方案以属性挂接方案来命名的,本次模版的核心就是属性的挂接,属性挂接方案选得合理,模版运行效率就会比较高。数据处理方案有如下几种:AttributeCreator多要素属性赋值、Python代码读取、变量传递属性、变量发布+属性合并、空间挂接、批处理切分属性后生成多文件再读入、列表循环。由于Python、批处理及循环对于新手难以理解,下面主要汇总变量直接赋值、变量创造合并条件赋值及利用AttributeCreator多要素属性赋值。

1、 变量直接赋值

变量直接赋值是在读取属性行数据时使用VariableSetter转换器将属性行数据发布全局变量中,随后在读取该地块的坐标行数据时,使用VariableRetriever转换器将变量取回到属性值。该方法在163博客中也有介绍,本次有几份作业也采用了这种模式,但有个方面需要提醒初学者注意一下,使用全局变量传递属性和我们平时网上传送文件是一样的道理,文件多的时候,我们会将文件做成一个压缩包,收到方的解压缩后,与压缩前没有区别,这样做不止是为了方便传送和接收,也防止出现数据丢失。那么我们在做属性值传递的时候,特别是涉及到内存、地址的相关操作时,尽量合并属性传递,尽可能减少VariableSetter转换器,一是减少内存开销,二是降低出错的概率。

2、 变量创造合并条件后使用Featuremerge合并属性

变量创造合并条件后使用Featuremerge合并属性与变量直接赋值的区别在于,本方法使用时,只传递一个关键值属性给坐标行数据,例如传递一个地块编号给该地块的坐标行,后期依据地块编号可以使用Featuremerge转换器将属性行属性与坐标点或面数据进行属性关联,这也是Fme处理数据的常用方法,即“有条件时直接使用转换器,没有条件时,创造条件使用转换器”,本来属性行数据与坐标行数据并不能直接用Featuremerge转换器进行属性合并,这种情况下,使用其他方式,先创造对应关系再使用合并就能将属性值顺利传送过来了。

3、 AttributeCreator多要素属性赋值

AttributeCreator多要素功能应该是在2013版本时推出的新功能吧, AttributeCreator转换器功能很多,除了能调取前(后)一要素属性外,依据条件赋值、四则运算、属性合并连接等,他都能胜任,建议大家对这个转换器多多掌握,Fme10分钟专门针对这个转换器做了两期节目,可见这个转换器的重要性。AttributeCreator多要素属性赋值,类似于C,C++的指针,使用时十分方便,以本次任务为例,勾选启用多要素后,可以将Feature(-1)的值,也就是上一行的属性值,赋值给本行,例如上一行是属性行,本行为坐标行,那么调用Feature(-1)的相关字段,就可以在当前记录为坐标行行时,将属性行数据赋值给坐标行,依次类推,当前数据为第二行坐标时,能将第一行坐标从属性行得到的属性值传递到第二行。这样就能顺利的将属性行数据像接力棒似的传送到最后一行坐标。

从执行效率上来看,木头狼及太阳の指纹利用Python代码读取文件的方法,耗时最短,效率最高,但对使用者的要求也更高一些。利用全局变量直接对坐标行赋值、利用变量创造合并条件后使用Featuremerge合并属性及AttributeCreator多要素属性赋值三种方法效率差不多,使用空间关系挂接属性及通过循环判断行列等方法效率略低一些。千浪的使用批处理分割TXT文件后再读取生成图形的方法,由于调用SystemCall转换器前使用了延时,时间上会长一些。阿峰的双循环依据行号判断坐标所处地块挂接属性,耗时较长,经过分析日志发现,该模版中使用的ListBuilder转换器对2715个数据行创建一个列表,耗时达到17秒左右,明细如下:

2015-03-24 10:19:01| 0.6| 0.0|STATS |Tester_PASSED Feature Counter -1 12(TeeFactory): Cloned 2715 input feature(s) into 2715 output feature(s)

2015-03-24 10:19:01| 0.6| 0.0|STATS |ListBuilder_fme_type_remover(TeeFactory): Cloned 2715 input feature(s) into 2715 output feature(s)

2015-03-24 10:19:05| 4.6| 4.1|INFORM|Overlaying areas on areas

2015-03-24 10:19:19| 17.9| 13.2|STATS |ListBuilder(ListFactory): Combined 2715 input feature(s) into 1 output feature(s), including 0 singleton(s)

2015-03-24 10:19:19| 18.0| 0.2|STATS |ListBuilder_OUTPUT Feature Counter -1 9(TeeFactory): Cloned 1 input feature(s) into 1 output feature(s)

2015-03-24 10:19:19| 18.0| 0.0|STATS |loop Input Input Collector(TeeFactory): Cloned 1 input feature(s) into 1 output feature(s)

由此可见,ListBuilder转换器对于性能影响不小,建议以后在大数据量使用时要注意一下。由于本次测试使用的机器较老,I5 M560 CPU,2G内存的笔记本,测试结果与现在主流机型测试结果肯定是有区别的,模版运行所耗时间仅供参考。

四、 关于读模块

勘测定界格式文件为纯文本格式,文本类常用的读模块分为两种,一种是Csv格式,逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),一种是Text_Line,即按行读取文本,两种读模块都可以用来读取Txt文件,设置参数也有相同的几个参数,例如本次任务,由于前面11行为描述性数据,因此可以设置从第12行读取。

Csv格式相对来说比Text_Line功能更多一些,我本人的两个方案的读模块都是采用Csv格式读取,设置跳过11行的文件头,取消选择字段名,设置以“,”分割数据,这样从读模块里出来的数据就已经是分好列的数据。

五、 扩展应用

小结到此结束,话题还在继续,勘测定界格式在土地部门用得比较多,不仅是建设用地报批时需要此项数据,涉及到卫片监测或是其他事项的时候,也会用到此类数据,那么怎么使用才是最方便的呢?一起来看看我是如何运用的吧:

没错,我创建了一个自定义格式,这样读取是不是更方便了呢?其实做法很简单,打开你的模版,点击文件(File)>导出自定义格式(Export As Custom Format),然后输入格式名称和描述,点击OK,就搞定了。下次使用时,不需要再打开模版,选择文件再运行转换了,直接在格式中输入“KCDJ”就可以读入文本文件并自动转换成多边形。

同时该格式也可以直接扩展到Arcgis下使用,当然前提是必须先将Fme扩展到Arcgis,然后在Arcgis导航栏Fme Connections下点击Add FME Connection,然后选择勘测定界格式文本文件,就能直接将坐标转换成图形并添加至当前窗口,也可以直接调用Arcgis工具箱内的快速导出或导入功能,直接将数据转换到所需要的格式。

六、 结束语

Fme的快捷、方便的功能不仅仅是我所介绍的这些,还有很多实用的功能等待着我们一起去发现,去使用。希望通过模版兴趣班的学习,使大家更加熟练地使用Fme,感谢大家对模板兴趣班的关注,最后借用@努力的和尚哥一句话:爱她,就教会她用Fme,恨她,就教她用Fme,但不要教会。

第二期作业+评分+测试数据+积分下载链接

FME模板兴趣班第二期任务小结相关推荐

  1. FME模板兴趣班第五期任务小结

    作者:欣欣 现在每次出模板兴趣班题目的时候,其实还蛮费脑筋的,一方面希望题目能够跟大家的工作相结合:其次还要考虑不同技术水平的人都能参与进来:然后还要考虑题目的通用性,是否对大部分人都有帮助.所以很感 ...

  2. FME模板兴趣班第十八期(面遮挡处理) 任务小结

    班长欣欣 一.题目说明 对面进行遮挡处理,处理要求如下: 多个面之间存在压盖,要求压盖区域用Level高的遮挡Level低的,并将压盖区域从Level低的面中擦除.如下图所示: 面1.面2.面3 的L ...

  3. FME入门视频教程:第二节 FME模板的使用,视频讲解如何使用已经做好的FME模板工具

    ​教程简介 本教程为适合新手学习的FME软件入门级教程,对FME的功能概念.界面及常用设置.数据读取.数据输出.转换器的使用.参数的使用.自定义转换器等几个方面进行讲解,引领进入FME的精彩世界. 课 ...

  4. 我为OpenHarmony 写代码,战“码”先锋第二期正式开启!

    OpenAtom OpenHarmony(以下简称"OpenHarmony")问世以来,两年多时间汇聚了160万+社区用户,全球下载次数高达6300万,5.5万+次代码提交,吸引了 ...

  5. 精英任务 | 第二期券商研报复现挑战赛

    你是否不知道该如何在量化投资的路上继续向前? 你是否还在苦于没有研究的思路和方向? 你是否还在纠结几千份研报中,到底该去看哪一个? 研报复现第二期来啦,快来参加吧~ 我们从大量的研报中筛选出有意思的研 ...

  6. Matlab论文插图绘制模板第24期—柱状图(多组堆叠)

    在之前的文章中,分享了一个Matlab柱状图的绘制模板: 以及一些特殊形式的柱状图: 昨天有朋友问我,类似下面这种多组堆叠图应该怎么画. 我告诉她,之前有类似的教程,稍微举一反三一下,不难画. 但回头 ...

  7. 招募 | 大航海计划第二期招募开始拉!

    噔噔噔噔-天空一声雷,大航海计划第二期招募,正式开启! 在宣布大航海计划开始之初,其实很多小伙伴对这个计划有疑惑.还有很多直接私聊我的,「到底做什么的?」「我需要做什么?」「我现在处于xxx状态,适合 ...

  8. 铃铛子训练营第二期结束,这是我们的答卷。

    铃铛子训练营第二期结束 3月8日第二期活动结束了,我耗费近两天的时间给一百多位学员制作了奖状,结营后不少宝宝晒出了他们的独一无二的证书.从找寻原始模板.拼接图标.设计元素部件.对比学员作品.截图导入图 ...

  9. OpenMMLab AI实战营第二期|人体关键点检测与MMPose学习笔记

    OpenMMLab AI实战营第二期|人体关键点检测与MMPose学习笔记 文章目录 OpenMMLab AI实战营第二期|人体关键点检测与MMPose学习笔记 一.前言 1.1 人体姿态概述 1.2 ...

  10. Matlab论文插图绘制模板第61期—横向多组堆叠图

    之前有分享过一个Matlab多组堆叠图的绘制模板: 最近有朋友私信我,想让我出一个横向的多组堆叠图. 所以,这次就再出一期横向多组堆叠图的教程. 先来看一下成品效果: 特别提示:Matlab论文插图绘 ...

最新文章

  1. 转 C++STL之string
  2. centos 7防火墙
  3. ASP.NET MVC 概述
  4. python单词意思-Python这个单词是什么含义??????????????
  5. 基于shell脚本比较数字大小
  6. 019_html超链接
  7. 如果要和外国人做项目,加入一个teams是第一步,就跟我们的企业微信,钉钉差不多
  8. HTML基础之bit哥的反客为主之道(9)
  9. 正则表达式:日期格式的校验(日期+时间)
  10. java for foreach 效率_Java中LinkedList的fori和foreach效率比较
  11. python中迭代器有哪些_Python迭代器:什么是Python中的迭代器以及如何使用它?
  12. UIDevice 系统信息详解
  13. pert图java_项目管理之甘特图和工程网络图(PERT图)(一)
  14. 面试官问:你在项目中做过哪些安全防范措施?
  15. Either类java_通过实例学习Either 树和模式匹配
  16. 高等数学基础知识点 导数与微分 思维导图
  17. 台式计算机截图快捷键,台式电脑怎么用快捷键截图
  18. kubernetes高可用集群web页面部署
  19. 安卓虚拟摄像头_iPhone 的“第四颗摄像头”位置,为什么给了激光雷达?
  20. Linux 中断管理之ARM GIC V3 初始化

热门文章

  1. 中国微型电动汽车市场趋势报告、技术动态创新及市场预测
  2. angular封装七牛云图片上传,解决同一页面多个上传按钮分别上传
  3. 全国大学生飞思卡尔智能车竞赛小记
  4. ElasticSearch服务器的搭建与使用
  5. 巧用变量代换求极限 高数
  6. linux 显卡扩展坞,我的新玩意儿——Mac mini2018+Razer core(附显卡扩展坞类比图)...
  7. Ant Design介绍
  8. 小米真蓝牙耳机说明书_【小米真无线蓝牙耳机Air 2评测使用说明书介绍】快充|降噪|蓝牙5.0|开盖即连|快捷操作_摘要频道_什么值得买...
  9. Python实现最小二乘法曲线拟合
  10. android4.4.3版本root,碉堡了!ROOT精灵支持Nexus 5等Android4.4.3机型ROOT