12795|14

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

怎样把一组GPS经纬度数据转换到以米单位的平面坐标系 [复制链接]

如题
    查了些资料,越查越糊涂了,希望能提供思路

最新回复

同问,正研究经纬度 转 平面坐标  详情 回复 发表于 2010-5-29 15:45
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
好像只有近似的算法
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
简单说就是由角度算弧长吧,找一下关于坐标变换的资料或算法。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
一般的可以正算高斯投影.
当然要测量用,则要用到七参数.
下面给出一个高斯投影的正算..
你比较幸运,我刚好做这个...现成的代码.
我现在的问题,更痛苦,GPS读到的经纬度不准.哎...痛苦中...


  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. void CoordCovert::GeodeticToCartesian (PCRDCARTESIAN pcc, PCRDGEODETIC pcg,
  16. double dSemiMajorAxis, double dFlattening)
  17. {
  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+(double)11025/16384*e2*e2*e2*e2+(double)43659/65536*e2*e2*e2*e2*e2;
  82.     a2=(double)3/4*e2+(double)15/16*e2*e2+(double)525/512*e2*e2*e2+(double)2205/2048*e2*e2*e2*e2+(double)72765/65536*e2*e2*e2*e2*e2;
  83.     a3=(double)15/64*e2*e2+(double)105/256*e2*e2*e2+(double)2205/4096*e2*e2*e2*e2+(double)10359/16384*e2*e2*e2*e2*e2;
  84.     a4=(double)35/512*e2*e2*e2+(double)315/2048*e2*e2*e2*e2+(double)31185/13072*e2*e2*e2*e2*e2;
  85.     b1=a1*a*(1-e2);
  86.     b2=(double)-1/2*a2*a*(1-e2);
  87.     b3=(double)1/4*a3*a*(1-e2);
  88.     b4=(double)-1/6*a4*a*(1-e2);
  89.     c0=b1;
  90.     c1=2*b2+4*b3+6*b4;
  91.     c2=-(8*b3+32*b4);
  92.     c3=32*b4;
  93.     s=c0*B+cos(B)*(c1*sin(B)+c2*sin(B)*sin(B)*sin(B)+c3*sin(B)*sin(B)*sin(B)*sin(B)*sin(B));
  94.     x=s+(double)1/2*N*t*m*m+(double)1/24*(5-t*t+9*q2+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;
  95.     y=N*m+(double)1/6*(1-t*t+q2)*N*m*m*m+(double)1/120*(5-18*t*t+t*t*t*t-14*q2-58*q2*t*t)*N*m*m*m*m*m;
  96.     y=y+1000000*prjno+500000;
  97.     pcc->x=x;
  98.     pcc->y=y-38000000;
  99.     pcc->z=0;

  100. }
复制代码
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

5
 
GPS是有漂移的,这个问题没有办法
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
不懂,帮顶
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

7
 
按<大地测量学基础>上说
高斯投影正算,也就是这个模型可以精确到2cm
如果要更精确的,则需要至少三个重合参考点数据,计算出七参数.再在不大于20KM的范围内可以精确到0.1毫米级.
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

8
 
我的HTC 钻石手机都不知如何打开SBAS DGPS模式.
现在的坐标点经纬度漂10米,读到的参数就不准,再精确的算法也没什么用.所以可能还是要买专业的GPS硬件,痛苦呀....
有谁知HTC 钻石手机打开SBAS DGPS模式的方法的说声.十分感谢..
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

9
 
mark
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

10
 
等几天程序要用,帮顶
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

11
 
   回复 dzq138
   我在网上也找过很多GPS经纬度转平面坐标的例子
转换成平面坐标后,用平面两点之间的直线距离计算出来的结果和实际相差比较大,不知道有没有什么办法解决

我在深圳,中央子午线经度用的115
实际测试的两点经纬度坐标,距离是300米;
试了N个坐标系,转换成平面坐标后计算的距离往往只有260米,甚至有300多米,还是不够准确啊
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
好东西,关注
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

13
 
to:sping_karen
不准的原因,是因为:你的GPS经纬度不准!
并不是高斯投影正算有问题.如果经纬度是准确的,这个只会相关是厘米级的误差.我在广州跟你一个纬度.
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 10 楼 sping_karen 的回复:
? 回复 dzq138
? 我在网上也找过很多GPS经纬度转平面坐标的例子
转换成平面坐标后,用平面两点之间的直线距离计算出来的结果和实际相差比较大,不知道有没有什么办法解决

我在深圳,中央子午线经度用的115
实际测试的两点经纬度坐标,距离是300米;
试了N个坐标系,转换成平面坐标后计算的距离往往只有260米,甚至有300多米,还是不够准确啊

to:sping_karen
看了N本书之后,稍稍懂了一点.现在汇报一下:
原来,GPS得到的经纬度是WGS-84椭球体的经纬度 a=6378137 扁率为:1/298.257.223563
直接用这个投影到西安80坐标是不行的.
需要:
1、将B,L转换成WGS-84空间直角坐标。公式:X=(N+H)*cosB*cosL Y=(N+H)*cosB*sinL Z=[N*(1-e^2)+H]sinB
2.1找一对已知的参考点,或三对,求所谓的七参。
公式如下:
|X2|      |   1  εz   -εy |   |X1|   |△X0|
|Y2|=(1+m)|- εz  1    εx  | * |Y1| + |△Y0|
|Z2|      |  εy  -εx   1  |   |Z1|   |△Z0|
如果简单的求三参,就是求其差值。
2.2、将参数代入求得西安80坐标的空间直角坐标。
3、求西安80的大地坐标经纬度。 L=arctan=Y/X  tanB=(Z+Ne^2sinB)/(X^2+Y^2)^0.5 求B要迭代 (见大地测量的P103) 要写程序可以用P104的(4-38 4-39 4-40公式)
4、再将西安80的大地坐标经纬度高斯投影
基本过程就是这样,因为不是学测量的,不知是否正确。实际现在我用手机GPS走了一下。得到的结果相对来说还是理想的。误差在1-5米。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

15
 
同问,正研究经纬度 转 平面坐标
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表