两种坐标系的平面坐标及高程换算方法摘要:介绍利用AutoCAD内嵌语言AutoLISP的数据库操作函数,实现测量坐标系与施工坐标的换算问题,并附上换算程序。关键词:AutoCAD;Au toLISP;坐标系统换算 一 、问题的提出总图设计人员为便于设计,常常根据场地情况采用施工坐标系,以便使新设计建筑物的轴线平行于施工坐标轴。施工坐标系与测量坐标系的坐标换算公式: 由AB换为XY X =X o +Ac osR O+BsinR O Y= Y o 一As inR O+BcosR O 由 XY 换为AB A= ( X 一XO)cosR O一(Y一YO)sinR O B= ( X一 XO)sinR O+(Y一YO)cosR O 式中,Xo, Y。为施工坐标系原点在测量坐标系中的“坐标,R。为施工坐标系统A轴正方向与测量坐标系统X轴正方向的夹角,如图1,图1(a)中为正值,图1(b)中为负值。二、 平面坐标的换算 AutoCAD得以在世界范围内流行的重要因素之一,是它的开放性,它将二次开发权交给了用户,并提供了许多开发工具,特别是内嵌的AutoLISP 语言简单易学,且功能强大。笔者就是利用AutoLISP编程来简化坐标系统换算的。下面介绍给大家,程序如下: (de fun c :x ths(/ald f m n o 禅wx 1Y O (set qa l (ge tdi st” n输人0V ’”):“) x1( get d ist ” n 输人 X o:”) yl( g etd ist ” n 输 人 YO:”) n(g etd ist” n(X ,Y E A,B= 1)(A,B==>X,Y =2)}1}):”) o(ss get ") C) w(l ist 0 0 )p (ilstyl x l) d(f ix a l) a l (‘ (一 al d ) 10 0)f(fixa l)m(* 1 00 (一alf) ) al( +d (/ f 60 .0) (/ m 3 6 )) ) (斌 = nn il) (se tqn 1 )) (if (/ =n 1 ) (por gn (set qa l (‘ 一 1 al ) ) (co mm an d" orta te 'o' "w a l" mo ve 'o'"w p " zoom'"e ) ) (command"m oved'"p w 'ortate'o'"w a l"zood' ne) ) (princ) ) 在程序运行时,首先要求输人两坐标系统间的夹角Ro,角度按60进制输人。按下来要求输人Xo, Yo,只将它们的值输人即可。此程序能够完成两个坐标系统的相互换算,按提示选择字符1,2就行(缺省为1)。提示中的(X,Y =>A ,B )表示由测量坐标系统换算成施工坐标系统;(A,B=>X,川表示由施工坐标系统换算成测量坐标系统。三、高程的换算 高程的换算需要如下程序: (de fun c :chtext(/a la 2b lb 2b 3b 4b 5b 8c lc 2c 3 pl sl s2 s3 w) (set qp l(g e td ist” 、n两高程系统间高差是多少?:‘今 w(g ets trin g n 输 人 要 处理 高程数据的层名:")w(strcease w) s3(g eti nt" n 处 理 后高 程保 留的小数位数:'1) ) (se tq a l ( s s g e t" X "(l ist(c ons0" text")(c ons8w ))) a2 (sslength al)n 0) (erp eat a2 (set qb l(s sna me al n ) b2(entgetbl ) b3(cdr (, 1 b2)) b4( cd r( , 10 b 2 )) b 8 (a sci ib 3) b 5 (cdr(, 7 b2) ) (if (4-b8 57) (por gn (set qc l (a tof be ) s2 (fix cl )s l (一 cl s2 ) (if (/ =s l0 ) (por gn (e n tde lb l ) (s e tqc 2 ( +c 1p l) c3(rt osc2 2 s3 )) (co mm and "l aye ''" 9 'w "” "te xt" "9 'b5 b410c3 ) )(setq n(+n 1)) 高程 的 换 算需要如下程序: (de fun c :chtext(/a la 2b lb 2b 3b 4b 5b 8c lc 2c 3 pl sl s2 s3 w) (set qp l(g e td ist” 、n两高程系统间高差是多少?:‘今 w(g ets trin g n 输 人 要 处理高程数据的层名:")w(strcease w) s3(g eti nt" n 处 理 后 高 程保 留的小数位数:'1) ) (se tq a l ( s s g e t" X "(l ist(c ons0" text")(c ons8w ))) a2 (sslength al)n 0) (erp eat a2 (set qb l(s sna me al n ) b2(entgetbl ) b3(cdr (, 1 b2)) b4( cd r( , 10 b 2 )) b 8 (a sci ib 3) b 5 (cdr(, 7 b2)) ) ) ) (if (4-b8 57) ) (re dra w) ( p r i nc ) ) 此程序首先要求输人两个坐标系统间的高差值,然后要求输人高程数据所在的层名,最后要求输人高程处理后要保留的小数位数,一般情况下,控制点名由字母开头并与控制点高程处于同一层。值得说明的是怎样解决控制点名与控制点高程的判断问题。大家知道,数字与字母的ASCII码不同,本程序就利用这一点来解决这一问题的。只要判断出得到的TEXT实体第一个字符的ASCII码,即可分辨出是控制点名,还是控制点高程。分辨之后再分别处理,对控制点名不做处理,对控制点高程,先将实体从图中删除,然后再重新在原位置写上换算后的高程。控制点若用自然数命名,本程序也能分辨出来。其方法是:先将所取得的高程字符用atof函数转换成实数,然后再用fix函数取整。若此实数与取整后的差值为0,则说明此数字是控制点名,不做处理。四、结束语上述的平面坐标及高程换算程序,虽然是为换算控制点坐标而编写的,但它们的用途不只于此。利用它们,可将不同坐标系的图纸互相换算。在换算过程中不需任何计算,只需做出选择,按提示输人夹角Ro,X o,Y 。以及坐标系间的高差,即可完成图纸的坐标系换算。