您的位置:首页 > 编程语言 > Go语言

在google地图上显示路线

2015-08-07 20:21 851 查看
现在很多手机上的软件都支持将跑步的路线直接显示在手机地图上,这里所说的方法只是用于研究学习。

要实现在google地图上显示路线,首先你要有坐标值,这里假设使用手机的GPS记录位置信息。一般手机都会产生NMEA -0183数据,很多免费的apps可以记录这些数据

首先,将手机中存的NMEA数据导出来。 NMEA的数据格式如下

数据示例:
$GPGGA,175056.000,3402.1525,N,11710.8684,W,1,08,0.9,461.2,M,-32.5,M,,0000*65
$GPRMC,175056.000,A,3402.1525,N,11710.8684,W,0.00,306.36,221006,,,A*79
$GPVTG,306.36,T,,M,0.00,N,0.0,K,A*0D
$GPGSA,A,3,13,27,08,19,28,10,23,03,,,,,1.7,0.9,1.5*37
$GPGSV,3,1,11,27,65,025,43,08,53,326,40,13,50,153,30,28,49,247,39*7F


这段数据里面有两条语句都含有位置信息,GPGGA 和 GPRMC。 他们的格式分别如下:

$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh
<1> UTC时间,hhmmss(时分秒)格式
<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也将被传输,如果不是差分定位将为空)

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
<1> UTC时间,hhmmss(时分秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<4> 纬度半球N(北半球)或S(南半球)
<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
<7> 地面速率(000.0~999.9节,前面的0也将被传输)
<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也将被传输)
<11> 磁偏角方向,E(东)或W(西)
<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)


可以任选其中一句,提取出经纬度坐标。注意这里的格式是纬度ddmm.mmmm(度分)格式, 在使用之前需要转换成google所支持的dd.dddddd(度)格式。

得到坐标值之后,接下来需要生成google地图所支持的KML文件。如果要显示路径,可以用KML中的LineString标签。下面是google官方的路径KML示例:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Paths</name>
<description>Examples of paths. Note that the tessellate tag is by default
set to 0. If you want to create tessellated lines, they must be authored
(or edited) directly in KML.</description>
<Style id="yellowLineGreenPoly">
<LineStyle>
<color>7f00ffff</color>
<width>4</width>
</LineStyle>
<PolyStyle>
<color>7f00ff00</color>
</PolyStyle>
</Style>
<Placemark>
<name>Absolute Extruded</name>
<description>Transparent green wall with yellow outlines</description>
<styleUrl>#yellowLineGreenPoly</styleUrl>
<LineString>
<extrude>1</extrude>
<tessellate>1</tessellate>
<tessellate>1</tessellate>
<tessellate>1</tessellate>
<altitudeMode>absolute</altitudeMode>
<coordinates> -112.2550785337791,36.07954952145647,2357
-112.2549277039738,36.08117083492122,2357
-112.2552505069063,36.08260761307279,2357
-112.2564540158376,36.08395660588506,2357
-112.2580238976449,36.08511401044813,2357
-112.2595218489022,36.08584355239394,2357
-112.2608216347552,36.08612634548589,2357
-112.262073428656,36.08626019085147,2357
-112.2633204928495,36.08621519860091,2357
-112.2644963846444,36.08627897945274,2357
-112.2656969554589,36.08649599090644,2357
</coordinates>
</LineString>
</Placemark>
</Document>
</kml>

从上面的KML文件我们可以看到,路径的坐标是保存在coordinates标签中的。注意这里的坐标是经度在前面,纬度在后面,与NMEA数据相反。我们要做到就是将从NMEA数据中提取的坐标值替换这个示例文件中的坐标,然后保存该文件为XXX.kml

最后我们打开google map engine。如下:


         

选择创建新的地图。然后点击上传

                                  

 


该engine允许我们生成自定义的地图,我们可以将制作好的KML文件上传到engine中,稍等几秒,结果就会显示在google地图中了,如下图中深红色的线:



$(".MathJax").remove();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  谷歌地图 手机 gps kml