首页 > 编程知识 正文

2000平面坐标转经纬度,经纬度与坐标转换公式

时间:2023-05-05 04:49:51 阅读:155872 作者:1117

通常,GPS直接提供的坐标(b,l,h )是基于WGS-84的坐标,其中,b是纬度,l是经度,h是地面高度符合WGS-84的坐标在实际应用中,我国地图采用的是1954北京坐标系或1980西安坐标系下的乐观百褶裙投影坐标[x,y,],但部分电子地图采用的是1954北京坐标系或1980西安坐标系下的经纬度坐标[b,l],高程一般为高程

GPS的测量结果与我国54系或80系坐标相差几十米到一百多米,各地区有差异,据粗略统计,我国西部为70米左右,东北部为140米左右,南部为75米左右,中部为45米左右。

1984世界大地坐标系WGS-84坐标系是美国国防部开发并确定的大地坐标系,是协定地球坐标系。 WGS-84坐标系的定义,原点为地球的重心,空间直角坐标系的z轴指向BIH(1984.0 )定义的接地极(CTP )方向,即国际协定原点CIO,由IAU和IUGG共同推荐。 x轴指的是由BIH定义的零度子午面和CTP赤道的交点,y轴和z、x轴构成右手坐标系。 WGS-84椭球体采用国际大地测量与地球物理联合会第十七届大会测量常数推荐值,常用两个基本几何参数:长轴a=6378137m; 扁平率f=1:298.257223563。

GPS.cpp

# include iostream # include math.h # include ' GPS.h ' voidgeodetictocartesian (pcrdcartesianpcc,PCRDGEODETIC pcg ) dou //经度度数double L0; //中央经线度数double l; //L-L0 double t; //tanB double m; //ltanB double N; //卯酉丸曲率半径double q2; double x; //乐观百褶裙的平面纵坐标double y; //乐观百褶裙的平面横坐标double s; //赤道至纬度b经线弧长double f; //参考椭球扁平率double e2; //椭球体第一偏心拍数double a; //参见椭球体长轴//double b; //参照椭圆体短轴double a1; double a2; double a3; double a4; 双B1; 双B2; 双B3; 双B4; 双0; double c1; double c2; double c3; int Datum=84 //投影基准面类型:北京54基准面为54,西安80基准面为80,WGS84基准面为84 int prjno=0; //投影编号int zonewide=3; double IPI=0.0174532925199433333333; //3.1415926535898/180.0 b=PCG.latitude; //纬度L=pcg.longitude; //经度if(zonewide==6) prJnO=(int ) ) L/zonewide ) 1; L0=prjno*zonewide-3; (else ) PRJnO=(int ) ) (L-1.5 )/3 ) 1; L0=prjno*3; (if ) datum==54 ) { a=6378245; f=1/298.3; }elseif(datum==84 ) { a=6378137; f=1/298.257223563; (} L0=L0*IPI; L=L*IPI; B=B*IPI; e2=2*f-f*f; //(a*a-b*b )/) a*a ); l=L-L0; t=tan(b; m=l*cos(b ); n=a/sqrt(1-E2*sin ) b ) sin ) b ); Q2=E2/(1-E2 ) cos ) b ) ) cos ) b; a1=1(double )3/4) E2 ) double ) 45/64 ) E2 ) E2 ) double ) 175/256 ) E2*E2 ) double ) 11025/16384 * E2 ) E2 ) double ) 2205/2048*E2*E2*2 a3=(double ) 15/64*E2*E2 ) double ) 105/256*E2*E2 ) double ) 2205/4096 E2(double ) 315/2048*E2*E2*E2 ) double ) 31185/13072*E2*E2 B1=A1*A*(1-E2 ); B2=(double )-1/2*A2*A* )1-E2 ); B3=(double )1/4*A3*A* )1-E2 ); B4=(double )-1/6*A4*A* )1-E2 ); c0=b1; c1=2*b2 4*b3 6*b4; C2=--(8*B332*B4 ); c3=32*b4; s=C0*Bcos(B ) ) C1*sin ) b ) c2*sin(B ) b ) sin ) b ) c3*sin(B ) b ) sin ) b ) sin ) b ) b x=s (b ) m ) m ) double )1) ) ) n*t* y=n*m(double )1/6* )1-t*tQ2 ) n*m*m*m ) double )1/120* )5- 110 ) pcc.x=x; pcc.y=y-38000000; pcc.z=pcg.height; }GPS.h

#ifndef GPS_H#define GPS_H//笛卡尔坐标系typedefstructtagcrdcartesian { doublex; 双y; 双z; }PCRDCARTESIAN; //大地坐标系typedefstructtagcrdgeodetic { double longitude; //经度双精度; //纬度双高度; //大地高度,可以为0 (0) 0}PCRDGEODETIC; voidgeodetictocartesian (pcrdcartesianpcc,PCRDGEODETIC pcg ); 关于#endif调用:

//初始位置PCRDCARTESIAN s_x_y; PCRDGEODETIC s_l_l; s _ l _ l.latitude=light _ data.begin (-IMU _ data [0] ); s _ l _ l.longitude=light _ data.begin (-IMU _ data (1) ); godetictocartesian(s_x_y,s_l_l ); //可获得相对于初始状态的位移值,并且单位mfor (autoit _ light=light _ data.begin ); it_light!=light_data.end (; it_light(pcrdcartesianx_y; PCRDGEODETIC l_l; l _ l.latitude=it _ light-IMU _ data [0]; l _ l.longitude=it _ light-IMU _ data [1]; geodetictocartesian(x_y,l_l ); //您自己的坐标系对应的it_light-p_y=x_y.x - s_x_y.x; it_light-p_x=x_y.y - s_x_y.y; }通过以上转换,可为里程表提供初始定位信息,提高定位成功率

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。