FME在农村土地承包经营权确权中的应用

来源:互联网 发布:鹏业软件股份有限公司 编辑:程序博客网 时间:2024/04/29 21:22

记得第一次听说FME时,版本还是2003,当时是在网络上寻找DWG和DGN互转数据的好方法,在专业的期刊上有论文是介绍FME是如何进行数据转换的,当时觉得那家伙,应该是专家教授级别的人使用嘀,离咱远着呢,第一次近距离接触是在第二次土地调查的时候,由于坐标转换的问题,看别人操作过FME,当时看到的是一种我从未见过的界面,独特的操作方式,给我的第一感觉是FME的与众不同,用现在话说,叫高端、大气、上档次。

虽然一直也关注FME的一些消息,真正开始摸索和学习FME,是在2012版汉化版本推出来以后才开始的,主要是因为自己e文不行,不够刻苦,从开始的照猫画虎搭建几个模版,实现几个简单功能,到现在只要是数据转换处理,都想用FME来解决。

前言

农村土地承包经营权确权工作是农业部门全国性的一项大的工程,5年内完成从以前的纯台帐式管理转到现在的图形+数据库的管理上来,最终还会将数据转换到不动产统一登记平台上去。

土地承包经营权确权工作流程大致如下:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  

调查的基础数据图形文件一般为DWG或DGN格式,包含地块分布情况、村民小组界线、行政村界线、基本农田界线等等信息。属性数据一般以EXCEL文件为主,有土地承包经营权台帐、户籍人口情况等信息,最终形成的数据库格式一般为arcgis的文件地理数据库或个人地理数据库。

市面上也有部分专业的承包经营权调查、入库软件,但是软件编制基本是依据国标来进行的,各个地市的情况不太一样,基本省、市、县包括乡镇对调查中间数据的格式都有部分修改,俗称地方特色,例如有的地方有流转的土地、有的地方还有宅基地抵扣承包地,有的地方是按股确权的,情况不尽相同,所以如果选择固定的软件格式来处理数据,虽然最终成果能达到要求,但大量的中间数据的形成和输出就比较麻烦。幸好有FME这样一个灵活的软件,通过修改相应的模版,就能方便地输出各类数据。

FME能够处理上述流程中的除基础数据采集以外的大部分流程,本文将针对农村土地承包经营权确权过程中几个常见的问题进行举例说明。

一、 CAD数据的转换及属性挂接。

数据转换和属性挂接对于Fme来说真是小意思了,主要用到的是两类转换器,一类为图形空间属性挂接,用得最多的是点面叠加(PointOnAreaOverlayer)、面面叠加(AreaOnAreaOverlayer)转换器。另一类是数据属性挂接,主要有(FeatureMerger)和(Joiner)。

本例基础数据为Dgn格式,转换后将属性数据挂接到DK.shp下,并检查属性录入是否完整。模版流程如下: “我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者                                                                                                                            

其中地块挂接和小组界线挂接部分原理一致,详见下图:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者 

地块挂接小组面的信息,我先将地块转点后再挂接面的信息,然后再和原地块面属性合并,这样就不会因为面面相交破坏图形。

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者 

DK面属性缺失遗漏,只要查要素的属性是否完整,用test转换器就可以检查,和农户表的检查,需要将属性用FeatureMerger合并后,根据输出的情况,来判断是否有遗漏信息。

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者 

上图中NotMerged输出端口是在DK图上有,而农户表中没有的地块,而最下面的DuplicateSupplier输出端口是说明已经挂接了一个数据后的第二个匹配记录,也就是说该小组存在同名的人或者户主信息表录入错误。

二、 按横、竖田块对地块编号

地块编号是个老生常谈的问题,之所以还要提出来,是因为土地承包经营权的地块和我们一般所讲的地类图斑,或者宗地号等有点不一样的地方,田块分为横田和竖田,也就是南北向和东西向的长条,有时还是倾斜的,如果按照普通的y降序,x升序排序后编号,可能出现一个大田块从中间开始编号的问题。有的地方提出需要按照横田有西向东顺排,竖田由南向北顺排,理由是公示时好核对。既然问题提出来了,那就解决吧。

原始数据及模版流程如下:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者 
“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者 

