搭建osrm

OSRM是一个用C++编写的开源软件,它使用OpenStreetMap数据进行路线规划。该引擎提供包括近邻搜索、路线规划、批量算路、地图匹配和TSP问题求解等服务。用户可以通过Docker安装并利用命令行工具进行数据处理和服务器启动。此外,还支持配置不同的算法优化查询效率。
摘要由CSDN通过智能技术生成

简介

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路网数据矢量切片服务,基于路网矢量切片可以轻松的在前端配置各种样式的地图。

安装

1. 安装docker环境
2. 下载地图数据

https://www.openstreetmap.org(约1G)


通过命令下载
wget http://download.geofabrik.de/asia/china-latest.osm.pbf
通过浏览器下载
http://download.geofabrik.de/asia/china-latest.osm.pbf
3. osrm搭建

先决条件:全中国的数据初始化需要内存16G(实测,在最大时需要15多G)。最好是32G的机器。

按顺序输入下方4条命令即可

命令1

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

docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-partition /data/china-latest.osrm

命令3

docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-customize /data/china-latest.osrm

命令4启动

官方:
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

测试

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

OSRM-backend是一个开源的路由引擎,它可以根据用户提供的起点和终点,计算出最快、最短或者其他指定条件下的最佳路径。OSRM-backend采用基于OpenStreetMap(OSM)地图数据的图形数据结构,可以支持实时的路由计算,并且具有高效、快速的特点。 OSRM-backend的核心功能是路线规划,它可以根据路网数据,计算出两点之间的最优路径。在路线计算时,OSRM-backend支持多种定制化的需求,例如可以指定不同的路网优先级、考虑交通流量、避免特定道路等。此外,OSRM-backend还提供了一系列的API接口,使得开发人员可以使用自己喜欢的编程语言与OSRM-backend进行交互。 OSRM-backend的优势主要体现在以下几个方面: 1. 高性能:OSRM-backend使用了最新的算法和数据结构,能够在较短的时间内计算出复杂的路线。这对于需要大规模路线计算的应用场景非常有用。 2. 精准度高:OSRM-backend使用OpenStreetMap地图数据作为基础数据源,这是一个全球开放的免费地图项目,包含了大量的道路和交通信息,能够提供高质量的路线规划服务。 3. 易于部署和扩展:OSRM-backend是一个开源项目,可以在各种平台上进行部署,具有较高的灵活性和可扩展性。同时,OSRM-backend的代码结构清晰,易于理解和定制。 总而言之,OSRM-backend是一个功能强大、高性能的路由引擎,可以为各种应用场景提供准确、快速的路径规划服务。无论是导航应用、物流管理还是地理信息系统等领域,OSRM-backend都是一个不错的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值