创建本地OSRM实例,用OSM做导航数据

介绍

Open Source Routing Machine (OSRM) 是一个导航路径计算库。
给定两个地理坐标,通过OSRM可以计算其间的路径、距离、交通时间,并提供 HTTP 和 C++ 的接口。
由于它是一个开源的库,你可以把它的实例安装在本地,以构成一个导航服务。
这样可以避免官方服务器的限额问题。

参考文献

系统环境

  • Ubuntu: 18.04 LTS (OSRM对于内存的要求较高,因此至少保证4GB的swap空间)

构建OSRM

安装系统依赖:

1
2
3
apt update
apt install -y git cmake build-essential jq htop
apt install -y liblua5.2-dev libboost-all-dev libprotobuf-dev libtbb-dev libstxxl-dev libbz2-dev

克隆代码:

1
git clone https://github.com/Project-OSRM/osrm-backend.git

进入文件夹:

1
cd osrm-backend/

我们测试的时候使用版本v5.18.0,因此我们将代码切换到v5.18.0:

1
git checkout v5.18.0

创建build文件夹并编译代码:

1
2
3
4
mkdir build
cd build/
cmake ..
make

安装编译好的程序:

1
make install

导入Open Street Map地图数据

打开导出地图数据的网页
在这个页面里,可见地图的坐标范围显示在左面:

导出香港的数据

通过下面的命令,下载相应的地图数据:

1
wget -O map.xml http://overpass-api.de/api/map?bbox=114.4306,22.1327,113.8607,22.5398

其中四个坐标分别是 右,下,左,上。

将下载好的map.xml文件放在osrm-backend文件夹下面。

提取导航数据

在osrm-backend文件夹下执行:

1
osrm-extract map.xml -p profiles/car.lua

创建数据

创建结构化数据以支持高速提取导航最短路径:

1
osrm-contract map.xml.osrm

启动服务

之后我们就可以启动HTTP服务:

1
osrm-routed map.xml.osrm

调用接口

之后我们就可以按照OSRM的接口进行调用了。
只要把URL改成我们服务器的地址,默认为:http://127.0.0.1:5000/