OSRM docker环境启动

命令一把梭

wget https://download.geofabrik.de/asia/china-latest.osm.pbf
docker pull osrm/osrm-backend
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/china-latest.osm.pbf
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-partition /data/china-latest.osrm
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-customize /data/china-latest.osrm
docker run -d -p 5000:5000 --rm --name osrm -v "${PWD}:/data" osrm/osrm-backend osrm-routed  --algorithm mld --max-table-size 1000 --max-matching-size 500 /data/china-latest.osrm
# 验证osrm服务是否正常
curl "http://127.0.0.1:5000/route/v1/driving/113.519067,23.125793;113.723684,23.040035?steps=true"
# 前端Web地图可选装,页面类似长这样:https://map.project-osrm.org,https://xxx.xxx是上面安装的osrm服务的https地址
docker run -d -e OSRM_BACKEND='https://xxx.xxx' -p 9966:9966 osrm/osrm-frontend

注意事项

1、准备好梯子,访问https://download.geofabrik.de/asia/china-latest.osm.pbf 有时候需要,该文件一般1.2GB左右大小
2、只下载osm中国地图,pbf格式。
3、对硬件要求高,内存最好有20G以上,内存不够可能在osrm-extract这一步就会报错

[info] RAM: peak bytes used: 12934402048
[error] [exception] std::bad_alloc
[error] Please provide more memory or consider using a larger swapfile

4、用多核多线程cpu。服务启动可以使用 --threads 16 参数设置多线程
5、地图更新频繁,可以通过查看https://map.project-osrm.org/timestamps对应的路由信息更新时间戳来确定是否更新地图

命令解释

以上命令执行过程如下:

  1. 提取数据:使用 osrm-extract 命令从原始地图数据文件(如 .osm.pbf)中提取必要的信息,生成中间文件(.osrm)。
  2. 分区数据:使用 osrm-partition 命令对生成的 .osrm 文件进行分区,优化路由计算性能。
  3. 生成层次结构:使用 osrm-customize 命令生成层次结构数据,进一步优化路由计算。
  4. 启动服务:使用 osrm-routed 命令启动路由服务,提供实际的路由查询功能。

前三条命令为工具命令,是利用osrm-backend docker镜像内的内置工具对地图数据进行预处理,只有第四条为osrm服务的启动命令。

详细解释

1、docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/china-latest.osm.pbf

在使用 OSRM 提供路由服务之前,通常需要先对地图数据进行预处理,生成必要的中间文件。osrm-extract 是这一过程的第一步。这条命令主要用于处理地图数据文件,将其转换为 OSRM 可以使用的格式。生成的 .osrm 文件可以用于后续的路由计算和其他地理信息服务

(1). docker run:
•用于启动一个新的 Docker 容器。
(2) -t:
•分配一个伪TTY(终端)。这通常用于保持容器的标准输入打开,以便你可以与容器进行交互。虽然在这个命令中没有明确的交互需求,但 -t 有时会与其他选项(如 -i)一起使用,以确保容器保持打开状态。
(3) -v “${PWD}:/data”:
•将宿主机当前目录(${PWD})挂载到容器内的 /data 目录。这样,容器可以访问宿主机上的文件,反之亦然。
(4) osrm/osrm-backend:
•指定要使用的 Docker 镜像。这里是 osrm/osrm-backend,这是 Open Source Routing Machine 的官方镜像,用于处理地图数据和提供路由服务。
(5) osrm-extract:
•在容器启动后要执行的命令。osrm-extract 是 OSRM 工具链中的一个命令,用于从原始地图数据文件(通常是 .osm.pbf 格式)中提取必要的信息,生成中间文件(.osrm 文件)。
(6) -p /opt/car.lua:
•osrm-extract 命令的一个参数,指定了配置文件的路径。/opt/car.lua 是一个预定义的配置文件,用于定义车辆类型(如汽车、自行车等)的行驶规则。osrm支持汽车、自行车、步行三种行驶规则,内置多套lua脚本,当前命令使用的是汽车的行驶规则。以下是自行车和步行的命令,可按需使用

docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/bike.lua /data/china-latest.osm.pbf
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/foot.lua /data/china-latest.osm.pbf

(7) /data/china-latest.osm.pbf:
•输入文件的路径。这里指定的是宿主机当前目录下的 china-latest.osm.pbf 文件,该文件通过 -v 选项挂载到了容器内的 /data 目录。

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

osrm-partition 命令用于对已经提取的地图数据进行分区,以提高路由计算的性能。分区可以将地图数据划分为多个子区域,从而减少查询时的计算量。
•数据准备:在使用 OSRM 提供路由服务之前,通常需要对地图数据进行多步预处理。osrm-partition 是这一过程的第二步,在 osrm-extract 之后执行。

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

