OSRM(Open Source Routing Machine)是一个用C++开发的基于OSM(OpenStreetMap)地图数据的高性能开源路线规划引擎,提供以下几个服务:
1. Nearest – 搜索近邻路段服务
通过参数来设置搜索半径、搜索路段的数量等,可以获取距离某个点最近的n条路段
2. Route – 路线规划(路线导航)服务
路线导航是OSRM最为重要的功能,它会找到坐标之间的最快的路线。
3. Table – 批量算路服务
Tble服务是计算若干个点之间的行驶距离和行驶时长。传入4个经纬度点,返回4个地点之间的距离和时长,即4X4的distances和4X4的durations
4. Match – 地图匹配服务
OSRM则提供了离线的地图匹配功能。以最合理的方式将嘈杂的 GPS 轨迹捕捉到道路网络。
5. Trip – TSP问题求解服务
Trip为TSP问题(Traveling Salesman Problem) 服务。采用贪婪的启发式算法(最远插入算法)解决了10个点以上的TSP问题,并对10个点以下使用蛮力求解。
6. Tile – 内部路网瓦片服务
OSRM提供了所用的OSM路网数据矢量切片服务,基于路网矢量切片可以轻松的在前端配置各种样式的地图。
https://www.openstreetmap.org(约1G)
|
1 2 3 4 |
<code class="language-plaintext">通过命令下载 wget http://download.geofabrik.de/asia/china-latest.osm.pbf 通过浏览器下载 http://download.geofabrik.de/asia/china-latest.osm.pbf</code> |
先决条件:全中国的数据初始化需要内存16G(实测,在最大时需要15多G)。最好是32G的机器。

按顺序输入下方4条命令即可
命令1
|
1 2 3 4 5 6 7 8 9 10 |
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/china-latest.osm.pbf #docker run:表示创建一个新的容器并运行一个命令 # docker run [OPTIONS] IMAGE [COMMAND] [ARG...] # -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; # --volume , -v: 绑定一个卷 # -i: 以交互模式运行容器,通常与 -t 同时使用; # -d: 后台运行容器,并返回容器ID; #-v "${PWD}:/data" : 在docker容器中创建目录/data,使当前目录$PWD在这里可用,也就是容器中的/data/china-latest.osm.pbf映射为主机上的"${PWD}/china-latest.osm.pbf" #osrm/osrm-backend : 镜像 #osrm-extract -p /opt/car.lua /data/china-latest.osm.pbf:运行的命令 |
有两条pre-processing管道可用:
• 收缩层次(CH)
• Multi-Level迪杰斯特拉(MLD)
我们建议默认使用MLD,除了特殊的use-cases之外,比如非常大的距离矩阵,CH目前仍然更适合。
下面我们将解释MLD管道。
如果您想使用CH管道,而是将osrm-partition和osrm-customize替换为一个osrm-contract,
并将osrm-routed的算法选项更改为--algorithm ch。
命令2
|
1 |
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-partition /data/china-latest.osrm |
命令3
|
1 |
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-customize /data/china-latest.osrm |
命令4启动
|
1 2 3 4 5 6 |
官方: docker run -t -i -p 5000:5000 -v "${PWD}:/data" osrm/osrm-backend osrm-routed --algorithm mld /data/berlin-latest.osrm 为了增加查询效率添加参数: docker run -t -i -p 5000:5000 -v "${PWD}:/data" osrm/osrm-backend osrm-routed --algorithm mld --threads 20 --max-matching-size 500 --max-table-size 1000 /data/china-latest.osrm 我的后台运行命令: docker run -t -i -d -p 5000:5000 -v "${PWD}:/data" osrm/osrm-backend osrm-routed --algorithm mld --threads 20 --max-matching-size 500 --max-table-size 1000 /data/china-latest.osrm |
测试
|
1 |
curl "http://192.168.8.108:5000/route/v1/driving/113.519067,23.125793;113.723684,23.040035?steps=true" |
OSRM API:OSRM API Documentation
OSRM github: GitHub – MyLittlePlan/osrm-backend: Open Source Routing Machine – C++ backend / GitHub – Project-OSRM/osrm-backend: Open Source Routing Machine – C++ backend
openStreetMap:https://www.openstreetmap.org
from:https://blog.csdn.net/Sophiahaha/article/details/129416537