0x00 GPS NMEA

GPS模块在定位后会输出含有各项定位信息的NMEA语句,其中包括经纬度
信息。

$GPGGA,054514.000,2238.5260,N,11401.9686,E,1,7,1.27,89.2,M,-2.3,M,,7F
$GPGSA,A,3,08,23,10,28,09,04,02,,,,,,1.52,1.27,0.84
01
$GPGSV,3,1,10,28,73,159,42,42,50,128,36,04,49,276,44,10,31,191,4375
$GPGSV,3,2,10,02,17,252,38,08,14,192,41,09,12,195,38,23,07,108,35
74
$GPRMC,054514.000,A,2238.5260,N,11401.9686,E,0.14,183.83,270913,,,A*6B

详细的NEMA 0183协议解析访问网页NEMA 0183查询

0x01 经纬度转换

以NMEA码RMC数据为例:
$GPRMC,054514.000,A,2238.5260,N,11401.9686,E,0.14,183.83,270913,,,A*6B

image.png

image.png

经纬度格式为:
Latitude: ddmm.mmmm
Longitude: dddmm.mmm

转换成度:
方法是dd作整数位,(mm.mmmm÷60)作小数位
上例可得 01.9686÷60=0.03281;38.5260÷60=0.6421
所以:
11401.9686 = 114.03281
2238.5260 = 22.6421

0x02 坐标系转换

出于安全的考虑,国家不允许直接使用GPS坐标。GCJ-02坐标系又称为火星坐标系。腾讯地图,高德地图,谷歌中国地图使用的是GCJ-02坐标系,百度地图和搜狗地图使用的是在GCJ-02基础上再加密的坐标。

地图公司测绘得到原始的GPS地图后,要上交给国家测绘局,测绘局给GPS坐标加上偏移(不是线性偏移),得到GCJ-02坐标,测绘局要收钱的,然后再交给地图公司。地图公司可以直接发行或者再做一次偏移后发行。一般的偏移是在几百米,对于精度要求不高的定位,这个误差无所谓。

坐标系转换的方式就不赘述了。
已经有很多算法和公开的api了。

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

Do what i love and just do it !