•地图数据优化:osrm-customize 命令用于对已经提取和分区的地图数据进行定制处理,生成层次结构数据。层次结构数据可以显著提高路由计算的性能,特别是在处理大规模地图数据时。
•数据准备:在使用 OSRM 提供路由服务之前,通常需要对地图数据进行多步预处理。osrm-customize 是这一过程的第三步,在 osrm-extract 和 osrm-partition 之后执行。

4、docker run -d -p 5000:5000 --rm --name osrm -v "${PWD}:/data" osrm/osrm-backend osrm-routed --algorithm mld --max-table-size 1000 --max-matching-size 500 /data/china-latest.osrm

(1) docker run:
•用于启动一个新的 Docker 容器。
(2) -d:
•以 detached 模式(后台模式)运行容器。这意味着容器将在后台运行,不会占用当前终端。
(3) -p 5000:5000:
•将宿主机的 5000 端口映射到容器的 5000 端口。这允许你在宿主机上通过 http://localhost:5000 访问容器内的服务。
(4) --rm:
•在容器退出后自动删除该容器。这有助于保持宿主机的整洁,避免留下大量不再需要的容器。
(5) --name osrm:
•为容器指定一个名称 osrm。这使得你可以在后续的 Docker 命令中更容易地引用这个容器。
(6) -v “${PWD}:/data” :
•将宿主机当前目录(${PWD})挂载到容器内的 /data 目录。这样,容器可以访问宿主机上的文件,反之亦然。
(7) osrm/osrm-backend:
•指定要使用的 Docker 镜像。这里是 osrm/osrm-backend,这是 Open Source Routing Machine 的官方镜像,用于处理地图数据和提供路由服务。
(8) osrm-routed:
•在容器启动后要执行的命令。osrm-routed 是 OSRM 工具链中的一个命令,用于启动路由服务。
(9) --algorithm mld:
•指定路由算法为 mld(Multi-Level Dijkstra)。这是一种高效的路由算法,特别适用于大规模地图数据。
(10) --max-table-size 1000:
•设置Table Service API 中传入位置参数的个数最大为 1000个,不设置默认为100。如计算多个位置两两之间的距离或耗时矩阵API https://xxx/table/v1/driving/116.373627,37.446524;116.787863,37.628356;116.641314,36.913737?annotations=duration&skip_waypoints=true
这个url地址中传入了3个位置,经纬度内部逗号隔开,经纬度之间用分号分隔。api返回结果是一个3X3的两地之间汽车行驶的耗时矩阵,单位为s。 参考
(11) --max-matching-size 500:
•和第10项类似,针对的是Match service API 的位置参数传入个数上限,此处扩展到500
(12) /data/china-latest.osrm:
•指定要使用的地图数据文件的路径。这里指定的是宿主机当前目录下的 china-latest.osrm 文件,该文件通过 -v 选项挂载到了容器内的 /data 目录。

参考文档:

https://download.geofabrik.de/asia/china.html
https://project-osrm.org/docs/v5.24.0/api/#
https://github.com/fossgis-routing-server/osrm-backend
https://github.com/fossgis-routing-server/osrm-frontend
https://github.com/fossgis-routing-server/cbf-routing-profiles
https://map.project-osrm.org/about.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何用python将pdf转换为json格式

使用 Python 将 PDF 文件转换为 JSON 格式,主要步骤如下: 读取 PDF 内容:首先使用一个库读取 PDF 文件内容,如 PyMuPDF 或 pdfplumber。这些库可以逐页提取文本,并返回结构化的数据。 组织数据到 JSON:将提…

内存、显存和GPU在Transformer架构中承担什么计算任务

目录 内存、显存和GPU在Transformer架构中承担什么计算任务 一、内存、显存和GPU的区别 二、在Transformer架构中的计算任务 内存、显存和GPU在Transformer架构中承担什么计算任务 是计算机系统中重要的组成部分,它们在Transformer架构中承担着不同的计算任务。以下是对这…

无法下载element-admin的依赖无法运行

目录 无法下载element-admin的依赖偷懒方法完美方法 运行element-admin错误 之前在下载element-admin时遇到了多多少少的问题 无法下载element-admin的依赖 偷懒方法 开始是从github下载源码后安装依赖时在与tui-editor相关的依赖时就会卡死,然后报错&#xff0c…

React中 修改 html字符串 中某些元素的属性

在React中,你可以使html-react-parser库来解析HTML字符串,并修改其中的img标签的width属性后,再使用React的ReactDOMServer.renderToStaticMarkup方法将React元素转换为HTML字符串。 import htmlReactParser from html-react-parser; import…

基于Java Springboot幼儿园管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

新一代API开发工具,让API调试更快 更简单

