织梦CMS - 轻松建站从此开始!

罗索

GPS经纬度数据转换到以米单位的平面坐标系

jackyhwei 发布于 2011-11-24 09:15 点击:次 
GPS经纬度笛卡尔坐标数据转换到以米单位的大地坐标平面坐标系的代码实现。
TAG:

以前在网上找的,现在不知道出处是哪里了,呵呵...

转载出来。

  1. //笛卡尔坐标系 
  2. typedef struct tagCRDCARTESIAN{ 
  3. double x; 
  4. double y; 
  5. double z; 
  6. }CRDCARTESIAN,*PCRDCARTESIAN; 
  7. //typedef CRDCARTESIAN *PCRDCARTESIAN; 
  8. //大地坐标系 
  9. typedef struct tagCRDGEODETIC{ 
  10. double longitude; //经度 
  11. double latitude;  //纬度  
  12. double height;    //大地高,可设为0 
  13. }CRDGEODETIC; 
  14. typedef CRDGEODETIC *PCRDGEODETIC; 
  15.  
  16. void CoordCovert::GeodeticToCartesian (PCRDCARTESIAN pcc, PCRDGEODETIC pcg, 
  17. double dSemiMajorAxis, double dFlattening) 
  18.     double B;    //纬度度数 
  19.     double L;    //经度度数 
  20.     double L0;    //中央经线度数 
  21.     double l;    //L-L0 
  22.     double t;    //tanB 
  23.     double m;    //ltanB 
  24.     double N;    //卯酉圈曲率半径  
  25.     double q2; 
  26.     double x;    //高斯平面纵坐标 
  27.     double y;    //高斯平面横坐标 
  28.     double s;    //赤道至纬度B的经线弧长 
  29.     double f;    //参考椭球体扁率 
  30.     double e2;    //椭球第一偏心率 
  31.     double a;    //参考椭球体长半轴 
  32.     //double b;    //参考椭球体短半轴 
  33.     double a1; 
  34.     double a2; 
  35.     double a3; 
  36.     double a4; 
  37.     double b1; 
  38.     double b2; 
  39.     double b3; 
  40.     double b4; 
  41.     double c0; 
  42.     double c1; 
  43.     double c2; 
  44.     double c3; 
  45.     int Datum=84;    //投影基准面类型:北京54基准面为54,西安80基准面为80,WGS84基准面为84 
  46.     int prjno=0;    //投影带号 
  47.     int zonewide=3;     
  48.     double IPI=0.0174532925199433333333;    //3.1415926535898/180.0 
  49.     B=pcg->latitude ; //纬度 
  50.     L=pcg->longitude ; //经度 
  51.     if (zonewide==6)  
  52.     { 
  53.          prjno=(int)(L/zonewide)+1; 
  54.          L0=prjno*zonewide-3; 
  55.     } 
  56.     else 
  57.     { 
  58.         prjno=(int)((L-1.5)/3)+1; 
  59.         L0=prjno*3; 
  60.     } 
  61.      
  62.     if(Datum==54) 
  63.     { 
  64.          a=6378245; 
  65.          f=1/298.3; 
  66.     }     
  67.     else if(Datum==84) 
  68.     { 
  69.         a=6378137; 
  70.         f=1/298.257223563; 
  71.     } 
  72.     L0=L0*IPI; 
  73.     L=L*IPI; 
  74.     B=B*IPI; 
  75.     e2=2*f-f*f;//(a*a-b*b)/(a*a); 
  76.     l=L-L0; 
  77.     t=tan(B); 
  78.     m=l * cos(B); 
  79.     N=a/sqrt(1-e2* sin(B) * sin(B)); 
  80.     q2=e2/(1-e2)* cos(B)* cos(B); 
  81.     a1=1+(double)3/4*e2+(double)45/64*e2*e2+(double)175/256*e2*e2*e2
  82. +(double)11025/16384*e2*e2*e2*e2+(double)43659/65536*e2*e2*e2*e2*e2; 
  83.     a2=(double)3/4*e2+(double)15/16*e2*e2+(double)525/512*e2*e2*e2
  84. +(double)2205/2048*e2*e2*e2*e2+(double)72765/65536*e2*e2*e2*e2*e2; 
  85.     a3=(double)15/64*e2*e2+(double)105/256*e2*e2*e2
  86. +(double)2205/4096*e2*e2*e2*e2+(double)10359/16384*e2*e2*e2*e2*e2; 
  87.     a4=(double)35/512*e2*e2*e2+(double)315/2048*e2*e2*e2*e2
  88. +(double)31185/13072*e2*e2*e2*e2*e2; 
  89.     b1=a1*a*(1-e2); 
  90.     b2=(double)-1/2*a2*a*(1-e2); 
  91.     b3=(double)1/4*a3*a*(1-e2); 
  92.     b4=(double)-1/6*a4*a*(1-e2); 
  93.     c0=b1; 
  94.     c1=2*b2+4*b3+6*b4; 
  95.     c2=-(8*b3+32*b4); 
  96.     c3=32*b4; 
  97.     s=c0*B+cos(B)*(c1*sin(B)+c2*sin(B)*sin(B)*sin(B)
  98. +c3*sin(B)*sin(B)*sin(B)*sin(B)*sin(B)); 
  99.     x=s+(double)1/2*N*t*m*m+(double)1/24*(5-t*t+9*q2
  100. +4*q2*q2)*N*t*m*m*m*m+(double)1/720*(61-58*t*t+t*t*t*t)*N*t*m*m*m*m*m*m; 
  101.     y=N*m+(double)1/6*(1-t*t+q2)*N*m*m*m
  102. +(double)1/120*(5-18*t*t+t*t*t*t-14*q2-58*q2*t*t)*N*m*m*m*m*m; 
  103.     y=y+1000000*prjno+500000; 
  104.     pcc->x=x; 
  105.     pcc->y=y-38000000; 
  106.     pcc->z=0; 
(91program)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201101/10815.html]
本文出处:CSDN博客 作者:91program
顶一下
(3)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容