PostGis路径分析
一、导入数据
建立PostGis数据库。
使用sample数据库做模板。导入纽约公路矢量图层到PostGis。地图下载位置
二、生成拓扑
要生成最佳路径,首先要生成合法的拓扑。
生成拓扑前,需要添加两个字段,用来存储线段的首尾编号
-- Add "source" and "target" column
ALTER TABLE nyc_roads ADD COLUMN "source" integer;
ALTER TABLE nyc_roads ADD COLUMN "target" integer;
调用pgr_createTopology生成拓扑,注意就是生成线段的首位编号的过程
pgr_createTopology(
'<table>', -- 需要生成拓扑的表名
float tolerance, -- 容错值
'<geometry column>', -- 线段列名
'<gid>') -- gid
容错值:例如线段的端不能完全吻合时,允许多少误差,单位一般为角度或公里数
官方说明:https://docs.pgrouting.org/3.1/en/pgr_createTopology.html
例子
-- Run topology function
SELECT pgr_createTopology('nyc_roads', 0.00001, 'geom', 'gid');
三、生成最佳路径
pgrouting支持的最佳路径算法很多。
官方说明:https://docs.pgrouting.org/3.1/en/search.html?q=+shortest+path&check_keywords=yes&area=default
这里以Shortest Path A*和Shortest Path Dijkstra(狄克斯特拉)为例,介绍如何生成最佳路径
如果考虑回程成本的话,需要增加回程成本的字段,并设置为公里数。
ALTER TABLE nyc_roads ADD COLUMN reverse_cost double precision;
UPDATE nyc_roadsSET reverse_cost = length;
1. Shortest Path Dijkstra算法举例
函数说明:
pgr_dijkstra(
text sql, -- 用于计算最佳路径的数据来源, 用SQL表示, 例如 -- SELECT id (gid), source (线段起点id), target (线段重点ID), cost (起点到终点的成本) [,reverse_cost (终点到起点的成本)] FROM edge_table
integer source, -- 规划路径的起点
integer target, -- 规划路径的终点
boolean directed -- 是否支持双向,如果为true,sql中必须有reverse_cost
);
官方说明:https://docs.pgrouting.org/3.1/en/pgr_dijkstra.html
返回结果:(seq, path_seq ,node, edge, cost, agg_cost)
node:起点id
edge:目标ID, -1表示终点
SELECT * from public.pgr_dijkstra('SELECTgid AS id,source::integer,target::integer,length::double precision AS cost,reverse_costFROM nyc_roads', 1, 9, false
)
2. Shortest Path A*算法举例
与Shortest Path Dijkstra算法类似,只是SQL需要用到每条线段的起点和重点的坐标,其他参数和pgr_dijkstra都一样。
ALTER TABLE nyc_roads ADD COLUMN x1 double precision;
ALTER TABLE nyc_roads ADD COLUMN y1 double precision;
ALTER TABLE nyc_roads ADD COLUMN x2 double precision;
ALTER TABLE nyc_roads ADD COLUMN y2 double precision;UPDATE nyc_roads SET x1 = ST_x(ST_PointN(geom, 1)); -- 线段起点坐标x
UPDATE nyc_roads SET y1 = ST_y(ST_PointN(geom, 1)); -- 线段起点坐标yUPDATE nyc_roads SET x2 = ST_x(ST_PointN(geom, ST_NumPoints(geom))); -- 线段终点坐标x
UPDATE nyc_roads SET y2 = ST_y(ST_PointN(geom, ST_NumPoints(geom))); -- 线段终点坐标y
函数说明:
pgr_astar(
sql text, -- SELECT id, source, target, cost, x1, y1, x2, y2 [,reverse_cost] FROM edge_table ,包含了起点和重点坐标,计算速度比Shortest Path Dijkstra算法快一点
source integer,
target integer,
directed boolean,
has_rcost boolean
);
官方说明:https://docs.pgrouting.org/3.1/en/pgr_aStar.html
返回结果与pgr_dijkstra一样
例子:
SELECT * FROM pgr_astar('SELECT gid AS id,source::integer,target::integer,length::double precision AS cost,x1, y1, x2, y2FROM nyc_roads',1, 9, false);
结果:
PostGis路径分析相关推荐
- postgis+geoserver+openlayers最短路径分析-学习记录bug
学习postgis+geoserver+openlayers最短路径分析,记录遇到的奇奇怪怪的问题. 主要参考: https://www.cnblogs.com/giser-s/p/11599562. ...
- PostGIS 结合Openlayers以及Geoserver实现最短路径分析(二)
前文讲述了怎么用ArcMap制作了测试数据,并导入了PostGIS,接下来我们需要结合PgRouting插件,对入库的数据再进行一下处理. 1.在pgAdmin中,执行下面的sql语句 --添加起点字 ...
- GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询
一.软件安装 GeoServer下载地址: http://geoserver.org/download/ PostgreSQL下载地址: https://www.postgresql.org/down ...
- postgis routing pgr_dijkstra道路拓扑分析与方向分析
postgis 拓扑网路实现沿路测距 通过shp导入postgis后的拓扑路网,实现沿路测距,通过wfs请求完成前端的服务实现 [1].增加数据字段 -- Function: public.pgr_f ...
- 用Postgis算最短路径(在任意位置选择起点终点)
1.前言 阅读本文需要知道什么是shapfile,什么是路径分析,什么是GIS.相比Arcgis的路径分析功能,本文介绍的方法稍微复杂,需要注意的细节更多,但却是完全免费的.PostGis+QGIS+ ...
- PostGIS 路线规划
❤️通过SQL存储过程,利用PostGIS实现路线规划❤️ pgRouting扩展了PostgreSQL/PostGIS地理空间数据库,以提供地理空间路由功能. 文章目录 1.环境配置 2.导入shp ...
- POSTGIS路径规划的简单配置(数据库配置)
欢迎关注我的博客For CR docker安装pgrouting是最方便的方法没有之一 所以我们使用docker安装pgrouting 0:需有docker环境 没有的请自行百度 0.1:必须使用拥有 ...
- postgis+geoserver最短路径
postgis+geoserver最短路径 1 安装软件 2 数据预处理 3 操作postgres 4 操作Geoserver 5 计算最短路径 6 问题记录 1 安装软件 安装PostgreSQL与 ...
- geoserver加载mysql_postgressql+geoserver实现路径分析
整体思路是用geoserver发布图层,图层为 sql,视图是利用存储过程分析出的路径结果, shp导入数据库 路网一般为shp数据,如果有多个图层,建议利用arcgis或其他工具合并为一个图层,方便 ...
- PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 前置博客地址: 11.(地图工具篇)PostgreSQL+PostGIS实现最短路径分析 1.测试验证 select routi ...
最新文章
- 【C 语言】数组 ( 数组指针 | 数组指针定义 | 直接定义 数组指针 )
- 第六章 深度学习(上中)
- 【推荐】揭秘谷歌电影票房预测模型
- iOS发展- 文件共享(使用iTunes导入文件, 并显示现有文件)
- 分享一个有趣的网站“让我帮你百度一下“
- java云开发_Java 快速开始
- kubernetes ConfigMap和Secret:配置应用程序
- idea中下载插件超时_完美解决idea无法搜索下载插件的问题
- 如何解决联通电信宽带连接错误691
- lua和torch的安装
- 应用机器学习(七):随机森林
- Java游戏编程技术-1
- Discuz论坛项目架构分析
- 微信公众号标题怎么写更吸引人?
- 三体归零者和盘龙鸿蒙,《三体》里归零者那么厉害,为什么不能逆转降维打击?...
- effective modern cpp
- Weblogic 所有BEA错误代码详细信息列表
- 关于 DataFrame: 处理json数据(re模块,concat...)
- 2010年5月27日俱乐部晚场活动,“iPhone应用成功经验分享”主题研讨活动
- 转:修改ETM,用Ogre实现《天龙八部》地形与部分场景详解