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 路由器内部结构 路由器内部结构图如图所示。 即主要包含左侧的包转发模块和右侧的端口模块。转发模块负责查找包的发送目的地,端口模块完成包的发送。通过安装不同的硬件,转发模块不仅可以支持以太网,也…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...