当前位置: 首页 > news >正文

Valhalla实现 使用Docker部署利用OSM(Mapbox)地图实现路径规划详细步骤

一. Valhalla基本概念

1. 背景介绍:

官网介绍文档:https://valhalla.github.io/valhalla/

Valhalla是一个开源的路由引擎,能够实现实时路径规划,处理大量请求返回最优路径。
基于 OSM 数据,结合灵活的多模式交通方式、启发式算法和自定义的费用模型,为用户提供高效的路径规划服务。
OSM地图可以参考博文:OpenStreetMap开放街道地图(OSM)介绍

导航道路计算功能是由 Mapzen 开发的,特别是该公司团队中的工程师们专门为开源项目 Valhalla 构建了这一部分功能。在 Mapzen 于 2018 年关闭后,Mapbox 开始接管了 Valhalla 项目,Valhalla 作为一个开源项目,仍然接受社区的贡献和开发。Mapbox 的 Directions API 底层使用的就是 Valhalla。

Mapbox详细介绍可以参考 mapbox详细介绍

2. 路径规划:

Valhalla 支持多种交通方式的路径规划,包括:步行(walking)、自行车(bicycling)、驾车(driving)、公共交通(transit)。能够整合实时交通信息,调整路径规划结果以避开拥堵路段,从而提供更加动态的路线选择。

Valhalla 将 OSM 数据分割成小块(称为 tiles),然后构建路网图。这些 tiles 包含了路网拓扑结构以及其他与路径规划相关的信息,比如道路类型、限速、交通流向等。

3. 路由算法:

路由算法基于 Dijkstra 算法 和 A 启发式搜索算法* 的变种来计算最短路径,A* 算法结合了距离和启发函数(通常是目的地的直线距离)来更高效地找到从起点到终点的最优路径。

二. 本文功能点以及效果图

1. 使用Docker部署Valhalla服务,进行调用

在这里插入图片描述

2. 运行可视化Demos,展示路径规划效果

在这里插入图片描述

3.QGIS中安装Valhalla插件

在QGIS中能够搜索到Valhalla插件,进行使用,主要包括以下两个步骤:

3.1 安装Valhalla插件

在这里插入图片描述

3.2 使用路径规划

在这里插入图片描述
在这里插入图片描述

三. 部署展示路径规划详细步骤

1.准备服务器和数据

1.1 服务器

准备ubuntu机器

1.2 下载OSM数据

https://download.geofabrik.de/asia/japan.html
本例采用的Example为:
kansai-latest.osm.pbf (日本关西数据)

2. 安装部署

2.1 安装docker

在 Ubuntu 上安装 Docker大致步骤如下:

sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce
sudo systemctl start docker

2.2 安装Valhalla环境,配置、启动服务

cd xxx/ (kansai-latest.osm.pbf所在目录)
docker pull ghcr.io/valhalla/valhalla:latest
docker run -it -v `pwd`:/work -p 8002:8002 ghcr.io/valhalla/valhalla:latest
ls -l /work
cd /work/
mkdir valhalla_tiles
valhalla_build_config --mjolnir-tile-dir ${PWD}/valhalla_tiles --mjolnir-tile-extract ${PWD}/valhalla_tiles.tar --mjolnir-timezone ${PWD}/valhalla_tiles/timezones.sqlite --mjolnir-admin ${PWD}/valhalla_tiles/admins.sqlite > valhalla.json
valhalla_build_tiles -c valhalla.json kansai-latest.osm.pbf (需要30分钟左右)
du -d1 -h ./valhalla_tiles/
find valhalla_tiles | sort -n | tar cf valhalla_tiles.tar --no-recursion -T -
ls -l valhalla_tiles.tar
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/
valhalla_service valhalla.json 1

2.3 效果展示

上述即完成了部署工作,可以调用对应接口进行返回路径规划信息。

Request:

$ curl http://xxx:8002/route --data ‘{“locations”:[{“lat”:34.98597,“lon”:135.75795},{“lat”:35.00373,“lon”:135.76928}],“costing”:“auto”,“directions_options”:{“units”:“kilometers”}, “language”: “ja-JP”}’ | jq ‘.’

Response

在这里插入图片描述

