一般来讲,GPS直接提供的坐标(B,L,H)是1984年世界大地坐标系(Word Geodetic System 1984即WGS-84)的坐标,其中B为纬度,L为经度,H为大地高即是到WGS-84椭球面的高度。而在实际应用中,我国地图采用的是1954北京坐标系或者1980西安坐标系下的高斯投影坐标(x,y,),不过也有一些电子地图采用1954北京坐标系或者1980西安坐标系下的经纬度坐标(B,L),高程一般为海拔高度h。

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椭球采用国际大地测量与地球物理联合会第17届大会测量常数推荐值,采用的两个常用基本几何参数: 长半轴a=6378137m;扁率f=1:298.257223563。

GPS.cpp

#include <iostream>
#include <math.h>
#include "gps.h"void GeodeticToCartesian (PCRDCARTESIAN &pcc, PCRDGEODETIC &pcg)
{double B;        //纬度度数double L;        //经度度数double L0;        //中央经线度数double l;        //L-L0double t;        //tanBdouble m;        //ltanBdouble 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;double b1;double b2;double b3;double b4;double c0;double c1;double c2;double c3;int Datum=84;        //投影基准面类型:北京54基准面为54,西安80基准面为80,WGS84基准面为84int prjno=0;        //投影带号int zonewide=3;        double IPI=0.0174532925199433333333;        //3.1415926535898/180.0B=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;}        else if(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*e2+(double)11025/16384*e2*e2*e2*e2+(double)43659/65536*e2*e2*e2*e2*e2;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;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;a4=(double)35/512*e2*e2*e2+(double)315/2048*e2*e2*e2*e2+(double)31185/13072*e2*e2*e2*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*b3+32*b4);c3=32*b4;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));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;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;y=y+1000000*prjno+500000;pcc.x=x;pcc.y=y-38000000;pcc.z=pcg.height;}

GPS.h

#ifndef GPS_H
#define GPS_H//笛卡尔坐标系
typedef struct tagCRDCARTESIAN{
double x;
double y;
double z;
}PCRDCARTESIAN;//大地坐标系
typedef struct tagCRDGEODETIC{
double longitude; //经度
double latitude;  //纬度
double height;    //大地高,可设为0
}PCRDGEODETIC;void GeodeticToCartesian (PCRDCARTESIAN &pcc, 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];GeodeticToCartesian(s_x_y, s_l_l);//得到相对于初始状态的位移值,单位mfor(auto it_light = light_data.begin(); it_light != light_data.end(); it_light++){PCRDCARTESIAN x_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;}

通过以上的转换,就可以为里程计提供初始定位信息,提高配准成功率

GPS经纬度转84坐标系相关推荐

  1. Java 百度、高德、84坐标系经纬度的相互转换

    Java 百度.高德.84坐标系经纬度的相互转换 public class LngLonUtil {public static double pi = 3.1415926535897932384626 ...

  2. Python使用proj将GPS经纬度数据转换为utm坐标系(真实的地理位置坐标系,以米为单位),然后可以进行轨迹显示

    1. 代码如下 from pyproj import Transformer import pyproj import json from matplotlib.pyplot import *if _ ...

  3. GPS经纬度坐标WGS84到东北天坐标系ENU的转换

    GPS经纬度坐标WGS84到东北天坐标系ENU的转换 常用坐标系介绍 地理坐标系 (Geographic Coordinate System, GCS) 地心地固坐标系 (ECEF) 当地东.北.上 ...

  4. UTM坐标与GPS经纬度(WGS84)的相互转换

    一.UTM介绍 统一横轴墨卡托投影系统(Universal Transverse Mercator,UTM) 参考: https://www.youtube.com/watch?v=LcVlx4Gur ...

  5. 80、54、84坐标系七参数转换算法及Java代码

    一.为什么要进行坐标转换 我们所在地球是一个不规则的椭球,地表凹凸不平,地底密度不均,因此很难用一个简单模型来概括.国际上根据建模坐标系的原点不同分为参心坐标系和地心坐标系,其中参心坐标系是指参考椭球 ...

  6. GPS经纬度换算成百度坐标

    最近在做一个WAP页面,页面上需要展示公司所在的地图位置,但数据库里保存的是GPS经纬度,需要转换一下才能在网页上显示出来. 如何转换成百度坐标系?官方文档给的是:坐标转换接口非公开.百度搜" ...

  7. gps经纬度换算,WGS-84->GCJ02->BD-09

    在经纬度换算前,我们先了解一下常用的坐标种类有哪些: 1.大地坐标系统 WGS-84 用来表述地球上点的位置的一种地区坐标系统.它采用一个十分近似于地球自然形状的参考椭球作为描述和推算地面点位置和相互 ...

  8. 【GIS - 地理信息系统】WGS 84 坐标系和 GCJ-02 坐标加密偏移 ( 大地坐标系 和 加密坐标系 | WGS 84 坐标体系简介 | GCJ-02 坐标加密偏移 )

    文章目录 一.WGS 84 坐标系和 GCJ-02 坐标加密偏移 1.大地坐标系 和 加密坐标系 大地坐标系 加密坐标系 2.WGS 84 坐标体系简介 坐标加密 WGS 84 由来 经度和纬度 WG ...

  9. 不丢失精度的获取照片的Gps经纬度

    不丢失精度的获取照片的Gps经纬度 1. 实际照片存储经纬度 2. **用pyhton exifread读取** 3. 用java metadata-extractor读取 4. windows用 e ...

  10. android百度地图轨迹实现,android 获取GPS经纬度在百度地图上绘制轨迹

    实现将一组GPS模块获取的经纬度数据在百度地图上绘制轨迹 1.将经纬度转换成百度地图坐标 /** * 标准的GPS经纬度坐标直接在地图上绘制会有偏移,这是测绘局和地图商设置的加密,要转换成百度地图坐标 ...

最新文章

  1. js 矩阵转置_js对象数组矩阵转置(行转列)的实践
  2. IIS7 经典模式和集成模式的区别分析
  3. 【Java】什么?你项目还在用Date表示时间?!日期类LocalDateTime的使用
  4. NAS优缺点完全剖析
  5. python两个时间内的工作日_如何在Python中找到两个日期之间的星期一或任何其他工作日的数目?...
  6. 技术实践第四期|解读移动开发者日常-性能监控平台应用
  7. docker容器cpu高问题排查_干货详解:一文教你如何利用阿里开源工具,排查线上CPU居高问题...
  8. python网络刷学时_python实践—网络刷博器
  9. 激光雷达点云数据处理
  10. 医院计算机网络信息安全与管理,医院信息安全管理制度网络版(全文完整版)...
  11. Android 实现 iBeacon
  12. Android实现图片OCR功能
  13. 工作遇坑-Cannot allocate memory问题解决方法
  14. 计算机桌面刷新位置不可用,Win10开机提示桌面位置不可用的三种解决办法
  15. OA行业产品同质化寒冰如何消融?
  16. 【java当中摄像头调用保姆级别教程和在摄像头上实现滤镜效果】
  17. python 创业_如何在下午使用python和破折号创业
  18. 编程_从入门到遁入空门_第一篇_到底什么是编程?
  19. 项目三:声乐盒(音节+音乐)实验
  20. 2021 年最新的个人录制的前后端真正的免费编程学习视频

热门文章

  1. 利用wePE制作WinPE启动U盘全过程(含图文)
  2. 张家口地区某一级公路设计--河北建筑工程学院
  3. treetable怎么带参数_jQuery.treetable使用及异步加载
  4. 51单片机(八)—— 数码管电路介绍
  5. CAD - 初始CAD 工具栏 命令栏
  6. windows进行udp端口转发
  7. 软件工程课程实验报告:实验五
  8. 软件设计模式学习总结
  9. Spark机器学习解析
  10. Java大型工程项目管理系统源码,原生APP源码,建筑工程管理源码