参赛单元:传统GIS数据处理
作者:黎贵明
单位:深圳市国测测绘技术有限公司
前言
话说已经2019了,我电脑依然停留在FME Desktop 2015.1.1版本,与其说是怀旧,不如说其实是太多东西都采用了2015版本编写,已经习惯了,多少次说要跟上大神的节奏,跟上2019炫黑的节奏,有没有跟我一样的呢?我想答案应该是肯定的。网络与大数据方面有自己摸索和实践,都是比较简单的网络数据获取和与自己云服务器进行数据共享、挂接,经验比较少,还需向大伙学习,近两年还是在与传统GIS数据处理碰撞得比较多,特别是地籍、三调等等。故,在FME2019年博客大赛,还是再次与大家分享我在传统GIS数据处理使用到FME的一些实践经验,主要分享两个案例:
• FME对dwg中的JMD层的房屋调整坐标起点;
• FME对dwg中的JMD层的房屋面进行顺序编号并标注在房屋面左上角;
以上两个案例都在同一个fmw模板中运行实现。
一、FME对dwg中的JMD层的房屋调整坐标起点
背景:
在地籍、地形数据整理中,会发现很多旧数据、矢量化的数据或者新采集的数据,都存在面要素方向不一致,坐标起点不统一的问题,导致在后期的建库和界址点、界址线等生成的时候不符合规范,比如说宗地,一般要求是西北角为起点顺时针方向,界址点编号是西北角为J1,顺时针依次为J2、J3…Jn,若基础矢量数据不处理好,难以进行地籍调查表的编制,换句话说,这个问题不管是前期还是后期,都是需要处理的。采用人工处理,在CASS中貌似可以对单宗数据进行处理,具体不熟悉,不知可否批量处理,若是单宗逐个处理,那就更费劲了,因为还要找到错的地方,还经常错漏,导致下一步工序不顺畅甚至需要返工处理。
思路:
只要是合理的面要素,且面积大于0,那他一定可以取最小外接矩形框,只要有外接矩形,就可以轻松获取他的几何X、Y的最大最小值,比如,一个矩形其X取最小,Y取最大值时,就是他的西北角或者说左上角,我的思路就是根据面要素的最小外接矩形,获得西北角点、东北角点、东南角点、西南角点,然后使用Orientor调整方向,面要素用Chopper最大节点数设置为1,拆分为N个点,使用NeighborFinder进行近邻分析,分别找到离最小外接矩形节点(四个角)最近的点,作为面的起点之一(这里在FME中添加了发布参数,共4个参数可选),再根据新的起点对应的原始起点顺序用AttributeCreator进行计算重新调整节点顺序,根据新的节点顺序Sorter排序后PointConnector连接成线,并LineCloser闭合,即调整好了面要素
具体模板如下:
- 、对面要素Counter统一编唯一值,Orientor选择RIGHT_HAND_RULE右手法则,即统一顺时针方向;
- 、CoordinateCounter获取面要素坐标总数,为了之后节点序号调整用,Chopper获得单个节点,并使用唯一值作为分组从0开始顺序编号,为了记录面要素原始节点顺序号;
- 、BoundingBoxReplacer获取面要素最小外接矩形,Chopper获取西南角点、西北角点、东北角点、东南角点,并分别编号为1/2/3/4;