3.valhalla demo程序

以上主要是将valhalla部署在服务器上并且调用接口查看效果,如果想要通过查看可视化直观展示效果,可以使用下列demo进行运行展示。

3.1 Git地址

https://github.com/valhalla/demos

3.2 代码修改、运行

(1)demos\routing\index-internal.html文件中替换localhost为 部署ubuntu机器IP
(2)运行demos\routing\index-internal.html文件

3.3 运行效果

选择两个坐标点即可显示对应路径规划信息,并且返回对应路径规划数据。
在这里插入图片描述

四.总结

Valhalla是一个开源的路由引擎。本文主要对Valhalla进行了简单介绍,然后详细介绍了使用Docker容器中部署Valhalla服务,调用和具体展示的Demo,以及在QGIS中使用valhalla插件路径规划示例。对于有路径规划导航相关需求的开发人员,Valhalla是一个很不错的选择。

相关文章:

Valhalla实现 使用Docker部署利用OSM(Mapbox)地图实现路径规划详细步骤

一. Valhalla基本概念 1. 背景介绍: 官网介绍文档:https://valhalla.github.io/valhalla/ Valhalla是一个开源的路由引擎,能够实现实时路径规划,处理大量请求返回最优路径。 基于 OSM 数据,结合灵活的多模式交通方式…...

blender解决缩放到某个距离就不能继续缩放

threejs中也存在同样的问题,原因相同,都是因为相机位置和相机观察点距离太近导致的。 threejs解决缩放到某个距离就不能继续缩放-CSDN博客 blender中的解决方案 1、视图中心->视图锁定->选择你想看的物体...

2022浙江省赛G I M

G - Easy Glide 题意 思路 由于数据范围比较小&#xff08;1e3&#xff09;,把所有的移动的时间转化为图论上的边权就可以了,再用dijkstra解决,注意如果用的是邻接表存的话要建双向边 代码 #include <map> #include <set> #include <queue> #include <…...

数据链路层 ——MAC

目录 MAC帧协议 mac地址 以太网帧格式 ARP协议 ARP报文格式​编辑 RARP 其他的网络服务或者协议 DNS ICMP协议 ping traceroute NAT技术 代理服务器 网络层负责规划转发路线&#xff0c;而链路层负责在网络节点之间的转发&#xff0c;也就是"一跳"的具体传输…...

在java中都是如何实现这些锁的?或者说都有哪些具体的结构实现

在Java中&#xff0c;多种锁机制的实现依赖于不同的类和接口。以下是一些常见的锁机制及其在Java中的具体实现&#xff1a; 1. 互斥锁&#xff08;Mutex&#xff09; 实现方式&#xff1a;Java中的互斥锁可以通过synchronized关键字或ReentrantLock类来实现。synchronized关键…...

用CSS创造三角形案例

6.3.2 用CSS创造三角形 用div来创建&#xff0c;角上是平分的&#xff0c;所以要是内部宽高为0&#xff0c;其他边透明&#xff0c;正好是三角形。 代码 div {border: 12px solid;width: 0;height: 0;border-color: transparent red transparent transparent; } 与伪元素aft…...

matlab-对比两张图片的Ycbcr分量的差值并形成直方图

%对比两张图片的Ycbcr分量的差值并形成直方图&#xff0c;改个路径就能用&#xff0c;图片分辨率要一致 close all; clear all; clc; I1imread(E:\test\resources\image\1.jpg); I2imread(E:\test\resources\image\2.jpg); ycbcr1 rgb2ycbcr(I1); ycbcr2 rgb2ycbcr(I2); % …...

Chromium 使用安全 DNS功能源码分析c++

一、选项页安全dns选项如下图&#xff1a; 二、那么如何自定义安全dns功能呢&#xff1f; 1、先看前端部分代码调用 shared.rollup.jsclass PrivacyPageBrowserProxyImpl {.................................................................getSecureDnsResolverList() {re…...

10.1 刷题

C语言 C...

车辆重识别(2021ICML改进的去噪扩散概率模型)论文阅读2024/9/29

