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

pgRouting安装及使用示例

文章目录

  • 环境
  • 文档用途
  • 详细信息

环境

系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:4.5.10

文档用途

本文介绍pgRouting的安装及使用示例。

详细信息

简介

pgRouting是PostgreSQL下基于PostGIS的扩展插件,提供了地理空间路由和路径网络分析功能。

pgRouting解决路网规划问题,比如:

  • 从起点出发经过很多个点,最终回到起点;
  • 从起点出发经过很多个点,最终回到终点;
  • 两点之间提供多条备用路径选择。

安装

pgRouting依赖PostGIS,安装前需确认已安装PostGIS。

pgRouting安装包如下:P001-hgdb-see-4.5.–gis*-pgrouting*-f8960d5-2025****.x86_64.rpm

pgRouting安装包需与数据库版本匹配。

安装:

#rpm包执行: rpm -ivh P001-hgdb-see-4.5.*-*-gis*-pgrouting*-f8960d5-2025****.x86_64.rpm #deb包执行: dpkg -i P001-hgdb-see-4.5.*-*-gis*-pgrouting*-3b95507-2024****.arm64.deb

安装完成后,安全版数据库使用sysdba用户,企业版使用highgo用户登录数据库创建pgrouting扩展,如下:

psql osm_db sysdba osm_db=# create extension pgrouting; osm_db=# \dx List of installed extensions Name | Version | Schema -------------------+----------+------------ pgrouting | 3.3.1 | public plpgsql | 1.0 | pg_catalog postgis | 3.2.2dev | public postgis_topology | 3.2.2dev | topology

使用示例

下面使用pgrouting实现点到点,多点到一点的路径规划。

例子实现步骤如下:

1、数据准备

#采用osm导入的数据#选取一部分数据:createtableplanet_osm_roads_testasSELECTosm_id,admin_level,name,oneway,operator,z_order,wayFROMplanet_osm_roadsLIMIT10000offset55000;#添加source、tartget、cost、reverse_cost字段;source、tartget字段是创建道路数据拓扑关系需要的;cost、reverse_cost是成本估算值(权重)osm_db=# alter table planet_osm_roads_test add column source int;osm_db=# alter table planet_osm_roads_test add column target int;osm_db=# alter table planet_osm_roads_test add column cost float;osm_db=# alter table planet_osm_roads_test add column reverse_cost float;

2、创建拓扑关系

osm_db=# SELECT pgr_createTopology('planet_osm_roads_test', 0.001, 'way', 'osm_id');#生成了新表:planet_osm_roads_test_vertices_pgr,DDL如下:CREATETABLEpublic.planet_osm_roads_test_vertices_pgr(id bigserialNOTNULL,cnt int4NULL,chk int4NULL,ein int4NULL,eout int4NULL,the_geompublic.geometry(point,4326)NULL,CONSTRAINTplanet_osm_roads_test_vertices_pgr_pkeyPRIMARYKEY(id));CREATEINDEXplanet_osm_roads_test_vertices_pgr_the_geom_idxONpublic.planet_osm_roads_test_vertices_pgrUSINGgist(the_geom);

3、设置道路通行成本(权重),这里简单的以道路数字化长度计算

osm_db=# select distinct oneway from planet_osm_roads;oneway--------no-1yes osm数据中oneway表示道路通行方向,其他数据源也有此字段;这里oneway有四个选项:null:道路双向可通行 yes:道路单行道,实际通行方向和数字化方向相同no:道路禁止通行(或禁止某类型车通行)-1:道路单行道,实际通行方向和数字化方向相反#道路双向通行成本:道路双向可通行时,正向、反向成本都为道路数字化长度updateplanet_osm_roads_testsetcost=st_length(way),reverse_cost=st_length(way)whereonewayisnull;#道路实际方向与数据方向一致,反向成本设置无限大值updateplanet_osm_roads_testsetcost=st_length(way),reverse_cost=999999999999whereoneway='yes';#道路实际方向与数据方向相反,正向成本设置无限大值updateplanet_osm_roads_testsetcost=999999999999,reverse_cost=st_length(way)whereoneway='-1';#道路禁止通行,正向、反向成本都设置无线大值updateplanet_osm_roads_testsetcost=999999999999,reverse_cost=999999999999whereoneway='no';

4、实现效果测试 从planet_osm_roads_test_vertices_pgr表中大概选取几个点:251-山大中心校区,762-美联广场,1043-万虹广场。

1) 测试从251到762的路径,点到点

