Valhalla实现 -Docker部署利用OSM(Mapbox)地图实现路径规划可视化

news/2024/12/21 22:51:30/

一. 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机器

OSM_38">1.2 下载OSM数据

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

2. 安装部署

docker_44">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

在这里插入图片描述

valhalla_demo_85">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是一个很不错的选择。


http://www.ppmy.cn/news/1536461.html

相关文章

Spring Boot:打造下一代医院管理系统

3系统分析 3.1可行性分析 通过对本医院管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本医院管理系统采用JAVA作为开发语言,Spring Boot框…

Pikachu-url重定向-不安全的url跳转

不安全的url跳转 不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话就可能发生"跳错对象"的问题。 url跳转比较直接的危害是: …

Apache Flink 和 Apache Kafka

Apache Flink 和 Apache Kafka 都是大数据生态系统中非常重要的工具,但它们的作用和应用场景有所不同。下面将分别介绍两者的主要特性和它们之间的异同点。 Apache Kafka 作用: 消息队列:Kafka 主要作为消息队列使用,用于解耦生…

gin如何具体利用Server-Send-Events(SSE)实时推送技术实现消息推送

目录 业务场景 解决方案 1. 轮询 2. WebSocket 3. SSE(Server-Send-Events) 代码实现 总结 业务场景 在抖音、美团等APP中,我们经常会遇到APP内部的消息推送,如关注的人的动态消息推送、点赞评论互动消息推送以及算法推荐消息推送。这些场景都是…

刷题 二叉树

二叉树的核心思想 - 递归 - 将问题分解为子问题 题型 递归遍历迭代遍历层序遍历 bfs:队列各种递归题目:将问题分解为子问题二叉搜索树 - 中序遍历是递增序列 TreeNode* &prev 指针树形dp 面试经典 150 题 - 二叉树 104. 二叉树的最大深度 广度优…

传感器模块编程实践(二)W5500 SPI转以太网模块简介及驱动源码

文章目录 一.概要二.W5500芯片介绍W5500通讯协议介绍 三.W5500模块介绍四.W5500模块原理图五.W5500以太网模通讯实验六.CubeMX工程源代码下载七.小结 一.概要 我们介绍过单片机的以太网系统一般是由:单片机MACPHYRJ45。有些单片机比如STM32F407VET6芯片内部自带MAC…

十二、血条UI

一、制作血条UI 注:一般不用Slider制作血条;而是用两个Image制作,选择为填充 使用Slider滑动条制作UI 人物血条:背景深绿色;滑条浅绿色 在场景中的画布选择为OverLay 敌人血条: 在预制体里面制作&#x…

【笔记】I/O总结王道强化视频笔记

文章目录 从中断控制器的角度来理解整个中断处理的过程复习 处理器的中断处理机制**中断驱动I/O方式** printf——从系统调用到I/O控制方式的具体实现1轮询方式下输出一个字符串(程序查询)中断驱动方式下输出一个字符串中断服务程序中断服务程序与设备驱动程序之间的关系 DMA方…