北斗芯片输出的坐标是什么格式?百度高德地图用的是什么坐标系?北斗芯片输出坐标到百度地图定位的过程是什么?

2021-09-27

1、常用的坐标系简表如下:

坐标系

说明

地图使用情况

WGS84

又称大地坐标系/地球坐标系/GPS坐标,坐标系的原点位于地球质心。GPS北斗芯片输出的格式。

Google/百度/高德地图国外使用。国内(含港澳台)地图不能使用,必须在WGS84加密的基础上才能使用。

GCJ02

又称火星坐标系,是由中国国家测绘局制定的地理坐标系统,是由WGS84加密后得到的坐标系。

Google地图/高德/腾讯地图在国内(含港澳台)使用。

BD09

又称百度坐标系,在GCJ02坐标系基础上再次加密。

百度在国内使用(包含港澳台)


2、北斗芯片输出的坐标是什么格式?

GPS北斗芯片(含模块)通常输出WGS84格式的坐标数据,不能在国内地图上直接使用(直接使用会有偏差,几十米到几百米不等),要经过加密转换才行,就是说,为了安全保密,GPS输出的坐标数据要想在中国地图上显示,是没那么容易滴。

各大地图厂商都提供了自己地图坐标转换的API,可以把WGS84转成自己的地图坐标,然后调用位置显示API在地图上显示位置。百度/高德地图坐标都不支持转成WGS84格式。网上有破解的,这个部分不在本文的讨论范围。

下面达盟GPS小编以百度地图为例,看看从GPS北斗芯片,模块输出的坐标数据,如何显示在地图上。


3、GPS北斗芯片(模块)输出经度纬度坐标到在百度地图上显示的过程


(1)GPS北斗芯片(模块)通用输出的数据格式

一般GPS北斗芯片(模块)是通过UART接口发送数据给2G/4G/5G模块,按照 NMEA0183 的协议格式输出。举例如下:

$GNRMC,111827.000,A,3120.488899,N,12129.856372,E,0.006,104.58,300620,,E,A*08

$GNVTG,104.58,T,,M,0.006,N,0.011,K,A*2D

$GNGGA,111827.000,3120.488899,N,12129.856372,E,1,17,0.78,77.297,M,0,M,,*6D

$GPGSA,A,3,02,05,13,15,18,29,30,,,,,,1.47,0.78,1.24*08

$BDGSA,A,3,01,02,03,04,06,08,09,11,12,13,,,1.47,0.78,1.24*1B

$GPGSV,2,1,08,02,35,141,44,05,45,056,46,13,76,035,48,15,65,254,48*76

$GPGSV,2,2,08,18,24,318,41,24,11,185,15,29,39,253,44,30,20,056,38*73

$BDGSV,3,1,10,01,45,141,41,02,37,237,35,03,52,201,41,04,34,123,38*66

$BDGSV,3,2,10,06,70,226,43,08,78,091,43,09,41,221,38,11,19,317,36*6E

$BDGSV,3,3,10,12,54,262,43,13,69,331,44*66

$GNGLL,3120.488899,N,12129.856372,E,111827.000,A,A*43

其中RMC,GGA、GLL等包都包含纬度和经度。


格式

实例数据

转换成度

纬度

ddmm.mmmm

3120.488899=31度20.488899分

31.34148165度

经度

dddmm.mmmm

12129.85637=121度29.85637分

121.4976062度

这些经度、纬度都是WGS84坐标系的。


(2)2G/4G/5G模块与服务器之间通讯

2G/4G/5G模块把NMEA格式的数据,封装成与服务器通讯用的格式,以TCP/UDP方式传给服务器。这里就涉及到2G、4G、5G模块与服务器通讯的协议,由于GPS北斗终端行业发展已经有十几年(从中国移动在2001年7月开通GPRS服务,2003年大量商用GPRS算)协议已经有几百种(很多GPS终端厂家都自己定制与服务器的通讯协议),导致GPS设备在切换平台的时候经常存在协议不兼容的问题。

2011年交通运输部统一规范入网车载GPS终端协议,简称JT808协议。入网平台(国家或者地方强制某个行业使用的标准平台)和终端必须遵循这个协议。市场上还有大量没有入网的平台和终端(用于公司或者个人位置轨迹管理、油耗载重监控,OBD诊断,共享车控制,视频监控等),大部分也都支持JT808协议。

鉴于JT808协议逐渐成为主流,下面我们就用JT808协议来分析从WGS84坐标到百度地图显示的过程。


(3)JT808协议中的位置数据包

下图是JT808协议中位置信息包0x0200的定义。

下图是我们达盟GPS超长待机设备的一次定位log。

我们把上图位置包0x0200中的纬度(0x015976BC)和经度(0x06CA4062)转换成十进制结果如下:

{经度,纬度}={113.91805,22.640316}. ----这个就是WGS84格式的GPS北斗芯片输出的坐标。


(4)WGS84转换成百度坐标

百度坐标转换API官方介绍:

https://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition

我们把上面的WGS84坐标带入百度坐标转换API后得到百度坐标。


https://api.map.baidu.com/geoconv/v1/?coords=113.91805,22.640316&from=1&to=5&ak=nljzQ7WZULfz4GXA6biVFlbkGwvQvueN




(5)在百度地图上显示位置

把百度坐标带入百度拾取坐标系统。

官方链接是:https://api.map.baidu.com/lbsapi/getpoint/index.html

如下图:

看到定位的结果跟我实际的GPS北斗超长待机设备放置的位置是一样的。就是放在我们深圳市达盟科技/顺盟科技公司楼下(在汽车后备箱里面放的,我的车停在7栋楼下)。

上面是达盟GPS小编从原理上梳理了一下从GPS北斗芯片输出的坐标到百度地图定位的一个过程。这个可以用于测试GPS北斗设备和平台的定位问题,好判断是设备输出的数据不对还是平台定位有偏差。