首页 > 常用资料 > LISP写的高斯投影正反算及七参数投影变换相关程序
2010
02-14

LISP写的高斯投影正反算及七参数投影变换相关程序

这个是用LISP写的高斯投影正反算及七参数投影变换的相关程序。
主要功能:
1、内置54、80、84、2000椭球基本参数
2、上述椭球的标准高斯正反算;
3、上述椭球上具有高程抵偿面的任意带高斯投影正反算;
4、7参数投影变换;
5、上述椭球的大地坐标和空间直角坐标的转换;
辅助功能:
1、D.MMSS格式的度分秒和弧度的互相转换;
2、54、80、84、2000椭球的基本参数及计算常用参数的获取;
利用这些可以做的其他事情:
1、GPS测得的WGS84坐标和地方坐标的转换;
2、换带计算;
3、经过组合,可以实现不同坐标系、不同坐标形式的自动转换。
程序下载z.kklt_cotr.rar:[mDown=attachments/month_1002/20100214170803_z.kklt_cotr.rar]z.kklt_cotr.rar[/mDown]
程序需要在AUTOCAD下运行,运行说明如下:
;**************************************************
;;DUTOHU
;将D.MMSS格式的角度转换为弧度
;用法:
;(dutohu du)
;**************************************************
;;HUTODU
;将弧度计的角度转换为D.MMSS格式的角度
;用法:
;(hutodu hu)
;**************************************************
;;GPP
;获取椭球基本参数,与位置无关
;用法:
;gpp (gn gp)
;gn为椭球名称,可接受54、80、84、2000
;gp为待获取的参数,可接受a、b、e、e1
;如:
;(gpp 54 a)
;意为取54椭球长半轴a的值
;**************************************************
;;GPF
;获取椭球的辅助参数,与位置有关
;gn椭球名
;gp待获取的参数
;gb点的大地纬度B
;gl点的大地经度L
;gu点的单位格式,1为度.分秒;2为十进制度;3为弧度
;gp选择
;w
;v
;dn
;n卯酉圈曲率半径
;r平均曲率半径
;**************************************************
;;BLHTOXYZ
;将大地坐标转为空间直角坐标
;旋转角单位为弧度
;输入大地坐标B、L、H
;用法为:
;(blhtoxyz gn blhb blhl blhh)
;gn可选54、80、84、2000
;输出空间直角坐标,分别为xyzx,xyzy,xyzz,全局变量
;**************************************************
;;XYZTOBLH
;将空间直角坐标转为大地坐标
;输入空间直角坐标
;用法为:
;(xyztoblh gn xyzx xyzy xyzz)
;输出大地坐标B、L、H,分别为BLHB、BLHL、BLHH,全局变量,以弧度计
;**************************************************
;;BURSA
;空间直角坐标七参数转换
;用法为:
;(bursa tx ty tz wx wy wz m gn1x gn1y gn1z)
;tx、ty、tz为三个平移参数,单位为米
;wx、wy、wz为三个旋转参数,单位为弧度
;m为尺度比差异,如0.000004,单位为1,不是ppm
;输出gn2x、gn2y、gn2z为转换后的空间直角坐标,外部变量
;**************************************************
;;BLTOXY
;高斯正算
;子午线弧长lb、xyx、xyy为外部变量,其余为内部变量
;单位均为弧度
;用法为:
;(bltoxy gn gl0 blb bll)
;gn可选54、80、84、2000
;gl0为中央经度
;输入blb、bll为大地经纬度
;输出xyx、xyy为高斯正算后的坐标,全局变量
;**************************************************
;;XYTOBL
;高斯反算
;底点纬度bf、blb、bll为外部变量,其余为内部变量
;单位均为弧度
;用法为:
;(xytobl gn gl0 xyx xyy)
;gn可选54、80、84、2000
;gl0为中央经度
;输入xyx、xyy为平面坐标
;输出blb、bll为高斯反算后的大地经纬度,全局变量,以弧度计
;**************************************************
;;DFBLTOXY
;具有高程抵偿面的任意带高斯投影的高斯正算
;用法为:
;(dfbltoxy gn b0 l0 dx dy m blb bll)
;gn可选54、80、84、2000
;b0为中央纬度
;l0为中央经度
;dx为X加常数
;dy为Y加常数
;m为尺度比
;输入blb、bll为待解算的大地经纬度
;输出xyx、xyy为高斯正算后的坐标,全局变量
;**************************************************
;;DFXYTOBL
;具有高程抵偿面的任意带高斯投影的高斯反算
;用法为:
;(dfxytobl gn b0 l0 dx dy m xyx xyy)
;gn可选54、80、84、2000
;b0为中央纬度
;l0为中央经度
;dx为X加常数
;dy为Y加常数
;m为尺度比
;输入xyx、xyy为平面坐标
;输出xyx、xyy为高斯反算后的大地经纬度,全局变量,以弧度计
[color=Red][size=13]2012.04.25修改
1、外围程序小小更新了下:
有个试用了的朋友提醒以前的弧和度互转程序有些小BUG。
经查,因为CAD取位问题,在某些看似整数的时候会出错。
dutohu和hutodu函数已经修正了,我把这两个函数单独打包了,函数名分别改为dutohu1和hutodu1。
程序下载duhu.rar:duhu.rar
2、关于程序的补充说明:
函数选用:用国家3度带或6度带投影的,这个是带常数的高斯投影,Y加了500000的,有两种方式计算:一是用xytobl函数,但是Y需要减去500000;二是用dfxytobl函数,b0取0,l0输中央子午线,dx取0,dy取500000,m取1。
关于代码:程序发上来也几年了,一直有朋友想要代码,我觉得没这必要,能用就行了,代码可以自己搞懂了自己写,虽然这程序原理上不算复杂,毕竟是自己幸苦码出来的,请理解。想探讨技术问题的可以留言或邮件。
几位留言说计算有问题的朋友,问题并不是在程序上,在于对坐标系统,特别是独立坐标系,以及高斯正反算的理解上有误。恕我直言,这些坐标系的理解没到,就是拿到程序了也没用处。
[/size][/color]