此模版的具体思路是建立sort1和sort2两个排序字段,依据大田块的类型,如果是横田,将X坐标赋值给sort1,Y坐标赋值给sort2,如果是竖田,则将XY值调换赋值。然后按照大田块位置、地块名称、sort1和sort2进行排序,按小组分组编号,其中大田块在判断田块类型的自定义转换器中已经进行了编号,自定义转换器详见下图:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  在自定义转换器中,先将DK中心点挂接排序完成后的大地块信息“_dkno”,然后用HullAccumulator转换器以“_dkno”为分组字段建立凹包,然后根据凹包的范围来判断田块类型,模版运行结果如下图所示:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  

三、 地块四至的求取

四至的求取有多种方法,以前在arcgis下做过依据面心点与相邻多边形面心点之间的角度,来判断四至方位的脚本工具,效果不是很理想,主要是因为地块的形状大多不规范,平原地区相对来说还好一点,基本上形状还算方正,但是也只能针对相邻地块都为规则图形的才能有较好的效果。但是山区按照这种方法来求取地块四至就完全不可取了,所以需要考虑其他方法。

我使用的方法是先提取地块所有界址点并预编号和边界范围坐标,然后计算每个界址点与四个边角的距离,从而求出距离左上角、右上角、右下角和左下角最近的界址点并做标记为ZS、YS、YX,ZX,然后以左上角(ZS)为起始点对地块所有界址点进行重新编号,对序号大于1且小于YS的赋值“北至”,序号位于YS与YX之间的赋值“东至”,YX与ZX之间的赋值“南至”,大于ZX的点号赋值“西至”。然后依据DK号和四至标识,利用PointConnector转换器将点生成各个地块的四至线,然后用SpatialRelator转换器判断空间关系,从而求取四至方位信息。具体模版流程如下:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  内容看似不多,实际上主要的东西在四至边生成的自定义转换器里面,一起来看一下吧:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  生成的四至线效果如下图所示:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者 

有了四至线,后面的处理就简单了,将四至线输入到SpatialRelator转换器的Requestor输入端,将地块范围线输入到Supplier输入端,然后选择需要执行的空间测试,空间测试条件可以在转换器中选择,也可以在前面连接到Supplier输入端的数据中先建立符合规则的de9im值属性,然后在转换器中选择该属性,转换器中不能直接输入de9im值。另外一个需要注意的地方是需要设置一个必须不同属性(attribute(s) That Must Differ:),设置该值的目的是不把本宗地信息也提取出来。

 

四、 EXCEL文件输出

数据处理到现在就可以开始输出信息公示表了,信息公示表各个地方要求也不尽相同,有的只需要农户代表和地块面积、四至等基本信息,有的要求地块信息和户籍信息相对应在一张表上显示。这样问题又来了,地块多的可能人口少,地块少的也有可能人口多,本来数据就不在一起,格式也不一样,数目又不相同,怎么并到一起来呢?表格样式如下:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  首先我们来分析一下数据,一个是地块的空间数据,另一个是户籍的表格数据,数据唯一的关系就是承包方代表与户籍信息的户主是对应的,只要有了对应关系,事情就好办了,该怎么办呢?思路是这样的,DK数据按承包方名称分组形成list列表,户籍信息按户主分组形成list列表,然后将这两项数据合并起来,就形成了一个带有两个list的属性的数据,那又怎样来输出呢?还是直接看看我的模版吧:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者 

模版中我用到了一个自定义转换器,这是在server上找到的一个转换器,作用是重设列表的数目,可以增加,也可以减小,其中增加时还可以选择对增加的初值如何处理,是赋值为空字符还是miss或是给一个初始值。具体位置见下图:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  后面采取的方法是暴露列表属性后,再将DK信息的内容与户籍信息的内容用组名、承包方名称和原list列表的序号(现在list数目一样多了)进行关联,形成了一张二维表,再用这张表输出到EXCEL写模块。由于是写到格式表格,EXCEL写模块需要设置如下参数,首先在新建读模块时要选择工作表模版和工作薄模版,然后在写要素设置中,设置不输出字段名(Output Field Names设置为 No),还需要设置起始输出行号(Start Row)为表头需要跳开的行数。输出后原始数据如下:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  但FME也不是万能的,虽然输出的表内容差不多有了,但是有几个地方的确还需要完善,一个是没有合计栏,二是没有合并单元格,对于这个问题,我在EXCEL里编了一小段VBA代码来处理这个情况。在输出EXCEL表格时,开始我也选择过其他工具来处理这个问题,我用C#读取mdb数据库内信息进行一个行政村约1000户农户的公示表的分组输出,并同时进行合计和合并单元格,用时大约2分半钟,或许是我代码效率不高,费时主要是在调整格式上。用FME处理,用时只要几十秒,然后在EXCEL里调整一下格式,因为每张表都要打开看一下的,顺手运行一个宏,也就解决了这个问题。

