在google地图上显示路线
2015-08-07 20:21
851 查看
现在很多手机上的软件都支持将跑步的路线直接显示在手机地图上,这里所说的方法只是用于研究学习。
要实现在google地图上显示路线,首先你要有坐标值,这里假设使用手机的GPS记录位置信息。一般手机都会产生NMEA -0183数据,很多免费的apps可以记录这些数据
首先,将手机中存的NMEA数据导出来。 NMEA的数据格式如下
这段数据里面有两条语句都含有位置信息,GPGGA 和 GPRMC。 他们的格式分别如下:
可以任选其中一句,提取出经纬度坐标。注意这里的格式是纬度ddmm.mmmm(度分)格式, 在使用之前需要转换成google所支持的dd.dddddd(度)格式。
得到坐标值之后,接下来需要生成google地图所支持的KML文件。如果要显示路径,可以用KML中的LineString标签。下面是google官方的路径KML示例:
从上面的KML文件我们可以看到,路径的坐标是保存在coordinates标签中的。注意这里的坐标是经度在前面,纬度在后面,与NMEA数据相反。我们要做到就是将从NMEA数据中提取的坐标值替换这个示例文件中的坐标,然后保存该文件为XXX.kml
最后我们打开google map engine。如下:
选择创建新的地图。然后点击上传
该engine允许我们生成自定义的地图,我们可以将制作好的KML文件上传到engine中,稍等几秒,结果就会显示在google地图中了,如下图中深红色的线:
$(".MathJax").remove();
要实现在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();
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android wifi 无线调试
- Google地图更新澳洲航拍图
- 谷歌地图支持街景地图
- 谷歌巴西街景地图发现尸体照片
- 手机4大隐藏功能及使用必知常识第1/2页
- php实现用手机关闭计算机(电脑)的方法
- js判断手机和pc端选择不同执行事件的方法
- JS判断客户端是手机还是PC的2个代码
- android获取手机唯一标识的方法
- 让手机访问WAP网站服务器 IIS WAP服务器的MIME类型设置
- 手机短信轰炸(图)
- Android中实现GPS定位的简单例子
- android检查手机和无线是否连接的方法
- Android获取手机通讯录、sim卡联系人及调用拨号界面方法
- Android中获得手机屏幕大小实现代码
- Android手机获取IP地址的两种方法
- android开发教程之判断是手机还是平板的方法