所谓改进的去噪扩散概率模型主要改进在哪些方面&#xff1a; ①对数似然值的改进 通过对噪声的那个方差和T进行调参&#xff0c;来实现改进。 ②学习 这个参数也就是后验概率的方差。通过数据分析&#xff0c;发现在T非常大的情况下对样本质量几乎没有影响&#xff0c;也就是说…...

828华为云征文|针对Flexus X实例云服务器的CPU和内存性能测评

目录 一、Flexus X实例云服务器简介 1.1 产品摘要 1.2 产品优势 1.3 本次测评服务器规格 二、CPU性能测试 2.1 操作说明 2.2 操作步骤 2.2 结果分析 三、测试内存负载 3.1 操作说明 3.2 操作步骤 3.3 结果分析 四、测试终评 一、Flexus X实例云服务器简介 1.1 产品…...

Python知识点:如何使用Google Cloud IoT与Python进行边缘计算

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 如何使用Google Cloud IoT与Python进行边缘计算 边缘计算作为一种新兴的计算模式…...

力扣 最小覆盖子串

最小覆盖子串 https://leetcode.cn/problems/minimum-window-substring/ 题目描述 题目分析f 覆盖子串&#xff1a;首先根据题意&#xff0c;要求目标字符串的元素必须都在子串中出现过&#xff0c;这表明可以是乱序出现。所以在解决问题是我们需要对子串和目标字符串做匹配&a…...

python的内存管理机制

python的内存管理机制主要分为三个部分&#xff1a;引用计数、垃圾回收和内存池机制。 引用计数机制&#xff1a; python通过维护每个对象的引用计数来跟踪内存中的对象。当对象被创建时就会有一个引用计数&#xff0c;当对象不再被使用时&#xff0c;引用计数为0&#xff0c…...

阿布量化:基于 Python 的量化交易框架

阿布量化&#xff08;AbuQuant&#xff09; 是一个开源的量化交易框架&#xff0c;专为金融领域的研究者和交易者设计。它基于 Python 语言开发&#xff0c;提供了一整套从数据获取、策略开发、回测分析到交易执行的解决方案。阿布量化不仅能够帮助用户快速实现量化策略的设计与…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28目录前言1. Cognitive phantoms in LLMs through the lens of latent variables摘要研究背景问题与挑战创新点算法模型实验效果…...

【tower-boot 系列】开源RocketMQ和阿里云rockerMq 4.x和5.x集成 (一)

RocketMQ 简单介绍 阿里云rockerMq 4.x和5.x集成 一、云平台创建实例 参考文档&#xff1a; 阿里云api 阿里云 创建实例 二、skd集成思路 公司用的RocketMQ一般是自建开源apache的RocketMQ和上阿里云的RocketMQ&#xff0c;目前阿里云支持4.x和5.x版本 项目集成思路&…...

Pikachu-Cross-Site Scripting-反射型xss(post)

查看源代码 &#xff0c;这是需要先登录&#xff0c;然后再去做xss攻击 使用admin &#xff0c;123456 登陆; 登陆后&#xff0c;输入的message 内容直接返回 输入 <script>alert(1)</script> 得到xss攻击结果...

Vue3 工具函数(总结)

目录 前言 1.isRef 2.isReactive 3.isReadonly 4.isProxy 5.toRef 6.toRefs 7.unref 8.shallowRef 9.shallowReactive 10.triggerRef 11.customRef 12.markRaw 13.toRaw 14.readonly 15.watchEffect 前言 在 Vue 3 中&#xff0c;除了核心的响应式 API&#x…...

(undone) MIT6.824 Lab1

参考&#xff1a;http://nil.csail.mit.edu/6.824/2021/labs/lab-mr.html task1: 熟悉讲义&#xff0c;尤其是搞明白如何运行测试程序(完成) ------------------------------------------------ start 先看 Introduction 我们的目标&#xff1a;构建一个MapReduce系统。 细节&…...

Claude Proxy:基于Cloudflare Workers的API格式转换与动态路由代理

1. 项目概述&#xff1a;一个API格式转换的“翻译官” 如果你手头有一个习惯使用Claude API格式的工具&#xff0c;比如官方的 claude 命令行工具&#xff0c;但你又想让它去调用Google Gemini、Groq或者本地Ollama这类只认OpenAI API格式的服务&#xff0c;你会怎么做&…...

