刘宓,舒滨,杨钊
(天津市测绘院,天津 300381)
基于Map3D的规划图斑数据转换为系统数据的方法
刘宓∗,舒滨,杨钊
(天津市测绘院,天津 300381)
规划数据中的图斑多是以AutoCAD中的填充对象(Hatch)来表示的,这些填充对象无法直接转换为shp数据。本文讨论了基于Map3D平台将规划图斑数据转换为shp的方法,并对转换过程中出现的各种问题提出了相应的解决办法。
Map3D;GIS;规划图斑;Shapefile
我们在为规划部门开发GIS平台过程中,需要将很多规划图斑类的数据转换为shp数据,如土地细分导则数据。规划图斑要素一般都是在AutoCAD软件中以填充面(Hatch)来表示的,而Hatch填充对象无法直接转换为shp数据,并且组成Hatch对象的情况非常复杂,几乎本文详细讨论了在Map3D软件平台下,通过二次开发应用程序,实现填充对象转换为shp数据的流程和方法。
2.1工具选择
由于规划图斑数据是DWG格式的,所以我们选择AutoCAD Map3D软件来处理,它能直接操作DWG文件。在转换过程中,可以实时的呈现每一步骤的转换结果,存在数据错误时,用户可以方便地修改。
Map3D软件包含AutoCAD的所有功能,同时还集成了很多GIS的功能,通过它可以将DWG数据中的点、线、面等要素直接转换成shp数据,不需要再借助其他的GIS平台生成shp数据了,这是我们选择Map3D的一个原因。此外,另一个重要的原因是,对于包含弧段的多段线和面,也能够完美地转换到shp,这无疑帮我们解决了一个重要的问题,我们不用再考虑圆弧加密的问题了。
2.2转换方法
规划图斑数据主要由两部分组成:面状图斑、图斑内部属性点。其中属性点一般用多行文件(MTEXT)或属性块来表示,所以在转换时需要对这两部分分别考虑。
转换面状图斑的方法为:先获取图斑边线,然后拼接成闭合边线,再将闭合边线创建成MPOLYGON对象,最后用Map3D的MAPEXPORT命令就可以将MPOLYGON输出为面状shp数据。
转换属性点的方法为:先将地块编号、用地代码、用地面积、容积率等属性信息创建对象数据并附着到属性点上,然后用MAPEXPORT命令将属性点输出为点状shp数据。
最后,使用DotSpatial组件或者ArcGIS中的空间连接工具处理点、面的shp数据,通过空间包含关系将点的属性关联到面上去。
2.3转换流程
转换流程,如图1所示,其中,拼接边界线、创建MPOLYGON和创建对象数据是转换的关键环节。
图1 规划图斑转shp流程图
3.1图形清理
只保留图中的图斑填充和属性点,删除其他所有对象。因为重建填充边界线时,有时会生成很多零散的线,然后再对这些新生成的线进行拼接。为了避免与原图中的线冲突,所以先删除所有不参与转换的对象。
3.2重建填充边界
通过hatchedit命令,可以获取构建Hatch填充对象的所有边界线。重建后的边界线可能存在两种情况:
(1)对于比较规范的填充面,重建边界后可以获得闭合的线;
(2)对于比较复杂的填充面,重建边界后可能会生成很多零散的直线、圆弧、样条曲线等。
3.3拼接边界线
如果新生成的边界线中存在不闭合的线,就要进行拼接操作。拼接操作主要通过AutoCAD中的PEDIT、JOIN命令来完成。自定义拼接函数结构如下:
(defun Hatch2Shp_PJ(ss loops/)...)
函数接收两个参数,ss表示一个Hatch对象生成的边线集合,loops表示该Hatch对象中环的个数。如果函数运行成功,返回闭合多边形的集合,否则返回nil。
需要注意的是,自定义的拼接函数中必须对返回值的条件进行严格地控制:
只有当拼接完成后,拼接后的线全部构成闭合多边形,而且总数与loops相等时,才能返回拼接结果,其他任何情况都应该返回nil,即表示拼接不成功。此时,需要将拼接的中间成果放置到特定的层,让用户去检查、修改边线中的错误。
如果我们对拼接函数的返回结果不控制,不判断返回值,那么在创建MPOLYGON对象时,可能创建不成功,或者创建的是完全错误的MPOLYGON。例如,当遇岛状的Hatch,由多个环组成,拼接边线时,如果只拼接成功了外环或者个别内环,那么创建出来的MPOLYGON是完全错误的。
拼接算法的实现过程如下:
拼接时的一个重要的原则是:最大限度地拼接将每个填充面(Hatch)生成的边线。这会给后续的用户检核工作带来极大的便利。
在我们设计的转换流程中,当不能正确拼接、不能创建MPOLYGON时,我们采取的方式是将边线放置到特定的层让用户去检查修改边线。这种情况下,如果当两个或多个相邻的Hatch面都不规范,且生成的边线比较琐碎的时候,就很难区分各个琐碎边线的归属,不知道这些互相叠压的边线是哪个面生成的,这就给用户的修改工作造成极大的麻烦。
所以我们用pedit命令拼接后,又用join命令进行更进一步的拼接。
3.4创建MPOLYGON
通过MPOLYGON命令,可以将闭合的多段线创建成MPOLYGON对象,但是对于数据质量有严格的要求:多段线上不能有重点、不能有折回、不能自相交。所以需要检查MPOLYGON对象是否创建成功,如果创建不成功,需要将边界线添加标记或放到特定的图层,让用户去检查数据问题,修正后再重新创建。自定义创建MPOLYGON的函数结构如下:
(defun Hatch2Shp_MK_MPOLYGON(ss/)...)
参数ss表示闭合多段线的选择集。如果函数运行成功,返回新创建的MPOLYGON对象,否则返回nil。
创建MPOLYGON对象以及判断是否创建成功的方法为:
首先,在创建MPOLYGON对象之前,用(ssget"X")获取当前图中的所有对象;然后创建MPOLYGON对象;再用entlast函数获取当前图中的最后一个实体;最后用(ssmemb en ss_all)判断en是否在原始图中存在,如果不存在,就说明en是最新生成的实体,再判断en的类型是否为MPOLYGON,如果是就说明创建成功了。
3.5输出面状shp
通过MAPEXPORT命令可以直接将MPOLYGON对象输出为shp数据。
3.6创建对象数据
在规划图斑数据中,属性点一般用属性块或多行文本来表示,其中包含了地块编号、用地代码等信息,如图2所示:
图2 属性数据示例
创建对象数据的步骤:
(1)创建对象数据表。Map3D中的对象数据表相当于shp中的DBF数据库表,LISP语言中通过ade_ oddefinetab函数来定义,方法如下:
定义时,必须指定表的名称(tablename)、说明(tabledesc)和字段列表;定义字段列表时,必须指定每个字段的名称(colname)、说明(coldesc)、类型(coltype)和默认值(defaultval)。字段类型共有四种,分别为:整型(integer)、字符型(character)、点(point)、实型(real)。
(2)附着对象数据。定义完对象数据表之后,仅仅是在图形环境中定义了一个属性结构,还没有与具体的对象相关联。我们需要先把对象与对象数据表关联,关联之后,表中的每个字段就相当于对象的属性了,然后再为每个字段赋值。自定义添加对象数据的函数结构为:
函数set_field接收四个参数:对象名为ENAME类型;表名即对象数据表的名称;字段名是指上一步骤中定义的字段名称,如“地块编号”等;字段值的类型要与定义字段时的类型(coltype)一致。函数的实现过程为:
3.7输出点状shp
用MAPEXPORT命令可以将属性点直接输出为shp,输出方法如图2所示。如果属性点是符号块(INSERT)或点(POINT),对象类型选择“点”,如果是文本(TEXT或MTEXT),对象类型选择“文本”。为了输出对象数据,需要在“数据”标签页中选择属性,然后选择已经定义的对象数据表,如图3所示:
图3 输出对象数据
3.8空间连接
将图斑面和属性点都输出为shp后,可以通过多种方法将点的属性复制到面上。
方法一:通过ArcToolbox中的“空间连接”工具很方便地实现属性的复制;
方法二:通过DotSpatial等GIS组件来实现。实现方法如下所示:
本文讨论了DWG格式的规划图斑数据转换为shp数据的流程和方法,对转换过程中重要技术环节的处理给出了详细的解决方案。
笔者认为,在DWG格式数据中,用Hatch填充面来表示面状规划图斑并不是最理想的表达方式,因为Hatch对象的创建相对比较自由,生成Hatch的过程中不会检查悬挂线、自相交、折回线等,只要存在闭合的路径就能创建,如图4所示。
正如前文所讨论的,MPOLYGON对象可以直接转换为面状的shp,因为MPOLYGON是规范的多边形,创建时它会对边线是否存在重叠点、自相交、折回等进行严格地检核,所以MPOLYGON相对于Hatch而言,是更科学的表达面状图斑的方式。
图4 Hatch的缺点
[1] 齐占开.基于Autodesk Map 3D数字制图系统符号库设计[J].矿山测量,2014(2):8~9.
[2] 周丽珠,周奎,周义军.基于CAD数据的GIS化处理过程的研究与应用[J].城市勘测,2013(5):23~25.
[3] 王婷丽.基于ArcGIS的规划数据格式转换研究[J].江西理工大学学报,2013(1):51~54.
[4] 谢祖明.基于CAD数据生产ArcGIS制图数据的研究与应用[J].测绘与空间地理信息,2012(8):121~123.
[5] 周丽珠,刘富东,周义军等.基于关系探测聚类的图形自动接边算法[J].城市勘测,2012(6):126~129.
[6] 谭清华,张明.基于DWG文件的图形转换方法与程序实现[J].城市勘测,2012(4):125~127.
[7] 王光昇,周丽珠,刘允等.基于AutoCAD自定义实体的初步研究[J].城市勘测,2012(2):134~137.
[8] 周义军,刘小飞,舒滨等.基于规则和模板的CAD到GIS数据转换[J].城市勘测,2012(1):81~83.
[9] 刘仁义,刘南.ArcGIS开发宝典——从入门到精通[M].北京:科学出版社,2009.
The Method of Urban Planning Polygon Data Convert to GIS Data Based on Map3D
Liu Mi,Shu Bin,Yang Zhao
(Tianjin Institute of Surveying and Mapping,Tianjin 300381,China)
At current,the urban planning polygon data is represented by the filling object(Hatch)of AutoCAD.The filling objects cannot be converted directly to SHP data.This paper discusses the method of urban planning polygon data convert to GIS data based on Map3D and gives the corresponding solutions for the problems of conversion.
Map3D;GIS;urban planning polygon;shapefile
1672-8262(2016)01-122-04
P208.1
B
∗2015—09—17
刘宓(1979—),女,高级工程师,注册测绘师,主要从事地理信息数据制作处理等工作。