GNSS系列(1)——GNSS坐标系转换


由于工作需要,最近开启了GNSS系列文章的撰写工作,发布于公司官网,现将其同步至CSDN。

原文链接:

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。

  • 腾讯地图(soso地图)

境内(含港澳台):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度

四、示例

下面以M6313为例,讲解如何将获取的GNSS数据在百度地图上显示出正确的位置。

1. 获取数据

接好GNSS天线,在室外空旷地区获取到M6313 GNSS数据如下:

2. 数据转换

GNGGA中包含经纬度位置信息,查看NMEA0183协议对GGA数据格式解析如下:

示例:$GNGGA,081639.000,2937.1526,N,10629.6601,E,1,16,0.70,376.6,M,-29.6,M,,*51

提取位置信息:东经10629.6601,北纬2937.1526。转换为“度.度”格式:

东经:10629.6601->106. 29.6601->106+29.6601÷60=106.494335°

北纬:2937.1526->29. 37.1526-29+37.1526÷60=29.61921°

3. 地图位置显示

3.1 使用百度地图坐标反查功能显示位置信息

1)参考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=你的密钥

2) 打开百度地图http://api.map.baidu.com/lbsapi/getpoint/index.html,输入转换后的经纬度信息,得到位置如下图,与设备实际位置符合,定位准确。

3.2 使用百度web API显示位置信息

打开百度地图Web API介绍页面内容 https://lbsyun.baidu.com/index.php?title=uri/api/web 使用反向地址解析API显示位置。

http://api.map.baidu.com/geocoder?location=29.61921,106.494335&coord_type=wgs84&output=html&src=webapp.baidu.openAPIdemo

注:coord_type选择wgs84,无需先转换为bd09坐标。

将上面URL输入浏览器,得到位置如下图,与设备实际位置符合,定位准确。