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对应的路由信息更新时间戳来确定是否更新地图
命令解释
以上命令执行过程如下:
- 提取数据:使用 osrm-extract 命令从原始地图数据文件(如 .osm.pbf)中提取必要的信息,生成中间文件(.osrm)。
- 分区数据:使用 osrm-partition 命令对生成的 .osrm 文件进行分区,优化路由计算性能。
- 生成层次结构:使用 osrm-customize 命令生成层次结构数据,进一步优化路由计算。
- 启动服务:使用 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
相关文章:
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&q…...
Vue3 动态获取 assets 文件夹图片
我真服了Vue3 这个老六了,一个简单图片src 赋值搞得那么复杂. //item.type 是我遍历类型的类型参数 <img alt"吐槽大会" :src"getAssetUrl(item.type)" /> 基于 Vue2 的Webpack 处理,还不错,可以用/ 这种绝对路径,可以接受,虽然多了个require很不爽…...
<项目代码>YOLOv8 草莓成熟识别<目标检测>
YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…...
代码随想录算法训练营第五十一天|Day51 图论
岛屿数量 深搜 https://www.programmercarl.com/kamacoder/0099.%E5%B2%9B%E5%B1%BF%E7%9A%84%E6%95%B0%E9%87%8F%E6%B7%B1%E6%90%9C.html 思路 #include <stdio.h> #define MAX_SIZE 50 int grid[MAX_SIZE][MAX_SIZE]; int visited[MAX_SIZE][MAX_SIZE]; int N, M; …...
uniapp 自定义加载组件,全屏加载,局部加载 (微信小程序)
效果图 全屏加载 页面加载使用 局部加载 列表加载里面使用 使用gif html <template><view><view class"" v-if"typeFullScreen"><view class"loading" v-if"show"><view class""><i…...
STM32完全学习——系统时钟设置
一、时钟框图的解读 首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟,由于内部HSI存在较大的误差,因此我们在系统完成上电初始化,之后需要将STM32的时钟切换到外部HSE作为系统时钟,那么我…...
Github 2024-11-16Rust开源项目日报 Top10
根据Github Trendings的统计,今日(2024-11-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Go项目1Python项目1Lapce:用 Rust 编写的极快且强大的代码编辑器 创建周期:2181 天开发语言:Rust协议类型:Apache License 2.0St…...
CH03_反射
第3章:反射 本章目标 掌握反射的原理 熟悉反射的基本运用 本章内容 反射是什么 C# 编译运行过程 首先我们在VS点击编译的时候,就会将C#源代码编译成程序集 程序集以可执行文件 (.exe) 或动态链接库文件 (.dll) 的形式实现 程序集中包含有Microsoft …...
vue2侧边导航栏路由
<template><div><!-- :default-active"$route.path" 和index对应其路径 --><el-menu:default-active"active"class"el-menu-vertical-demo"background-color"#545c64"text-color"#fff"active-text-col…...
core 不可变类型 线程安全 record
当一个类型的对象在创建时被指定状态后,就不会再变化的对象,我们称之为不可变类型。这种类型是线程安全的,不需要进行线程同步,非常适合并行计算的数据共享。它减少了更新对象会引起各种bug的风险,更为安全。 System.D…...
linux之调度管理(8)-SMP cpu 的 psci启动
一、psci介绍 psci是arm提供的一套电源管理接口,当前一共包含0.1、0.2和1.0三个版本。它可被用于以下场景: (1)cpu的idle管理 (2)cpu hotplug以及secondary cpu启动 (3)系统shutdo…...
review-消息中间件MQ
RabbitMQ RabbitMQ,作为当今流行的开源消息代理软件,以其卓越的可靠性、灵活性和易用性在微服务架构和分布式系统中扮演着至关重要的角色。它不仅能够确保消息在不同系统组件间的高效传递,还能通过其高级消息队列协议(AMQP&#x…...
leetcode400第N位数字
代码 class Solution {public int findNthDigit(int n) {int base 1;//位数int weight 9;//权重while(n>(long)base*weight){//300n-base*weight;base;weight*10;}//n111 base3 weight900;n--;int res (int)Math.pow(10,base-1)n/base;int index n%base;return String…...
前端网页开发学习(HTML+CSS+JS)有这一篇就够!
目录 HTML教程 ▐ 概述 ▐ 基础语法 ▐ 文本标签 ▐ 列表标签 ▐ 表格标签 ▐ 表单标签 CSS教程 ▐ 概述 ▐ 基础语法 ▐ 选择器 ▐ 修饰文本 ▐ 修饰背景 ▐ 透明度 ▐ 伪类 ▐ 盒子模型 ▐ 浮动 ▐ 定位 JavaScript教程 ▐ 概述 ▐ 基础语法 ▐ 函数 …...
CSS遮罩:mask
CSS属性 mask 允许使用者通过遮罩或者裁切特定区域的图片的方式来隐藏一个元素的部分或者全部可见区域。 // 一般用位图图片做遮罩 mask: url(~/assets/images/mask.png); mask-size: 100% 100%;// 使用 SVG 图形中的形状来做遮罩 mask: url(~/assets/images/mask.svg#star);…...
Swift闭包的本质
1 闭包的本质其实是一个引用类型:存储在堆空间上,由堆分配空间,且生命周期由ARC(自动引用计数机制)管理 2 捕获值:闭包会捕获上下文使用到的变量(引用类型会保持引用关系)ÿ…...
时代变迁对传统机器人等方向课程的巨大撕裂
2020年之后,全面转型新质课程规划,传统课程规划全部转为经验。 农耕-代表性生产关系-封建分配制度主要生产力-人力工业-代表性生产关系-资本分配制度工业分为机械时代,电气时代,信息时代;主要生产力-人力转为人脑&…...
【算法设计与分析实训】第1关:求序列的最大字段和
务描述 本关任务:编写用动态规划解决最大字段和问题。 相关知识 为了完成本关任务,你需要掌握:动态规划。 编程要求 给定由n个整数(可能为负数)组成的序列:a1,a2,……,an, 求该序列的最大子段和。当所有整…...
【澜舟科技-注册/登录安全分析报告】
前言 由于网站注册入口容易被机器执行自动化程序攻击,存在如下风险: 暴力破解密码,造成用户信息泄露,不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 ,造成用户无法登陆、注册,大量收到垃圾短信的…...
【读书笔记-《网络是怎样连接的》- 7】Chapter3_2 路由器
本篇继续介绍路由器及其转发过程。 1 路由器内部结构 路由器内部结构图如图所示。 即主要包含左侧的包转发模块和右侧的端口模块。转发模块负责查找包的发送目的地,端口模块完成包的发送。通过安装不同的硬件,转发模块不仅可以支持以太网,也…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
