明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1916|回复: 2

[已解答] UTM投影正算(求解)

[复制链接]
发表于 2013-11-1 12:04:10 | 显示全部楼层 |阅读模式
根据书上公式计算出的结果与笑脸软件有差别,不知为何,求高人解答



  1. ;;;UTM投影正算
  2. (defun c:tt ( / B L L0 TYA TYB XY)
  3.   (setq TYa 6378137              ;WGS84 长半轴
  4.         TYb 6356752.3142451      ;WGS84 短半轴
  5.         B   18.0700              ;经度
  6.         L   110.1900             ;纬度
  7.         L0  111                  ;中央子午线
  8.   )
  9.   (setq B (BLTK_Du_Hu B))       ;以弧度为单位
  10.   ;UTM投影自西经180°起每隔经差6度自西向东分带,第1带的中央经度为-177°,因此高斯-克吕格投影的第1带是UTM的第31带
  11.   ;确保东经位于-180.00----179.9之间
  12.   ;(setq L (- (+ L 180) (fix (* 360.0 (/ (+ L 180) 360.0))) 180))
  13.   ;(setq L (BLTK_Du_Hu L))       ;以弧度为单位
  14.   (setq L (* L (/ pi 180.0)))
  15.   (setq L0 (* L0 (/ pi 180.0)))
  16.   (setq XY (UTMTY_BL_XY TYa TYb B L L0))
  17.   (princ XY)
  18.   (princ)
  19. )
  20. (defun UTMTY_BL_XY (TYa TYb B L L0 / A a1 a2 a3 a4 b1 b2 b3 b4 b5 C e1 e2 FE FN M Nn Tn X Y k0)
  21.   (setq FN 0)        ;北纬偏移
  22.   (setq FE 500000)   ;东纬偏移
  23.   (setq k0 0.9996)
  24.   ;计算椭圆元素
  25.   (setq Tn (expt (/ (sin B) (cos B)) 2.0)) ;0.107041764
  26.   (setq e1 (sqrt (- 1.0 (expt (/ TYb TYa) 2.0))))  ;第一偏心率 0.081819197
  27.   (setq e2 (sqrt (- (expt (/ TYa TYb) 2.0) 1.0)))  ;第二偏心率 0.082094440
  28.   (setq C (* (expt e2 2.0) (expt (cos B) 2.0))) ;0.006087843
  29.   ;计算正算系数
  30.   (setq A (* (- L L0) (cos B)))
  31.   (setq a1 (- 1.0 (/ (expt e1 2.0) 4.0) (/ (* 3.0 (expt e1 4.0)) 64.0) (/ (* 5.0 (expt e1 6.0)) 256.0))
  32.         a2 (+ (/ (* 3.0 (expt e1 2.0)) 8.0) (/ (* 3.0 (expt e1 4.0)) 32.0) (/ (* 45.0 (expt e1 6.0)) 1024.0))
  33.         a4 (/ (* 35.0 (expt e1 6.0)) 3072.0)
  34.   )
  35.   (setq M (* TYa (- (+ (* a1 B) (* a3 (sin (* 4.0 B)))) (* a2 (sin (* 2.0 B))) (* a4 (sin (* 6.0 B))))))
  36.   (setq Nn (/ (/ (expt TYa 2.0) TYb) (sqrt (+ 1.0 (* (expt e2 2.0) (expt (cos B) 2.0)))))) ;卯酉圈半径
  37.   (setq b1 (* Nn (/ (sin B) (cos B)))
  38.         b2 (+ (- 5.0 Tn) (* 9.0 C) (* 4.0 (expt C 2.0)))
  39.         b3 (- (+ 61.0 (expt Tn 2.0) (* 600.0 C)) (* 58.0 Tn) (* 330.0 (expt e2 2.0)))
  40.         b4 (+ (- 1.0 Tn) C)
  41.         b5 (- (+ 5.0 (expt Tn 2.0) (* 72.0 C)) (* 18.0 Tn) (* 58.0 (expt e2 2.0)))
  42.   )
  43.   (setq X (+ FN (* k0 (+ M (* b1 (+ (/ (expt A 2.0) 2.0) (* b2 (/ (expt A 4.0) 24.0)))) (* b3 (/ (expt A 6.0) 720.0))))))
  44.   (setq Y (+ FE (* k0 Nn (+ A (* b4 (/ (expt A 3.0) 6.0)) (* b5 (/ (expt A 5.0) 120.0))))))
  45.   (list (rtos X 2 6) (rtos Y 2 6))
  46. )
  47. ;;;将度.分秒形式化为弧度:输入为度.分秒形式,输出为弧度
  48. (defun BLTK_Du_Hu (deg / du fe mi r)
  49.   (setq du  (fix deg)
  50.         deg (* (- deg du) 100.0)
  51.         fe  (fix deg)
  52.         mi  (* (- deg fe) 100.0)
  53.         r   (+ du (/ fe 60.0) (/ mi 3600.0))
  54.         r   (* r (/ pi 180.0))
  55.   )
  56. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-11-1 21:56:04 | 显示全部楼层
呵呵,我试过,结果是一样的,也是用你的程序
发表于 2020-11-1 18:37:14 | 显示全部楼层
不用专门写utm正反算了
就用你写的高斯正反算直接转
高斯正算结果bl-->xy  即(list x y)转换就行

近似采用 Xutm=0.9996 * X高斯,Yutm=0.9996 * Y高斯   进行坐标转换
这个就是utm正算结果(list (*(car xy)0.9996) (+ (* (- (cadr xy)500000)0.9996)500000))
已与国外的软件global mapper结果比对是正确的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-20 16:47 , Processed in 0.196588 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表