#通过成本估算,计算出需要经过的点select*frompgr_dijkstra('select osm_id as id , source, target, cost from planet_osm_roads_test',251,762,true);seq|path_seq|node|edge|cost|agg_cost|---+--------+----+----------+---------------------+--------------------+1|1|251|1046076383|0.006844842308275152|0.0|2|2|244|548989046|0.011145742962676768|0.006844842308275152|3|3|274|553764906|0.0017951356130137173|0.01799058527095192|4|4|277|959638562|0.0011370426069386695|0.019785720883965636|5|5|362|959638563|0.001616456363375162|0.020922763490904307|6|6|363|548989050|0.0007897126122848|0.02253921985427947|7|7|278|556421924|0.0008899553078673|0.02332893246656422|8|8|365|557853475|0.004719408081710194|0.024218887774431517|9|9|366|553892277|0.0059124676278269495|0.02893829585614171|10|10|368|554179650|0.007977539964683337|0.03485076348396866|11|11|1218|685031739|0.00450564696523659|0.042828303448651996|12|12|1217|554179639|0.0012612492102538943|0.04733395041388858|

查出以上经过的点对应的坐标:

select*fromplanet_osm_roads_test_vertices_pgrwhereidin(selectnodefrompgr_dijkstra('select osm_id as id , source, target, cost from planet_osm_roads_test',251,762,true)orderbypath_seq);

在地图上展示经过的点如下:

从以上地图展示看到pgRouting规划的从251到762的路径导航是合理的。

2) 测试从1043、762到251的路径,多点到一点

查出从1043、762到251经过的点的坐标:

select*fromplanet_osm_roads_test_vertices_pgrwhereidin(selectnodefrompgr_dijkstra('select osm_id as id , source, target, cost from planet_osm_roads_test',ARRAY[1043,762],251,true)orderbypath_seq);

在地图上展示以上经过的点,如下:

从以上地图展示看到pgRouting规划的从1043、762到251的路径导航是合理的。

总结

本文档介绍了pgRouting的安装,使用pgRouting实现了点到点和多点到一点的路径导航规划。

http://www.jsqmd.com/news/642717/

相关文章:

  • 马尔可夫性、极小性和忠实性的关系:因果图与数据的深层逻辑
  • ZR.Admin.NET + Vue3实战:从本地开发到Nginx部署的完整避坑指南
  • 使用腾讯QClaw来拯救一个重度脂肪肝患者
  • 100G SFP光模块全解读:核心定义、关键特性与主流应用场景
  • L1-044 稳赢(15分)
  • RTA-OS Alarm配置避坑指南:从绝对/相对时间到自启动,这些细节别踩雷
  • FanControl完全指南:告别风扇噪音,5分钟打造完美静音电脑
  • Kylin-Desktop-V10-SP1-海光版(Hygon C86)安装与配置全指南
  • 5月19日起Roblox更新游戏发布要求,创作者反响不一!
  • 从云端到边缘:拆解Capsule Update如何成为现代设备(IoT/服务器)固件管理的基石
  • 2025年终极指南:R3nzSkin国服特供版——一键解锁LOL全皮肤的完整解决方案
  • 手把手教你用Qwen3.5-2B:免费商用、一键部署,打造个人AI助手
  • 表格布局中的Flexbox应用
  • 多线程——面试中一个常考内容(13)
  • celery-redis异步任务具体应用
  • **存算一体编程新范式:用 Rust 实现高效数据流驱动的计算模型**在传统冯·诺依曼架构中,CP
  • 如何快速掌握WandEnhancer使用:面向新手的完整免费增强指南
  • linux内核 - 常用的性能分析命令
  • 以爱毕业aibiye为代表的七家专业论文辅导团队,通过优质的在线指导在国内学术服务领域脱颖而出
  • AMD Ryzen系统调试利器:SMUDebugTool实战指南
  • 基因表达预测的“权力游戏”:当转录组与表观基因组争夺控制权
  • Phi-3-mini-gguf实战:解决Web开发中常见的403 Forbidden错误
  • 智慧交通项目实战:从0到1构建一个雨天车辆行人检测系统(附VOC/YOLO格式数据集及完整代码)
  • SEPIC拓扑设计实战:从元件参数计算到PCB布局的完整指南
  • Ubuntu动态库路径管理全攻略:从LD_LIBRARY_PATH到ldconfig实战
  • # Linux服务Day04: 一站式DNS入门(原理+单域+多域+Web实战+分离解析)
  • 基于Qwen3.5-9B-AWQ-4bit的SpringBoot微服务智能开发全流程
  • 简历敢写“精通RAG“? 阿里一面挂了! 这3个夺命连环问,你能扛住几个?
  • 爱毕业aibiye及其他六家专业辅导团队,凭借高效的在线服务在国内论文指导市场占据重要地位
  • [CI/CD] 排障实录:内网环境下 Jenkins + ArgoCD 流水线搭建