最后编辑:
作者:z.kklt
这个作者貌似有点懒,什么都没有留下。

LISP写的高斯投影正反算及七参数投影变换相关程序》有 19 条评论

  1. kingcrab 说:

    今天一口气把博主常用资料李的所有文章都看完了,非常倾慕博主的才华,只是目前好像不能注册用户,能否把这个程序给我发过来,在下万分感谢!
    邮箱:yzhl20040467@163.com

  2. z.kklt 说:

    邮件已经发送了。
    无法注册的问题已解决,注册协议中有一条出现了敏感词汇,被天朝的网络系统禁止导致页面出错了。

  3. kingcrab 说:

    邮件已收到,多谢博主
    刚刚有注册成功,好开心,敢问博主,能不能把lisp源码发给我,邮箱yzhl20040467@163.com,先在这谢过了

  4. liujing95 说:

    博主,加载成功用不了,能不能发源文件给我,QQ510946826,小弟感激不尽

  5. z.kklt 说:

    liujing95
    博主,加载成功用不了,能不能发源文件给我,QQ510946826,小弟感激不尽

    请说明你是如何用的,出现了什么问题,这个我都是测试过的,平时有需要也都在用,应该是没有问题的。

  6. ZTEYKMGSCQH 说:

    这个程序不错,实际工作有需要,可否分享一下你的源码,不胜感激!邮箱412803353@qq.com

  7. pslstar 说:

    能给我分享您的lisp源码吗,我的qq 327285969,谢谢您了。

  8. lougof 说:

    非常感谢博主,非常羡慕,汽车,数码产品,无人机,旅游,写代码,还做测绘?。哇哇,都是俺的主业啊,可惜俺只是菜鸟。运行这个程序如(xytobl 54 1.88496 2734163.8819 398807.8335)返回(hutodu blb)24.3936 (hutodu bll)111.562,是不对的。应为24.42.30,107.0000。请指教,不尽感激。 能否赐予lisp源码。邮箱598468976@qq.com不尽感激

  9. z.kklt 说:

    lougof
    非常感谢博主,非常羡慕,汽车,数码产品,无人机,旅游,写代码,还做测绘?。哇哇,都是俺的主业啊,可惜俺只是菜鸟。运行这个程序如(xytobl 54 1.88496 2734163.8819 398807.8335)返回(hutodu blb)24.3936 (hutodu bll)111.562,是不对的。应为24.42.30,107.0000。请指教,不尽感激。 能否赐予lisp源码。邮箱598468976@qq.com不尽感激

    用国家3度带或6度带投影的,这个是带常数的高斯投影,Y加了500000的,有两种方式计算:一是用xytobl函数,但是Y需要减去500000;二是用dfxytobl函数,b0取0,l0输中央子午线,dx取0,dy取500000,m取1。
    具体你这个,应该这样用(xytobl 54 1.88496 273163.8819 (- 398807.8335 500000)),注意后面用更新了的弧到度的转换程序(hutodu1 blb) 24.423,(hutodu1 bll) 107.0

  10. 能否能否牛奶房内蒙 说:

    楼主也是测量的?有空交流以下 大角度7参数转换的问题? QQ:2223895562

  11. z.kklt 说:

    能否能否牛奶房内蒙
    楼主也是测量的?有空交流以下 大角度7参数转换的问题? QQ:2223895562

    大角度7参数转换如果参数已知,转换没什么特别的;若是大角度7参数求参,相关期刊有很多类似的文章有介绍,这个偏理论点了,我研究得少,而且平时接触的不外乎北京54、西安80、WGS84和本地的地方坐标系这些,旋转角度都很小,没太大动力研究。

  12. awd373 说:

    北京54坐标 4751957.53 539508.37 转换成 54 大地坐标blh 怎么用 给一个实例 我使用后结果路唇不对马嘴(xyztoblh 54 4751957.53 539508.37 0)(xytobl 54 4751957.53 539508.37 ) 想要的正确结果为 b: 42 54 04.84096 L; 129 29 01.46393

  13. awd373 说:

    另外输出 一个返回值是不是更好些,因为想用您写的程序很担心变量值被覆盖或不对应 运算错误,而不敢重复使用。
    如 (xyztoblh gn xyzx xyzy xyzz) 直接返回值 为(b l h),别人用的时候(setq aa (xyztoblh gn xyzx xyzy xyzz))
    这样就取出 结果 而不担心什么了,希望得到解答。gcl1989@163.com

  14. z.kklt 说:

    awd373
    北京54坐标 4751957.53 539508.37 转换成 54 大地坐标blh 怎么用 给一个实例 我使用后结果路唇不对马嘴(xyztoblh 54 4751957.53 539508.37 0)(xytobl 54 4751957.53 539508.37 ) 想要的正确结果为 b: 42 54 04.84096 L; 129 29 01.46393

    1、高斯反算需要知道中央子午线或者有3度带或者6度带的带号反算中央子午线;
    2、没仔细看文章,函数用错,XYZTOBLH是空间直角坐标和大地坐标的转换。高斯反算函数为XYTOBL或者DFXYTOBL。
    3、函数以前写的,这样也用习惯了,懒得改了,用的时候自己定义一组变量再赋值就是了。

  15. awd373 说:

    么么嗒~~ 计算出结果啦~ 可是精度不够啊,我想要129.00844286 度想要 129度29分01.46393秒 咋办啊。54 和84 转换的结果都是129.008

  16. z.kklt 说:

    awd373
    么么嗒~~ 计算出结果啦~ 可是精度不够啊,我想要129.00844286 度想要 129度29分01.46393秒 咋办啊。54 和84 转换的结果都是129.008

    文章和我的回复已经说得很清楚了,如果你真的认真看完,绝对不会有问题的。真不是上纲上线,研究坐标转换的精神可嘉,但是没静下心来,学习方法有问题。
    自己看,不解释:
    命令: (xytobl 54 (dutohu 129) 4751957.53 39508.37)
    2.25992
    命令: (rtos (hutodu blb) 2 10)
    “42.5404840961”
    命令: (rtos (hutodu bll) 2 10)
    “129.2901463933”

  17. awd373 说:

    学习了。谢谢~

  18. hewz 说:

    我把你写的函数运用到我的地形图换带里面,我用同济大学万能坐标软件做了验证,结果正确。省了我好大的精力去写这些函数,非常感谢。

  19. z.kklt 说:

    hewz
    我把你写的函数运用到我的地形图换带里面,我用同济大学万能坐标软件做了验证,结果正确。省了我好大的精力去写这些函数,非常感谢。

    能用上就好,不过为什么要和同济大学的软件比,让武测的我情何以堪啊。话说回来,和武测的科傻比,真不太一样,科傻在计算的时候考虑了大地高引起B的变化,稍麻烦点。

留下一个回复