• Cehui8.com www.w889vip.com.com地理信息领域专业门户
  • 首页 > www.w889vip.com.com论文 > 基础www.w889vip.com.com

    两种坐标系的平面坐标及高程换算方法

    2013-07-07 08:27:10 来源: www.w889vip.com.com论坛 作者:
    聊聊
      摘要:介绍利用AutoCAD内嵌语言AutoLISP的数据库操作函数,实现测量坐标系与施优德w88坐标的换算问题,并附上换算程序。
    关键词:AutoCAD;Au toLISP;坐标系统换算

    一 、问题的提出
    总图设计人员为便于设计,常常根据场地情况采用施优德w88坐标系,以便使新设计建筑物的轴线平行于施优德w88坐标轴。施优德w88坐标系与测量坐标系的坐标换算公式:
    由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。为施优德w88坐标系原点在测量坐标系中的“坐标,R。为施优德w88坐标系统A轴正方向与测量坐标系统X轴正方向的夹角,如图1,图1(a)中为正值,图1(b)中为负值。
    二、 平面坐标的换算
    AutoCAD得以在世界范围内流行的重要因素之一,是它的开放性,它将二次开发权交给了用户,并提供了许多开发优德w88具,特别是内嵌的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 00.0))
    ) (斌 = 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 )表示由测量坐标系统换算成施优德w88坐标系统;(A,B=>X,川表示由施优德w88坐标系统换算成测量坐标系统。
    三、高程的换算
    高程的换算需要如下程序:
    (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 。以及坐标系间的高差,即可完成图纸的坐标系换算
    版权声明:本站部分论文来源于网络(或网友投稿),如有侵权,请联系我们删除处理。
    返回顶部