AI伦理实战:从偏见、可解释性到隐私保护的工程化解决方案

1. 项目概述&#xff1a;当AI从实验室走向现实&#xff0c;我们面临什么&#xff1f;几年前&#xff0c;我还在实验室里为一个模型的准确率提升0.5个百分点而兴奋不已。那时&#xff0c;“伦理”这个词&#xff0c;对我们这些埋头调参的工程师来说&#xff0c;似乎还停留在哲学…...

D2-Net:面向极端外观变化的端到端特征检测与描述方法

1. 这不是又一个特征匹配算法——D2-Net解决的是“连人眼都认不出是同一场景”的硬骨头你有没有试过&#xff0c;在暴雨夜拍一张街角咖啡馆的照片&#xff0c;隔天大晴时再拍一张&#xff0c;结果发现&#xff1a;招牌反光变了、玻璃窗映出的天空颜色完全不同、连门口那盆绿萝都…...

小白程序员必看:收藏这份AI黑话指南,轻松入门大模型世界!

本文用大白话解释了AI领域几个核心概念&#xff1a;AI是总称&#xff0c;LLM是推理模型&#xff0c;Agent能独立执行任务&#xff0c;MCP是标准化接口&#xff0c;Skills是技能包。文章通过生活化比喻和实例&#xff0c;帮助读者理解这些概念如何协同工作&#xff0c;实现高效自…...

【独家首发】ElevenLabs中文语音优化白皮书:针对普通话声调、儿化音与连读现象的5层微调协议

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs超写实语音生成教程 ElevenLabs 是当前业界领先的 AI 语音合成平台&#xff0c;其模型在语调自然度、情感表达力与跨语言一致性方面表现卓越。本章将指导你完成从 API 接入到高质量语音生成的…...

基于RAG与MCP协议构建实时新闻AI助手:newsmcp项目实战解析

1. 项目概述&#xff1a;一个让AI“读新闻”的智能工具最近在折腾AI应用开发的朋友&#xff0c;可能都绕不开一个核心问题&#xff1a;如何让大语言模型&#xff08;LLM&#xff09;获取并理解最新的、模型训练数据之外的信息&#xff1f;比如&#xff0c;你想让ChatGPT帮你分析…...

从零手写CNN:理解卷积网络的生物学原理与工程逻辑

1. 项目概述&#xff1a;从人眼到机器之眼&#xff0c;一次真实的视觉理解之旅你有没有盯着一张照片发过呆&#xff1f;比如朋友刚发来的旅行照——蓝天、雪山、一只歪头的雪豹。你几乎是一瞬间就认出了“雪豹”&#xff0c;甚至能判断它“在看镜头”“毛很厚”“可能刚睡醒”。…...

别再花钱买板卡了!手把手教你用NI-MAX虚拟PCI6224玩转LabVIEW数字IO

零成本玩转LabVIEW数字IO&#xff1a;NI-MAX虚拟设备全攻略 在工程教育与原型开发领域&#xff0c;硬件成本往往是阻碍学习进程的第一道门槛。一块标准的NI PCI-6224数字IO板卡市场价超过万元&#xff0c;而学生和独立开发者可能需要反复实验数十次才能掌握基础操作。但鲜为人知…...

探索Windows平台智能PPT演示计时器的实现与实践

探索Windows平台智能PPT演示计时器的实现与实践 【免费下载链接】ppttimer 一个简易的 PPT 计时器 项目地址: https://gitcode.com/gh_mirrors/pp/ppttimer 在技术分享或学术汇报场景中&#xff0c;时间管理常常成为影响演示效果的关键因素。演讲者需要同时关注内容表达…...

别再照搬Zynq教程了!手把手教你为Arty A7-35T配置MicroBlaze的SPI Flash启动(附时钟连接避坑指南)

别再照搬Zynq教程了&#xff01;手把手教你为Arty A7-35T配置MicroBlaze的SPI Flash启动&#xff08;附时钟连接避坑指南&#xff09; 在FPGA开发领域&#xff0c;Zynq系列因其ARMFPGA的异构架构而广受欢迎&#xff0c;网上教程资源也最为丰富。但这也导致了一个常见陷阱——许…...