GNSS系列--GNSS坐标系转换

大部分内容来自《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*27

GGA的解析如下:

GGA(Global Positioning System Fix Data)GPS定位信息
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
<1> UTC时间,hhmmss(时分秒)格式,和北京时间差8个小时。
<2> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<3> 纬度半球N(北半球)或S(南半球)
<4> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<5> 经度半球E(东经)或W(西经)
<6> GPS状态:0=未定位,1=非差分定位,2=差分定位,6=正在估算
<7> 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
<8> HDOP水平精度因子(0.5~99.9)
<9> 海拔高度(-9999.9~99999.9)
<10> 地球椭球面相对大地水准面的高度
<11> 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
<12> 差分站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++代码和上面用到的转换小工具,下载链接
  可以完成WGS84转GCJ02、GCJ02转WGS84、GCJ02转百度坐标系(BD-09)、百度坐标系(BD-09)转火星坐标系(GCJ-02)、WGS坐标转百度坐标系(BD-09)、百度坐标系(BD-09)转WGS84坐标。
在这里插入图片描述
在这里插入图片描述

使用百度API做坐标系转换

参考https://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition,使用API将WGS-84坐标转换为BD-09坐标。
调用方法:GET http://api.map.baidu.com/geoconv/v1/?coords=106.494335,29.61921&from=1&to=5&ak=你的密钥
在这里插入图片描述

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【ql君】qlexcel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值