大部分内容来自《http://onemo10086.com/#/school/article/165》
“GNSS定位不准确,漂移了好几公里,是怎么回事呢?”相信有不少用户在使用GNSS时碰见过这样的问题。这主要是由于GNSS坐标转换错误造成的,下面我就来讲讲获取到GNSS数据后如何通过转换坐标,得到正确的定位。
常见坐标系介绍WGS-84:大地坐标系,也是目前广泛使用的GPS采用的坐标系,在中国,任何一个地图产品都不允许使用GPS坐标
GCJ-02:又称火星坐标系,是由中国国家测绘局制定的地理坐标系统,是由WGS-84加密后得到的坐标系。互联网地图在国内必须至少使用GCJ02进行首次加密,不允许直接使用WGS84坐标下的地理数据,同时任何坐标系均不可转换为WGS84坐标
CGCS2000:国家大地坐标系,通过中国GPS 连续运行基准站、 空间大地控制网以及天文大地网与空间地网联合平差建立的地心大地坐标系统
BD-09:为百度坐标系,在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标
搜狗坐标系:搜狗地图所采用的坐标系,由GCJ-02进行进一步的偏移算法得到
图吧坐标系:图吧地图所采用的坐标系,由GCJ-02进行进一步的偏移算法得到
地图软件所采用的坐标系 地图坐标系百度地图境内(含港澳台):BD-09;境外:WGS-84。高德地图境内(含港澳台):GCJ-02;境外:暂不支持。Google地图境内(含港澳台):GCJ-02,数据来源于高德,两者互通;境外:WGS-84。腾讯地图境内(含港澳台):GCJ-02微软bing地图(BingMap)全球统一:WGS-84搜狗地图境内(含港澳台):搜狗坐标系图吧地图(MapBar)境内(含港澳台):图吧坐标系灵图地图(51ditu)境内(含港澳台):GCJ-02 经纬度表示方法ddd.dddddd:度 . 度的十进制小数部分(6位) ddd.mm.mmmm:度 . 分 . 分的十进制小数部分(4位) ddd.mm.ss:度 . 分 . 秒
1度=60分
1分 = 60秒
1度=3600秒
各表示方法之间可相互转化,如将“度.分.分”格式的120.42.4572转换为“度.度”格式,计算方式如下:
120度=120度
42.4572分÷60=0.70762度
即:120.70762度
示例比如获取到如下NMEA语句:
$GPGSV,3,1,10,01,02,172,20,04,41,198,22,07,40,320,25,08,81,165,36,1*60$GPGSV,3,2,10,09,49,251,28,16,26,052,37,21,17,154,21,26,08,068,23,1*69$GPGSV,3,3,10,27,54,046,25,30,04,307,,1*67$GPGGA,023248.00,3043.506913,N,10403.514810,E,1,05,1.1,613.4,M,-31.0,M,,*4A$GPVTG,212.7,T,214.7,M,0.0,N,0.0,K,A*25$GPRMC,023248.00,A,3043.506913,N,10403.514810,E,0.0,212.7,300421,1.9,W,A,V*5B$GPGSA,A,2,07,08,09,16,27,,,,,,,,1.4,1.1,0.8,1*27GGA的解析如下:
GGA(Global Positioning System Fix Data)GPS定位信息$GPGGA,,,,,,,,,,M,,M,,*hh UTC时间,hhmmss(时分秒)格式,和北京时间差8个小时。 纬度ddmm.mmmm(度分)格式(前面的0也将被传输) 纬度半球N(北半球)或S(南半球) 经度dddmm.mmmm(度分)格式(前面的0也将被传输) 经度半球E(东经)或W(西经) GPS状态:0=未定位,1=非差分定位,2=差分定位,6=正在估算 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输) HDOP水平精度因子(0.5~99.9) 海拔高度(-9999.9~99999.9) 地球椭球面相对大地水准面的高度 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空) 差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空)GPGGA,023248.00,3043.506913,N,10403.514810,E,1,05,1.1,613.4,M,-31.0,M,,*4A 从GGA语句获取到GPS定位信息,经纬度如下:北纬3043.506913,东经10403.514810 此时经纬度的格式是ddmm.mmmm的,坐标系是WGS-84。 如果想在百度地图中显示具体位置,需要转换坐标系为BD-09。 此时可以使用坐标转换工具: 就可以看到转换出了104.067537189513,30.7288549033661 再把该坐标复制到百度地图http://www.toolzl.com/tools/getGpsArea.html 就可以看到具体的位置了: 再推荐一个百度地图拾取坐标系统,也可以根据坐标查看位置,也可以根据位置拾取坐标。
坐标系转换代码这里提供坐标系转换的c++代码和上面用到的转换小工具,下载