基于OpenStreetMap地图数据的离线路径规划

距离上次写博客已经好久了,这段时间断断续续也有弄一下关于OpenStreetMap的东西,这次把离线路径规划的实现记录一下。

在OpenStreetMap提供的开源项目中,osmbonuspack提供了一些在线路径规划的借口,可以通过向在线发送起始点信息的方式来获取服务器回调的规划路径,主要的方式有以下三种:
GraphHopper
MapQuest
OSMR
具体的请看这里

其中GraphHopper是支持中文路径提示的,而OSMR对于道路的数据可能会比GraphHopper来的多一点(根据自己的一些测试得出的结论,没有具体验证过)

但是osmbonuspack并没有提供离线的路径规划的借口,而老板一定要求我实现离线的功能,而我自己又没有能力写出路径规划算法,所以在寻找离线接口这方面着实是费了不少力气。

所幸后来终于被我找到GraphHopper有提供离线路径规划的接口,可以参看这里的实现,其中,里面的calcpath方法就是调用OpenStreetMap地图数据来实现离线路径规划的。

然鹅由于自己的渣渣属性,我在搞到离线地图数据的征途上颇费了一番周折(虽然doc都在这里),所以我决定把它记录下来。

首先,使用GraphHopper调用OpenStreetMap的地图数据实现离线路径规划是要经过他提供的shell对数据进行先一步的处理的。
1.我们要先获得所需要进行离线路径规划的区域的.osm地图数据(这一步很简单);
2.我们要去GitHub上下载GraphHopper的项目资源文件夹(这个也很容易);
3.然后把步骤1的.osm文件拷贝到GraphHopper项目文件夹中,然后运行graphhopper.sh来对数据进行转换。在这里,由于我使用的是Windows,我使用了babun来运行。启动babun后,将路径cd到GraphHopper文件夹,然后运行 ./graphhopper.sh import xx.osm 这样就会自动生成一个xx-gh的文件夹,里边就是进行路径规划所需要的地图数据了(这里的.osm文件不能过大,否则容易造成内存溢出,但是具体最大能多少我没有测试过,反正我试过将整个中国的地图数据进行转换最后失败了),生成的地图数据大小都不大;
4.接下来只需要将xx-gh这个文件夹复制到手机sd卡中的 graphhopper/maps/路径下就可以啦。

然后就是调用之前说到的calcpath 里面的一些方法就能够实现路径的规划了,这里我就不赘述了,最后得到的路径就是 resp.getBest() 得到的。

然后怎么将它显示出来就随便大家了,我是使用osmbonuspack的打点和划线功能显示的。

到此为止就实现了基于OpenStreetMap地图数据的离线路径规划了,这个好处在于他可以规划一些你自己在本地添加到.osm文件中的一些道路,而不用上传到OpenStreetMap服务器上,然后再将自己本地修改过的地图用离线地图的方式显示出来就行啦。至于怎么显示离线地图,那就放到下一篇吧~

离线地图_openstreetmap_postgresql_瓦片 离线地图_openstreetmap_postgresql_postgis_mapnik_osm2pgsql_osm数据 写于20150414 关于软件地址 事先说明这其实就是我全部放到百度网盘空间里了。 所以万一一不小心我手抖删了,请mail我。 haibinzhagncn@qq.com 软件包括 leaflet osm里面中国和台湾的数据 openlayers geoserver mabox_studio mapnik 和生成瓦片工具需要的前置包等 postgresql osm2pgsql postgis python 一次只能上传一份那我就少点多几份吧: 介绍(免积分) http://download.csdn.net/detail/a137015127302/8594877 如果懒得自己慢慢找,我想你不介意花点积分的吧。 1.postgreSql_1.&postgis_install http://download.csdn.net/detail/a137015127302/8594903 2.postgreSql_2.mapnik&python_install http://download.csdn.net/detail/a137015127302/8594915 3.postgreSql_3.环境变量配置_osm数据导入 http://download.csdn.net/detail/a137015127302/8594919 4.postgreSql_4.生成图片瓦片byMapnik http://download.csdn.net/detail/a137015127302/8594921 其他:postgreSql_psql_乱码问题 http://download.csdn.net/detail/a137015127302/8594937 上传什么的好烦-- 我再试一次要是还是不能上传我就不玩了。切~ 核心内容(英文版公开资料):http://wiki.openstreetmap.org/wiki/Creating_your_own_tiles 以下本人写的中文版本的核心:只要注意这个基本上就没什么大问题了。 当然你要是懒得自己一步一步走,我想你应该也不介意多花点积分的。 摘录 首先版本请用 postgresql-9.3.6-2-windows.exe + postgis-bundle-pg93x32-setup-2.1.5-1.exe 因为至少如果是 postgresql-9.4.1-3-windows.exe + postgis-bundle-pg94x32-setup-2.1.7-1.exe 存在sample数据库无法创建问题。 同时32位下中文客户端提示信息异常问题,你只能改为英文显示,但是又会有warn信息提示你与本地不符(很烦不是么) 所以结论最新的未必就是最好的。 而且貌似他们已经开始放弃32位了。 还有这个2.1.7貌似是赶工出来的,因为提示信息写的是支援9.3而事实是否定的。 以上是我重装了n多遍的结论。
打开街道地图是一个多步骤的过程。首先,你需要选择一个特定的区域来下载地图。然后,你需要使用OpenStreetMap的API来获取该区域的地图数据。最后,你可以将地图数据保存为图像文件。以下是一个示例代码,展示了如何使用Flask框架来下载OpenStreetMap地图数据: ```python from flask import Flask, Response app = Flask(__name__) @app.route("/") def index(): return "<h1>map source</h1>" @app.route("/tiles/<int:x>/<int:y>/<int:z>", methods=\['GET'\]) def getTiles(x, y, z): imgPath = "Tiles/{}/{}/{}.png".format(x, y, z) resp = None with open(imgPath, 'rb') as f: img = f.read() resp = Response(img, mimetype="image/png") return resp if __name__ == '__main__': app.run(debug=True) ``` 这段代码创建了一个基于Flask的Web应用程序。当你访问根路径时,它会返回一个简单的HTML页面。当你访问`/tiles/<x>/<y>/<z>`路径时,它会根据给定的x、y和z参数返回相应的地图图像。你可以根据自己的需求修改代码,并将地图数据保存为图像文件。 #### 引用[.reference_title] - *1* *2* [openstreetmap地图下载的几种方法](https://blog.csdn.net/weixin_38233769/article/details/109755046)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [下载OpenStreetMap离线地图数据并搭载瓦片服务器](https://blog.csdn.net/hopyGreat/article/details/100625385)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值