吕成亮,廉光伟,张驰
(天津市测绘院,天津 300381)
根据天津城市测量成果编制的相关要求,最终测绘成果必须包括DWG和SHP两种格式。DWG是基于AutoCAD平台的二进制格式的文件。作为当前数字化测绘的常用结果文件,它直观地反映了各地物的绝对位置和相对关系。出于商业竞争的考虑,AutoCAD对于DWG的数据结构暂时处于保密状态,但是提供了DXF格式来实现数据交换[1]。SHP是基于ArcGIS平台的矢量数据文件。作为数据入库的基础文件,它包含了空间数据的几何特征和属性特征。
通常情况下,SHP由DWG进行数据转换生成。常见数据转换方法是基于AutoCAD进行二次开发完成数据转换。该方法基本能满足日常测绘生产的需要。但是,受限于程序开发者和使用者的经验以及不同测绘项目的复杂程度和要求存在差异,这种数据转换方法的缺陷也逐渐显现。
为此,本文汇总分析近年来SHP数据返回修改的主要问题,在原有数据转换方法的基础上,提出一套较为完善的城市测量SHP数据制作方案,并在日常的城市测量工作中进行验证[2~6]。
根据问题产生成因,将该方案中存在的问题汇总如下:
(1)多段线不闭合或者“假闭合”。
使用二次开发的程序进行数据转换时,要求DWG中的多段线完全闭合。即多段线必须满足两个条件:①多段线的起始点坐标相同;②起点和终点只能共用一个点位(闭合多段线的边数应该与其顶点数相同)。
当条件①和②都不满足时,多段线不闭合;当满足条件①,不满足条件②时,多段线“假闭合”。如图1所示,为典型的多段线“假闭合”现象。从图面上看,该多边形是四边形,但是从属性框中发现,该多边形具有5个顶点,即起点和终点各自存在相应的点位,因此CAD判定其为不闭合(“假闭合”)。
图1 多段线“假闭合”
(2)多段线存在“Z值”。
外业采集地形点位数据时,经常需要采集高程值,由此导致DWG中的多段线也会带上标高属性(“Z值”)。使用二次开发的程序进行数据转换时,要求DWG中的多段线不能带“Z值”,因为多段线的“Z值”会附带在SHP数据属性项中,而ArcMap软件无法识别带“Z值”的SHP文件。
上述两种问题会直接导致SHP数据转换失败。很多作业员由于自身知识的局限,不掌握程序使用的基本要求,导致数据反复修改,严重影响了测绘生产效率。
(1)圆弧加密算法存在缺陷。
SHP不支持圆弧格式,如果DWG中存在圆弧,在数据转换之前需要对圆弧进行加密处理,即用一条高度拟合的多段线代替圆弧。现有圆弧加密算法基本思想如下[6]:
假设对圆弧取中内插n次,会形成2n段长度相等的小圆弧,每段小圆弧对应的扇形面积为:
(1)
每段小圆弧对应的圆心三角形面积为:
(2)
扇形与圆心三角形面积之差为:
(3)
其中:θ和r分别代表圆弧的圆心角和半径。
假设拟合圆弧的多段线与圆心形成的闭合多边形面积与对应扇形的面积差值限差为△2。如果满足条件:△2≥2n·△S,则内插停止,圆弧加密结束;否则内插继续,直至满足停止条件。
虽然该算法能够满足一般情况下圆弧加密要求,但是其存在如下缺陷:①未考虑同时存在多个圆弧的情况;②未考虑圆弧的凹凸性情况。详见笔者关于圆弧加密的文章《一种地籍数据DWG到SHP格式转换中圆弧加密的优化算法》(吕成亮等,2017)[6]。
上述缺陷会直接导致同一几何对象在DWG和SHP的属性不一致,且单个几何对象不一致数量级较小,往往不易察觉,随着数据量的增大,这种属性的差异量级也会逐渐增大,因此必须要进行针对性的修改。
(2)程序中没有检查多段线自相交。
自相交,顾名思义是指要素与自身相交,如:“叶形”自相交(自相交部分为点),“回头线”自相交(自相交部分为线)等。自相交不会影响SHP生成,因此程序开发者没有编写对应的检查程序。但是ArcGIS在对存在自相交的SHP数据进行后续处理时,会首先自动对该SHP进行几何修复,而修复的结果无法预测。
例如:对于程度简单的“叶形”自相交,常见的修复结果是在相交点处,将原几何对象打散成两个几何对象。对于“回头线”自相交,常见的修复结果是直接删除存在问题的几何对象。
无论是哪种修复结果,都会造成同一几何对象在DWG和SHP的属性值发生较大变化,此时两者没有比较的意义。
(3)程序中没有考虑共线圆弧的加密。
不同图层的SHP数据存在共线圆弧。现有圆弧加密算法只是按照圆弧的几何属性进行加密,即按照圆弧所属几何对象单独加密,没有考虑圆弧所属图层之间的逻辑关系。
以建设工程规划竣工测量为例,最终提交入库的地上SHP包括:地界,建筑、道路、绿地四个图层。如图2所示,绿地层SHP只有AB段圆弧,道路层SHP有AB和DE两段圆弧。道路层SHP和绿地层SHP存在共线圆弧AB。
图2 共线圆弧示例
按照现有圆弧加密算法:
对于绿地层,假设AB段圆弧加密n次,绿地SHP面积变化值为△1;
对于道路层,同样假设AB和DE圆弧加密n次,面积变化值分别为-△1和△2。道路SHP面积变化值为:△3=△2-△1。
假设圆弧加密限差为△S,若满足△S≥△1,此时绿地层AB段圆弧加密结束。由于无法判定△3和△S的关系,因此道路层AB段圆弧最终的加密次数m与n的关系也无法判断。如果m与n不相等,圆弧AB在道路层SHP和绿地层SHP就无法完全重合,不可避免存在压盖或缝隙。
针对上述问题对于SHP数据制作的影响,本文提出一种优化之后的SHP数据制作方案,如图3所示。该方案特点如下:
图3 SHP数据制作优化方案
(1)增加CAD检查和修改步骤。
首先进行多段线闭合检查和修改。推荐使用CAD快速选择功能,选择图形中所有多闭合属性为“否”的多段线,然后按照上述的不同原因进行修改。对于其中的多段线“假闭合”现象,推荐使用boundary命令,重新快速建立范围线。
然后进行多段线“Z值”检查和修改。推荐利用CAD快速选择功能,将所有的多段线标高统一改为0。
(2)优化SHP转换中圆弧加密算法,增加SHP生成之后检查和修改步骤
对圆弧加密算法优化设计的原理和过程,详见笔者关于圆弧加密的文章《一种地籍数据DWG到SHP格式转换中圆弧加密的优化算法》(吕成亮等,2017)。
SHP生成之后检查包括自相交检查和拓扑(压盖)检查。首先进行SHP自相交检查:推荐使用ArcMap“检查几何”工具对SHP数据进行检查。对于检查出的SHP自相交问题,优先推荐使用ArcMap“高级编辑”工具条中的“拆分多部件要素”对该面SHP进行处理;其次,可以使用ArcMap“修复几何”工具,由于该工具会直接删掉存在问题的SHP,所以在使用后应注意检查修复是否正确。
然后进行SHP压盖检查,修改。推荐使用ArcMap的“拓扑”功能,按照项目要求添加拓扑规则,对涉及的SHP层进行拓扑检查。
(3)修改SHP制作流程。
由于目前SHP制作是分图层进行,暂时无法从算法上进行根本解决。笔者建议可以从SHP制作流程上进行相应的规范,避免此类问题。
以建设工程规划竣工测量为例。首先,分别制作建筑图层和地界图层;然后,制作绿地图层时,以建筑图层为裁切面,对绿地图层进行裁切,确保建筑图层和绿地图层之间没有压盖;最后,将绿地图层和建筑合并成一个图层,对地界图层进行裁切,得到的就是道路图层,这样确保了建筑、道路、绿地三个图层之间不会存在压盖的问题。
以测绘院一个月的项目数为例,方案优化后SHP数据制作一次成功率的比例从70%提升到96%,极大地提高了工作效率和数据质量。
本文针对现有SHP制作过程中存在的问题进行分析,然后有针对性地提出优化的SHP数据制作方案。在日常的城市测量工作中验证发现:优化之后的SHP数据制作方案有效地避免了之前存在的各种问题,提高了SHP制作的一次成功率。
[1] 陈能,施蓓琦. AutoCAD地形图数据转换为GIS空间数据的技术研究与应用[J]. 测绘通报,2005(8):11~14.
[2] 张叶,孙毅中,陈年松. CAD城市基础数据到GIS转换的有关问题探讨[J]. 测绘与空间地理信息,2007(11):94~97.
[3] 肖锋,吕宝奇,林蒙恩. DWG到SHP格式转换技术的研究与实现[J]. 测绘与空间地理信息,2013(9):87~89.
[4] 齐立波. C#入门经典(第6版)[M]. 北京:清华大学出版社,2012.
[5] 安卫. 基于VBA的两证合一SHP数据制作自动化的实现[J]. 城市勘测,2011(2):141~143.
[6] 吕成亮,廉光伟,黄毅. 一种地籍数据DWG到SHP格式转换中圆弧加密的优化算法[J]. 城市勘测,2017(4):149~151.