基于Leaflet和GraphHopper的离线路径规划
地图小白,老大让搞一个web端的离线路径规划,类似于手机app地图的,自己搞了有一个星期多,才整出来。
leaflet是一个为建设移动设备友好的互动地图,而开发的现代的、开源的JS库,只有33K,设计简单、高效、可用性好,支持多浏览器,支持插件扩展,有一个友好的,易于使用的api文档和一个简单的、可读的源代码。
leaflet通过leaflet.routing.machine插件,支持路径规划。通过经由点控制路线搜索,显示行程和替代路线。默认使用 OSRM,但也支持 GraphHopper, Mapbox Directions API等等。在这个地图中,只有GraphHopper,支持离线路径。
离线路径=数据包+路径规划算法,好在GraphHopper是开源的,路径规划算法的jar包可以从Maven库找到,数据包可以根据GitHub上下载的GraphHopper项目资源获取,步骤如下。
1、从openstreetmap导出中国地图数据,我是从Geofabrik里获取的osm.bpf文件(我用的是中国地图数据),
2、从git下载graphhopper项目资源文件夹,cmd,进入当前文件夹,运行./graphhopper.sh web +下载的pbf文件,生成相关路径数据,自动生成一个xx-gh的文件夹,里边就是进行路径规划所需要的地图数据了,(osm.bpf中国整个地图可能会造成jvm的溢出,加到jvm最大内存就好了,我增大到了2G)
3、导入graphhopper相关jar包(这个是我用到的jar包),写离线路径的后台,这个是我的后台,你也可以根据GraphHopper的文档来处理
4、封装成前台需要的数据格式,我是为了基于leaflet的插件lrm-graphhopper,如果只需要路径数据,可以自己处理
5、数据是基于WGS84坐标,要转换成百度的BD09坐标,导入coordtrans的jar包,进行转换,我们项目用的是百度地图的瓦片,而GraphHopper是基于谷歌地图的,坐标系不一样,需要转化下,如果直接用谷歌坐标的话可以不做处理,地理坐标相关内容可参考着篇文档。
到此就实现了基于Leaflet和GraphHopper的离线路径规划,其实离线路径规划主要是GraphHopper的后台处理,有了点坐标,就可以在地图上画出来了。
感谢manmantj的帮助,我是先看到他的文章才完成的《基于openstreemap地图数据的离线路径规划》http://blog.csdn.net/u014712516/article/details/60872310
转载自:https://blog.csdn.net/water_21215/article/details/79290275