下载地图数据文件(xxx.osm.pbf),下载网址http://download.geofabrik.de/,例如下载Asia下的China的文件(China.osm.pbf),并放到对应的安装路径/home/user/Desktop/China_osm(记住这个路径)。

确保ubuntu已经成功安装docker,如果还未安装可以参考https://blog.youkuaiyun.com/qq_53258482/article/details/129215605?spm=1001.2014.3001.5501。
使用命令进行搭建
cd /home/user/Desktop/China_osm
sudo docker run -t -v $(pwd):/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/China.osm.pbf
sudo docker run -t -v $(pwd):/data osrm/osrm-backend osrm-partition /data/China.osrm
sudo docker run -t -v $(pwd):/data osrm/osrm-backend osrm-customize /data/China.osrm
sudo docker run -t -i -p 5000:5000 -v $(pwd):/data osrm/osrm-backend osrm-routed --algorithm mld /data/China.osrm
使用web端查看
docker run -p 9966:9966 osrm/osrm-frontend
python 在本地调用OSRM进行路网距离请求
import os
import requests
OSRM_HOSTPORT = os.getenv("OSRM_HOSTPORT", "localhost:5000")
def calDisOSRM(ori, dst):
url = """http://{hostport}/route/v1/driving/{lon0},{lat0};{lon1},{lat1}?overview=full""".format(
hostport=OSRM_HOSTPORT,
lon0=ori[1],
lat0=ori[0],
lon1=dst[1],
lat1=dst[0]
)
while True:
try:
responses = requests.get(url).json()
print(responses)
break
except Exception:
print("error")
route = responses["routes"][0] # Getting the next route available
tripdistance = route["distance"]
#print("Dist: ", tripdistance)
return tripdistance
ori = [30.68435,104.34834]
dst = [30.67,104.0578]
dist = calDisOSRM(ori, dst)
print("dist:",dist)