农村土地承包经营权需要的表格成果有不少信息公示表(附录D)是其中的一种,还有有发包方调查表(附录A)、承包方调查表(附录B)、承包地块调查表(附录C)以及农村土地承包经营权公示结果归户表(附录E),这些还只是国家规范要求的成果数据,还有一些过程数据及地方上的土政策,例如有的地方需要以地块为单位的田块明细表,以小组为单位的农户明细表,所有数据都是依据地块调查数据和农户摸底调查数据汇总形成的,运用Fme能够方便地进行数据汇总和输出。

用Fme输出Excel文件,我分为两种情况来处理,一种是二维表格式,例如信息公示表,输出时按照模版,设定起始行输出数据就可以了,另外一种,是固定页面的模版,可能一个表格里包含多个数据源里的数据,例如归户表,几乎涵盖了调查的所有信息,这种格式的输出,需要针对数据所在的单元位置,设定相应字段的xlsx_row_id的值,然后将输出模式调整为Update,我常用的方法是在写模块中建立从A-Z字段,然后将数据中的对应字段名更名为A-Z,设定xlsx_row_id后输出到写模块,目前还没有完成对地块调查表和归户表的最终模版,但测试数据表明,用Fme完全可以输出这种复杂表格。

五、 生成地块示意图

地块示意图在国家规程里没有,但在有些地方需要提供该成果,类似于地籍调查的宗地图,主要标识地块范围、面积、四至等信息,信息量比宗地图要少。地籍调查的档案是以宗地为单位进行归档的,也就是一宗地一张宗地图。而农村土地承包经营权的归档,是以户为单位的,而一户的地块有很多,目前我处理的数据中,最多的一户有二十多块地,如果一块地一张纸,既浪费纸张也为后面装档等后续工作产生不必要的开销,我们可以在不影响图面效果的情况下,选择合适的比例尺,将多个地块,在一张图上表示出来。经过测试比较,一张A4纸上放四个地块,图面负担比较合理。因为涉及到的内容较多,该模版比前面介绍的几个要大一些,总的流程如下:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者 

上图中,看起来内容比较多的后半部分实际为不太重要的整饰和输出,重要的在前面呢:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  

 “我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  具体方法是先将各个地块的比例尺、所在图号、位置及中心点等信息计算出来,然后用本宗地界线对地块范围线及地形数据进行查询取得,然后用clipper转换器以地块号进行分组裁剪,获得各地块的地形及相邻宗地信息,用Aggregator转换器组合后,经Scaler缩放和Offsetter进行平移,然后用Deaggregator转换器将属性数据还原。最后设置数据格式,输出到写模块,按农户名称扇出。生成后效果如下:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  编写这个模版时也是一波三折,第一个版本是一次只能执行一户,按发布农户号作为参数来执行,然后用WorkspaceRunner调用该模版,效率低得可怜。最开始是想在循环里使用cliper转换器,将每个地块周围的信息裁剪下来以后,做平移缩放处理。可clipper转换器好像不能这样使用,具体原因我还不太明白,可能是因为clipper带有分组功能的缘故,希望知道原因的@我。后来就换了种思路,既然你分组,那我就按分组的来,流程中有两个自定义转换器,分别是获取地形数据和获取相邻宗地信息,具体功能就是利用一个循环,将地块有空间关系的数据用FeatureReader转换器读取出来,并赋给数据地块号值,然后利用clipper的分组裁剪,得到需要的数据,自定义转换器内容如下:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  这个模版还有一个需要注意的地方,也就是后面Aggregator转换器的设置,默认Aggregator转换器是不带属性的,如果要将属性带过来,需设置list名称,然后在后面解开的时候选择这个属性,就能把属性带过来了。之所以要先组合再平移缩放然后再还原,是因为这样整体平移缩放数据不会变形。