新一代API开发工具 代理调试 请求测试一站式解决方案 Reqable Fiddler Charles Postman, 让API调试更快 🚀 更简单 👌 直接上下载地址 根据系统,下载对应的版本即可 https://reqable.com/zh-CN/download/

力扣513:找树左下角的值

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7 层层遍历代码: /*** Definition for a binar…

vue2 面试题带答案,万字总结

1. 什么是 vue Vue 是一套用于构建用户界面的渐进式框架。Vue.js 的主要特点:渐进式框架、声明式渲染、组件化、响应式数据绑定等; 2、MVC 和 MVVM 区别 MVC 是模型(model)-视图(view)-控制器(controller),控制器负责…

Python | Leetcode Python题解之第564题寻找最近的回文数

题目: 题解: class Solution:def nearestPalindromic(self, n: str) -> str:m len(n)candidates [10 ** (m - 1) - 1, 10 ** m 1]selfPrefix int(n[:(m 1) // 2])for x in range(selfPrefix - 1, selfPrefix 2):y x if m % 2 0 else x // 10…

爬虫——数据解析与提取

第二节:数据解析与提取 在网络爬虫开发中,获取网页内容(HTML)是第一步,但从这些内容中提取有用的数据,才是爬虫的核心部分。HTML文档通常结构复杂且充满冗余信息,因此我们需要使用高效的解析工…

java 泛型中的 ?

在 Java 泛型中,? 被称为通配符(wildcard),它代表了未知的类型。使用通配符可以增加代码的灵活性,允许在不知道具体类型的情况下操作泛型类或接口。通配符主要有以下几种形式: 无界通配符(Unbo…

使用 Ant Design Vue 自定渲染函数customRender实现单元格合并功能rowSpan

使用 Ant Design Vue 自定渲染函数customRender实现单元格合并功能rowSpan 背景 在使用Ant Design Vue 开发数据表格时,我们常常会遇到需要合并单元格的需求。 比如,某些字段的值可能会在多行中重复出现,而我们希望将这些重复的单元格合并为…

RabbitMQ教程:发布/订阅模式(Publish/Subscribe)(三)

文章目录 RabbitMQ教程:发布/订阅模式(Publish/Subscribe)(三)一、引言二、简介三、准备工作3.1 说明3.2 生成项目 四、实战4.1 交换机(Exchanges)4.2 临时队列(Temporary Queues&am…

html兼容性问题处理

文章目录 HTML5兼容性问题及解决方法1. 标签支持问题2. 兼容性检测3. 属性值支持问题4. 媒体支持问题5. Web API支持问题6. CSS兼容性问题7. 特定浏览器问题的解决方法 HTML5兼容性问题及解决方法 HTML5作为一种新的标记语言,虽然带来了许多新特性和改进&#xff0…

CANoe发送和接收CAN DataBase(DBC文件)数据

目录 1、接收CAN数据,DBC解析数据内容 2、发送DBC定义的CAN报文 CANoe是一款强大的网络仿真和开发工具,它支持发送和接收基于CAN DataBase(DBC文件)的数据。 1、接收CAN数据,DBC解析数据内容 要使用CANoe接收CAN数…

【第六课】Rust所有权系统(二)

目录 前言 借用和引用 借用规则 切片和迭代器 总结 前言 上节课介绍了Rust中的所有权系统,简单回顾一下,rust的内存系统系统,每一块内存都有一个主人,主人对这块内存有着读写和释放的权限,当主人离开作用域之后&am…

ISUP协议视频平台EasyCVR私有化部署视频平台如何实现RTMP推流将大疆无人机的视频画面回传?

在现代视频监控和流媒体技术领域,EasyCVR视频融合云平台以其卓越的性能和灵活性,成为了跨区域、网络化视频监控综合管理的理想选择。作为TSINGSEE青犀视频“云边端”架构体系中的核心组件,私有化部署视频平台EasyCVR不仅能够实现视频数据的集…

LeetCode 2816.翻倍以链表形式表示的数字

题目: 给你一个 非空 链表的头节点 head ,表示一个不含前导零的非负数整数。 将链表 翻倍 后,返回头节点 head 。 思路: 思路一:反转链表,两个相同的链表求和 思路二:如果不考虑进位&#…

力扣(leetcode)面试经典150题——27. 移除元素

题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作&#xff1a…

VueDPlayer视频插件的使用

VueDPlayer 是一个基于 DPlayer 的 Vue 封装组件,DPlayer 是一个 HTML5 视频播放器,支持弹幕、视频倍速播放、视频预加载等功能。 以下是如何在 Vue.js 项目中使用 VueDPlayer 的步骤: 1.安装 VueDPlayer: 使用 npm 或 yarn 安装…