16 浙 江 测 绘 2001年 基于AutoCAD的地形图数据处理方法 南 胜钱迈 浙江杭州310016) 接口、开发环境来对地形图数据进行处理,具 (浙江省河口海岸研究所 摘要:本文提出在Windows环境下,运用 CAD技术实现对地形图数据进行处理的方法。运 体的方法分为: 2.1常数设定 用该方法,可提高地形图制作精度,降低制作费用, 提高工作效率 关键词:CAD技术数据处理 在地形图数字化处理过程中,有时会遇 AuToLisp语言 地形图 到这样的问题,即想利用的部分图形资源的 高程基准面与现图的基准面不是一个系统, 需要对原有的高程进行转化,一般两个高程 系统相差一个常数C,如某地,吴淞基面与黄 海高程系统的关系式是:吴淞高程=黄海高程+C,在此关系式中,C设定为1.88m。海 图中的水深点转换成地形图中的高程点, 1985国家高程基准面转换成吴淞高程系,理 1引言 随着Windows环境下CAD、GIS等软件 的广泛应用,人们对计算机绘制数字地形图 . 的认识有了进一步的提高,地形图图形文件 的交流领域在不断地扩大,手法上也不再是 那种单一的引用,而是向多层次、多元 化、多智能方向不断地发展。地形测绘的数 据成果经过CAD编辑处理后,可以从不同角 论基准面、平均海平面与高程系之间的相互 转换,所有这些在局部范围内均可进行常数 设定。在实际地形测量工作中,有时会受某 些条件的,暂时用假定高程进行测量,测 量数据输入计算机暂时成图,高程求出后再 进行差数修正。 由于在CAD图形上,每个数据是一个个 度、比例,不同系统、度量单位等方面人手,合 理利用图库中已有的数据,创建出不同要求 的图形文件。但在利用CAD技术处理过程 中往往会遇到诸多的实际问题,如不同投影 之间的变换处理;高程注记小数位数不统一 的处理;不同图形高程系统之间的数据转换 处理;用DTEXT命令将数据的小数点作为 高程点位置时的移位处理等。对于上述问题 的解决运用CAD内嵌的Lisp语言进行编程 处理就显得简洁和快捷。 单独字符,一张图有上百个数据要一一进行 常数据修正,不仅费时费力,而且容易出错, 用Lisp语言进行编程来实现数据的自动批量 转换就显得非常省力且不会错。程序界面设 计如图1所示,根据程序菜单上的选择输入 欲设定的数据常数,程序会自动寻找目标数 2地形图数据处理方法 AuToCAD是开放性的软件系统,具有广 泛的通用性,利用系统提供的工作平台、用户 据进行处理。处理后的数据会变色以与未处 理的数据相区别。 2期 南胜等:基于AutoCAD的地形图数据处理方法 17 数字化搜褪蛄纯 *一撼黔 .设 一每一定心致#蔽接 擂狴 一准据蠢= ?数 {向t一 … · 毒 - 毫 …_¨_ 蓝线擞台? 誊 一-。 j:啦浅线墼产生j . 黪茁戡蠛垂 及拟合 嚣 t 0 麴蠛线墼控直 .--。 - -焉三‘ 不常用功考豸 装 ‘’、 …冀 鼍’’ 图1程序界面设计图 常数设定流程,如图2: 图2常数设定流程图 2.1.1清序清单 2.1.1.1话框: chgtxt:dialog{ label=”数据常数改正”; edit—box label=”请输入改正数”; key=’’txt’’ allow-accept=true; value=”一0.06”: height=1: } ok—only; } 2.1.1.2 LSP程序 (defun C:CHGTXT() (setq dcl—id(1oad—dialog”chgtxt.dcl”)) (if(not(new-dialog”chgtxt”dcl—id)) (exit) ) (mode—tile”ttt”2) (action.tile”accept””(do)(done ̄dia— log)”) (start—dialog) (unload.dialog dc1.id) ; 以上为显示对话框作准备 (setq chang(strlen va1)) (setq ch chang) (while(>chang 0) (setq dz(substr val chang 1)) (if(equal”.”dz) (setp gs(一ch chang)) ;gs 为从对话框带来的改正值的小数个数 ) (setq chang(一chang 1)) ) (setq val(atof vail)) ; 已转化为实数的改正值 (setq sl(ssget)) ;运用LSP所 带的函数进行选取并运算 (setq n(sslength s1)) (setq n(一n1)) (while(>=nO) 18 浙 江 测 绘 (setq nl(ssname sl n)) (setq entlist(entget n1)) 2001年 程注记方法是不一样的。国家测绘总局1996 年版图例中规定:“一般注记法”是用小数点 作为高程点、水深点的位置的,也就是说它既 (if(=(cdr(assoc 0 entlist))” TEXT”)确定所选的是否为文字 (if(:(cdr(aSSOC 8(entget 要当小数点(高度“z”)又要当点位(平面“x, Y”)因此这个点就与测量的精度要求有着密 n1)))”SZ” ;确定所选的是否在SZ层上 ;只有满足上两个条 件的才处理 (progn (setq wz(cdr(assoc 1 entlist))) (setq wz(atof WZ)) (setq WZ(+WZ va1)) (setq wz(ftos WZ 2 gs)) (setq entlist(subst(cons 1 wz)(aS— SOC 1 entlist) entlist)) (entmod entlist) (setq entlist(subst(COILS 62 174)( ̄qSSOC 40 entlist) entlist (entmod entlist) (prompt”\n\n OK!\n\n”) ) ) ) (if(/=(cdr(assoc 0(entget n1)))” TEXT” (prompt”\I"1 NO!”) ) setq FI(n一1)) ) (wine) ) (defun do() (setq val(get—tile”ttt”)) 2.2小数点作为高程点时的移位处理 水下地形图高程的注记方法与陆地上高 切的联系,同时在很大程度上反映一幅图的 准确性,然而在AuTOCADK,十个阿拉伯数 字在图上显示时,其宽度是不一样的,如:“2” 比“l”宽;不同的阿拉伯数字组合在一起,虽 然形成的是一组数,但由于“数字”的不同,组 合数的长度就不一样,如1.11和2.44。换句 话说不同数字位数相同,其字符串的宽度并 不一样。这时不加任何处理就用数字化仪或 扫描仪获得的地形图通过DTEXT命令进行 数字的输入,并用数字化仪上的鼠标十字线, 对准小数点,或凭经验预留字格等,所获取的 点与原图上的点,都会有移位现象。因此要一 对它进行处理。 首先我们在采点的时候用数字化仪上的 鼠标十字线对准小数点的位置,然后通过 CM)内嵌的LISP语言,编个程序把输入的 数字分成整数、点、小数三部分,点的位置就 是数字化仪实点的位置,整数、小数放在点的 两边。这样修改高程时,只改动整数、小数部 分、而点并不移动,从而保证了点位的精度。 下面介绍一种在实际操作中比较简单的方 法,用CAD中DTEXT命令输入第一个数,它 在采点的点位上,输入第二个数,第一个数后 移,第二个数就在采点的点位上,以此类推, 直到把所有的数输完。这个字符的位置就是 数字化仪的位置,也就是高程点的实际位置, 限于篇幅我们只给出程序流程图,见图3所 示。 2期 南胜等:基于AutoCAD的地形图数据处理方法 19 图3面积点移位流程图 2.3图中高程数据合取 在编辑不同比例地形图时,会碰到这样 的情形:由于地形图类别、比例、属性的不同, 高程注记的小数位数会不统一,有的高程注 记保留二位小数如“4.48”,有的则保留一位 小数如“4.5”,有时也会遇到另一种问题,被 编辑的地图中要插入部分高程体系不同的地 形数据,并对插入部分的高程体系进行修正, 或常数设定,这些往往也会出现小数位数不 统一的现象,因此对这部分高程数据要进行 舍取。数据舍取程序流程见图4。 图4数据舍取流程图 3结束语 本文只是从地形图的数据处理方法来描 述AuToCAD技术的二次开发过程。编写的 程序在实际应用中表明地形图的制作精度、 制作效率和制作灵活性均取得了非常好的效 果。由于AuToCAD系统所具有的开放性,经 常可根据实际工作需要来开发一些应用程序 以提高工作效率。 参考文献 [1]宋英贤、杜小霞、郑佐文、杨克俭.中华人民 共和国国家标准地形图图式(1:10000).北京:中国 标准出版社,1995 [2]苏鸿根等.怎样开发AuToCADR12.北京:清 华大学出版社,1995 [3]林龙震.AutoCADR12.0使用手册.北京:学 苑出版社,1993