(南昌市测绘勘察研究院 江西南昌 330008)
在南方CASS5.0 版本以上数字化地形地籍成图软件中,南方公司制作了“高程点生成数据文件”的工具,该工具可对CASS格式的三维高程点进行提取,但对于二维图形的高程是无法提取的。因此,通过编写程序将二维图形中高程的自动提取,保证进一步的地形图高程的利用,非常具有现实意义。
AutoCAD 二维图形中,高程点通常表示方式是由平面坐标和高程注记来表示的,高程点无高程属性,因此,通过搜索高程点最近的高程注记,可进行高程属性的自动赋值。
在二维图形中提取高程,需用到DXF 组码,我们可能通过AutoCAD 自带的《DXF 参考手册》中查找文件中图元、图块及对象的组码,也可以在VISUAL LISP 控制台中键入“ (setq g (entget(car(entsel " 请选择图形对象"))))”然后将光标移至变更名“g”右健“检查”便可查询图元所涉及的组码,本文图形对象所涉及的DXF 组码主要有以下几种:高程注记图块的组码如次页图1。
图1中“[1(]0“.TEXT”)”中的“0”为DXF 组码,表示高程点在CAD 图形中表示图元的对象类型,“TEXT”表示对象类型的名称“;[7(]8“.地形图”)”中的“8”为DXF 组码,表示高程点在CAD 图形中表示图元所在图层,“地形图”表示图元所在图层的名称;“[10(]10 54789.9 53263.6 0.0)”中的“10”为DXF 组码,表示高程点在CAD 图形中表示图元的坐标,“54789.9 53263.6 0.0”为 图元 坐 标;“[12](1.“16.60”)”中的“1”为DXF 组码,表示高程点在CAD图形中表示图元的注记内容“,16.60”为高程注记。高程点图块的组码如次页图2。
图2中“[1(]0“.ARC”)”中的“0”为DXF 组码,表示高程点在CAD 图形中表示图元的对象类型,“ARC”表示对象类型的名称;“[7(]8“.地形图”)”中的“8”为DXF 组码,表示高程点在CAD 图形中表示图元所在图层,“地形图”表示图元所在图层的名称;“[11(]10 54788.9 53264.8 0.0)”中的“10”为DXF 组码,表示高程点在CAD 图形中表示图元的坐标“,54788.9 53264.8 0.0”为图元坐标。
本文所解决的问题就是如何科学地将高程点中从标值中的“0.0”替换成高程注记中注记内容中的“16.60”。
我们可以通过以下步骤进行高程点的提取。
(1)选取二维图中任一高程点和高程注记,获得高程点和高程注记的图元类型及图层名等属性;
(2)设置高程点搜索高程注记的限差,设置提取后高程点和高程注记的图层名;
(3)获取所有高程点和高程注记的平面坐标;(4)从高程点数组中提取一个高程点坐标;
(5)搜索高程点最近的高程注记,并判断是否满足限差要求,若满足要求,进入步骤(6),否则进行步骤(7);
(6)用高程注记值替代高程点的Z坐标,并将该高程点和高程点注记的图层名更改为步骤(2)中设置好的图层名;
(7)该高程点存至另一图层,待手工处理,并剔除出高程点数组,进行步骤(4),提取下一高程点坐标;
(8)提取的高程点是否要输出至文本?是,则输出高程点数据文本后退出,否则直接退出程序。算法流程图如下图3。
图1 高程点注记组码示例
图2 高程点组码示例
图3 算法流程图
[主程序]
本文利用Visual lisp 语言开发的小程序,可以直接二维图形中高程数据的提取,为后续高程的利用打下了坚实的基础,并且在程序运行结束后,可以在图层管理器中查找到未赋予高程和已赋高程的数据情况,便于手工处理。节省了工作人员的大量劳动,提高了工作效率,是一个很实用的程序。
[1]Autodesk 公司,Autolisp Reference,2005.
[2]Autodesk 公司,Autolisp Developers Guide,2005.
[3]Autodesk 公司,Autolisp 教程,2005.
[4]Autodesk 公司,DXF 参考,2005.
[5]Autodesk 公司,objectARX,2005.