一、导入数据

  1. 建立PostGis数据库。
    使用sample数据库做模板。

  2. 导入纽约公路矢量图层到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路径分析相关推荐

  1. postgis+geoserver+openlayers最短路径分析-学习记录bug

    学习postgis+geoserver+openlayers最短路径分析,记录遇到的奇奇怪怪的问题. 主要参考: https://www.cnblogs.com/giser-s/p/11599562. ...

  2. PostGIS 结合Openlayers以及Geoserver实现最短路径分析(二)

    前文讲述了怎么用ArcMap制作了测试数据,并导入了PostGIS,接下来我们需要结合PgRouting插件,对入库的数据再进行一下处理. 1.在pgAdmin中,执行下面的sql语句 --添加起点字 ...

  3. GeoServer+PostgreSQL+PostGIS+pgRouting实现最短路径查询

    一.软件安装 GeoServer下载地址: http://geoserver.org/download/ PostgreSQL下载地址: https://www.postgresql.org/down ...

  4. postgis routing pgr_dijkstra道路拓扑分析与方向分析

    postgis 拓扑网路实现沿路测距 通过shp导入postgis后的拓扑路网,实现沿路测距,通过wfs请求完成前端的服务实现 [1].增加数据字段 -- Function: public.pgr_f ...

  5. 用Postgis算最短路径(在任意位置选择起点终点)

    1.前言 阅读本文需要知道什么是shapfile,什么是路径分析,什么是GIS.相比Arcgis的路径分析功能,本文介绍的方法稍微复杂,需要注意的细节更多,但却是完全免费的.PostGis+QGIS+ ...

  6. PostGIS 路线规划

    ❤️通过SQL存储过程,利用PostGIS实现路线规划❤️ pgRouting扩展了PostgreSQL/PostGIS地理空间数据库,以提供地理空间路由功能. 文章目录 1.环境配置 2.导入shp ...

  7. POSTGIS路径规划的简单配置(数据库配置)

    欢迎关注我的博客For CR docker安装pgrouting是最方便的方法没有之一 所以我们使用docker安装pgrouting 0:需有docker环境 没有的请自行百度 0.1:必须使用拥有 ...

  8. postgis+geoserver最短路径

    postgis+geoserver最短路径 1 安装软件 2 数据预处理 3 操作postgres 4 操作Geoserver 5 计算最短路径 6 问题记录 1 安装软件 安装PostgreSQL与 ...

  9. geoserver加载mysql_postgressql+geoserver实现路径分析

    整体思路是用geoserver发布图层,图层为 sql,视图是利用存储过程分析出的路径结果, shp导入数据库 路网一般为shp数据,如果有多个图层,建议利用arcgis或其他工具合并为一个图层,方便 ...

  10. PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)

    听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 前置博客地址: 11.(地图工具篇)PostgreSQL+PostGIS实现最短路径分析 1.测试验证 select routi ...

最新文章

  1. 【C 语言】数组 ( 数组指针 | 数组指针定义 | 直接定义 数组指针 )
  2. 第六章 深度学习(上中)
  3. 【推荐】揭秘谷歌电影票房预测模型
  4. iOS发展- 文件共享(使用iTunes导入文件, 并显示现有文件)
  5. 分享一个有趣的网站“让我帮你百度一下“
  6. java云开发_Java 快速开始
  7. kubernetes ConfigMap和Secret:配置应用程序
  8. idea中下载插件超时_完美解决idea无法搜索下载插件的问题
  9. 如何解决联通电信宽带连接错误691
  10. lua和torch的安装
  11. 应用机器学习(七):随机森林
  12. Java游戏编程技术-1
  13. Discuz论坛项目架构分析
  14. 微信公众号标题怎么写更吸引人?
  15. 三体归零者和盘龙鸿蒙,《三体》里归零者那么厉害,为什么不能逆转降维打击?...
  16. effective modern cpp
  17. Weblogic 所有BEA错误代码详细信息列表
  18. 关于 DataFrame: 处理json数据(re模块,concat...)
  19. 2010年5月27日俱乐部晚场活动,“iPhone应用成功经验分享”主题研讨活动
  20. 转:修改ETM,用Ogre实现《天龙八部》地形与部分场景详解

热门文章

  1. [整理]让winCE支持中文界面(可切换至英文界面)
  2. 腾讯2017暑期实习编程题3
  3. bootstrap-内联文本元素-斜体
  4. 图文细谈远程桌面之3389
  5. Flyod和Warshall
  6. 10.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 内置插件
  7. 15.supervisor 安装
  8. 5.UNIX 环境高级编程--标准I/O库
  9. 16. Window close() 方法
  10. 2.Magento请求分发与控制器(MVC)