六、 与ARCGIS的交互使用

Fme的交互应用我接触的主要是与Arcgis的交互使用,在Arcgis里调用Fme的话用Etl工具箱,在Fme中调用Arcgis的功能,使用PythonCall转换器或者PythonCreate转换器来调用Arcgis工具箱中的模块。由于现在大多数据转换的最终目的是转换到Arcgis,那么使用利用Fme调用Arcgis的功能处理后的数据在Arcgis中出现错误的情况要相对少一些。也有不少人对arcgis功能模块比较熟悉,而对Fme的转换器还不够熟练。也有很多工具,确实使用起来很方便,下面我用我的案例来举例说明一下。

具体问题是这样的,有一部分原始数据为CAD数据,也就是承包经营权调查后的地块分布图,DK图层为多边形,现在问题是多边形的拓扑存在问题,主要表现在有轻微的重叠和少量的缝隙,特别是图层还有线宽,从CAD看根本看不出来。这种情况在CAD数据下很常见,而且转换到SHP以后,发现了很多自相交的几何错误,自相交的几何错误的修改在Fme下可以用GeometryValidator转换器来解决,拓扑错误如果用Fme来解决也是可以的,但我以前在Arcgis下处理相关问题的时候,摸索出一套方法效果还不错。采用的流程是先处理修复几何错误,再使用整合工具整合一下,再将面分别转面心点和线(要素转线,不是面转线),这样原多边形的数据就保存在面心点上,而由要素转出来的线可以不含属性,然后将线再转回面并挂接面心点信息,这样,面重叠的问题就解决了,但是还存在少量的缝隙,这些缝隙就是没有挂接到面心点数据的多边形,然后使用消除工具,按面积选择小于一定值的无信息多边形,自动融合到边长较长的或是面积较大的多边形里。

既然有现成的方法,那就拿来用吧,具体怎么用?其实模版很简单,就用了一个PythonCreator一个转换器,发布了几个选择参数:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  主要的东西都在这个转换器里:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  实际上pythoncreator下的python代码和arcgis的脚本差不多,我采用的方法是先在arcgis里用模型构建器搭好模型,再转换为脚本文件,然后导进来稍微修改一下参数之类的,基本上就可以使用了。象上面的图示,修复几何就是那一行语句“arcpy.RepairGeometry_management(area_shp, "DELETE_NULL")”,后面的消除依旧是一行语句“arcpy.Eliminate_management("fealay_lay", objshp, "LENGTH", "", "")”。当然,这其中还有些参数的设置和其他的语句,如果只涉及到GP工具的调用的话,还是不难理解的。

 

七、 用C#运行Fme模版

或许有人会说,既然arcgis里有现成的工具,数据就在arcgis里处理不就行了?干嘛又要在Fme中调用Arcgis的模块来处理,用起来不是更麻烦吗,其实做任何项目,事先要有一个明确的技术路线、统一的操作模式,对于使用会使用Fme和Arcgis的人来说,是很简单,但实际生活中还是有很多做数据生产的人不会使用Arcgis和Fme,他们接触的比较多的可能是Cad、Office之类的软件。针对这种人群,我们就需要将项目会用到的功能集中起来,搭建一个简单易用的平台,用大家常见软件的形式包装后发布使用。

因此,我在这里举一个例子,用C#调用目前农村土地承包经营权项目所用到的Fme模版,我是使用系统自带的样例数据稍作修改后,然后建立相应菜单,调用模版在C#中运行,系统样例位于C:\Program Files\FME\fmeobjects\samples\CSharp目录下,程序界面见下图:

“我和FME的故事”参赛作品选——FME在农村土地承包经营权确权中的应用 - FME - FME—专业化的空间数据服务实践者

  我们几乎所有的功能都在Fme下建立好模版了,C#做主要工作就是根据用户选择的菜单,调用相关的模块来运行,并将运行情况在窗口展示出来,具体实现,网上也有博文进行了详细的介绍,在此我就不再多说了,主要是使用IFMEOWorkspaceRunner接口调用fmw文件,部分代码如下:

