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.8401
$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,3574
$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
经纬度格式为:
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了。