IFMEOWorkspaceRunner runner = fmeSession_.CreateWorkspaceRunner();

            // 运行workspace

            bool success = runner.PromptRun(workspace);

            runner.Dispose();

通过C#搭建的平台,我们就能很方便地将一个或者多个项目所需要的模版整合在一起,形成一套完整的数据处理方案,为实际工作的标准化、规范化打下一个良好的基础。

八、 Fme学习心得

我不是测绘专业,也不是Gis专业出身,属于半路出家先干测绘再转入和Gis相关的行业,对于Gis的理解,不如那些科班出身的。但我是从作业员,或者说是从原来测绘的普通外业作业员逐渐转到Gis这行的,对于数据的转换操作和处理,更偏向于从作业员的角度出发,而不是从数据管理者的角度出发来思考问题。我希望通过构建Fme模版,尽量解决或者说减少底层作业人员的重复劳动,提高工作效率;通过对流程的控制,提高数据的质量。

真正开始学习Fme应该是2012年以后的事情,那时有事没事就上网看看163博客上有没有更新,看看案例,学习学习转换器的使用。这个习惯一直保持到现在,如今又新增了一项,不时查看一下微信公共号,看看有没有新动态。最近加入了Fme数据转换群2,也和群友们讨论一些问题,自己也有很大的收获。

就学习Fme而言,第一步是需要知道工作流程,初步认识读、写模块,第二步自然是转换器了,转换器太多了,也没必要都熟悉,我学习的方法是有空时就按分类将转换器过一遍,然后再将经常用到的要做到“知道怎么用”,对于那些不常用到的转换器,做到“知道干嘛用”就行了。对于需要知道怎么用的转换器,不光要对他的转换器设置进行了解,还要对他是输入和输出也要进行了解。其实用转换器和查字典一样,需要的时候再查名词解释,不用的时候知道怎么找就达到效果了,真正转换器用多了,也就熟悉了。

接下来就是专业知识的积累,Fme只是一个工具,转换器再多也没有问题多,遇到问题后,在没有现成的转换器,网上也没有类似的自定义转换器时,就应该考虑使用什么样的数学模型或是逻辑流程,能够解决问题。例如地块四至的求解,没有现成的转换器,那么应该从何下手,首先要对数据进行分析,对运用的几种方法进行比较判断后确定具体的方法,该怎样搭建模版,最后才是将运用过程中没有问题的常用模块转换成自定义转换器。如果对基础知识不掌握,不知道如何从基础几何分析提取出需要的数据,这样是不会成功的。

再往后就是对已有模版的优化了,虽然模版已经搭建好了,也能正常运行,干嘛还要费时费力来进行优化呢,条条大路通罗马,一件事情并不只有一种解决方案,对多个方案要进行比较,比较执行效率,在对模版进行优化的过程,自己也是学习的过程。实际上这一点我做得并不好,基础知识的匮乏导致搭建的模版执行效率并不是很理想,希望以后在这方面加强学习。

    Fme就像是一些建筑材料,同样的建筑材料,经过优秀的设计师搭建的出来的是豪华别墅和高楼大厦,美观大方,功能实用。我现在的水平么,只能勉强起个小二楼,勉强住住可能还行,再往上就可能存在安全隐患了。所以需要努力学习,使自己以后也能盖上美观漂亮、坚固耐用的好房子。

 

结束语:

以上只是本人在使用Fme在农村土地承包经营权中的一部分应用,还有很多东西,用Fme都能做到,例如从Shp格式数据与到Cass格式交换,80坐标转2000坐标系,网上也有相关的介绍,由于篇幅所限,也不一一展示了,如果有什么疑问,可以在Fme数据转换2群(43814136)@我(活力贝贝-南京),或是给我QQ发邮件11515418@QQ.COM,对于Fme或是其他方面的见解,肯定有理解不到位甚至是理解错误的地方,欢迎大家批评指正。

 

从开始对Fme充满好奇到现在的初窥门径,与安图近年来对Fme的重视是分不开的,Fme初学教程、163博客、Fme10分钟等等,从2011年开始出现界面汉化版,到后来的转换器帮助全汉化,到现在微信公众号及2015全中文网站的上线。每年都有新变化,每次都能给我们带来惊喜,感谢安图,感谢Fme!

1 0