PostGis路径分析

article/2025/9/28 22:45:20

一、导入数据

  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);

结果:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/0V8FsUx4.shtml

相关文章

4.PostGIS

SELECT ST_GeometryFromText(POINT(116.39088 39.90763),4326); SELECT ST_GeomFromText(POINT(116.39088 39.90763),4326); SELECT ST_PointFromText(POINT(116.39088 39.90763),4326); 1、创建点类型的表&#xff0c;类型不要选择postgresql提供的空间数据类型&#xff0c;…

Postgis使用

Postgis使用 一、安装与配置 先查看目前yum源中有哪些版本可用&#xff0c;并安装合适的版本 yum search postgis安装Postgresql 10对应的版本PostGIS yum install -y postgis24_10二、创建GIS数据库 PostGIS是Postgresql的一个扩展&#xff0c;创建数据库并加载PostGIS扩…

PostGIS 路线规划

❤️通过SQL存储过程&#xff0c;利用PostGIS实现路线规划❤️ pgRouting扩展了PostgreSQL/PostGIS地理空间数据库&#xff0c;以提供地理空间路由功能。 文章目录 1、环境配置2、导入shp文件2.1、打开PostGis Shapefile插件2.2、连接数据库2.3、添加并导入矢量数据2.4、查看数…

postgis启动_PostGIS 快速入门(转)

PostGIS 是 PostgreSQL 关系数据库的空间操作扩展。它为 PostgreSQL 提供了存储、查询和修改空间关系的能力。本文中 ‘PostgreSQL’ 指代基本的关系数据库功能&#xff0c;而 ‘PostGIS’ 指代扩展的空间操作特性。 客户端&#xff0d;服务器构架 PostgreSQL 同众多数据库产品…

postgis 返回 geojson

GeoJSON 特征集合&#xff1a; {"type": "FeatureCollection","features": [{"type": "Feature","geometry": {"type": "Point","coordinates": [102.0, 0.5]},"properties&…

PostGIS 安装

安装 PostgreSQL 数据库 Windows 下载安装包 运行安装包即可 Linux 以 Ubuntu 为例, 其他版本参考官方下载页面 通过 APT 仓库安装 sudo sh -c echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d…

PostGIS安装

1首先安装PostgreSQL &#xff0c;安装完后 services.msc打开服务列表&#xff0c;找到postgresql-x64-14启动&#xff0c;如果启动不了&#xff0c;设置本地系统账户登录 2打开pgAdmin4,创建服务器 参数设置可以参考帮助文档 3安装postgis,下载地址 Index of /postgis/windows…

PostGIS 笔记

空间数据库 定义&#xff1a;存储、操作空间数据的数据库。 空间数据特点 空间数据类型是指点、线、多边形等形状&#xff1b;提供用于空间操作的高效处理的多维空间索引&#xff1b;提供用于查询空间属性和关系额空间函数。 发展历程 第1代 在传统的 GIS 实施中&#xff0c;所…

PostGIS

一、ArcGISPostGIS 打开ArcCatalog目录&#xff0c;双击添加数据库连接&#xff0c;进入数据库连接窗口。数据库类型选择PostgreSQL&#xff0c;输入实例&#xff08;安装PostgreSQL的服务器名称或IP地址&#xff09;、用户名、密码&#xff0c;以上信息无误&#xff0c;点击数…

PostGIS的安装与初步使用

想学习postgis推荐看我翻译的官方教程文档&#xff1a;https://blog.csdn.net/qq_35732147/article/details/85256640 目录 一、安装PostGIS 1.下载安装程序 2.安装PostgreSQL 二、创建空间数据库 1.打开pgAdmin 4 2.登录到服务器 3.创建空间数据库 三、导入空间数据 1.获取…

PostGIS(1):PostGIS概述

作为对象关系型数据库PostGreSQL的拓展模块&#xff0c;PostGIS可用于存储GIS数据&#xff0c;并提供了对基于GiST的R树索引支持、以及面向GIS对象的分析和处理相关的函数。 以下是PostGIS官网对其特征的介绍&#xff0c; &#xff08;1&#xff09; 先看一下百度对PostGIS的介…

PostGIS总结

PostGreSQL&#xff08;三&#xff09;PostGISPostGreSQL&#xff08;四&#xff09;PostGIS-空间数据存储PostGreSQL&#xff08;五&#xff09;PostGIS-常用函数PostGreSQL&#xff08;六&#xff09;PostGIS-空间连接和空间索引PostGreSQL&#xff08;七&#xff09;PostGIS…

postgis学习

以后估计会长期从事gis相关的工作&#xff0c;postgis作为一款功能比较强大的gis数据库还是需要好好学习一下的。虽然几何数据存储用任何一种类型的数据库都可以自行实现&#xff0c;但也仅仅只是存储&#xff0c;后续的坐标转换、空间分析等功能如果都要一一自己实现&#xff…

【笔试题】求最小公倍数 C++(两种方法)

题目 本题链接&#xff1a;求最小公倍数 正整数A和正整数B 的最小公倍数是指能被A和B整除的最小的正整数值&#xff0c;设计一个算法&#xff0c;求输入A和B的最小公倍数。 输入描述&#xff1a; 输出描述&#xff1a; 示例1&#xff1a; 解题思路一&#xff1a; 暴力破解 …

多个数求最小公倍数详解!

最小公倍数 既然想算最小公倍数&#xff0c;首先要清楚最小公倍数的求法&#xff0c;还有最大公约数的求法 最小公倍数*最大公约数两数乘积 有了公式&#xff0c;我们很清楚可以知道了&#xff0c;只要有最大公约数就可以求出最小公倍数&#xff0c;因为两数乘积肯定是已知的&a…

最大公约数(GCD) 与 最小公倍数(LCM)的 定义、关系、求法

最大公约数 与 最小公倍数 约数 和 倍数最大公约数最小公倍数 最大公约数与最小公倍数的关系求最大公约数、最小公倍数例一例二 约数 和 倍数 如果数 a a a能被数 b b b整除&#xff0c; a a a就叫做 b b b的倍数&#xff0c; b b b就叫做 a a a的约数。 约数和倍数都表示一个…

最大公约数和最小公倍数

一、求最大公因数的三种方法: 最大公因数定义: (最大公约数、最大公因子):指两个或多个整数共有约数中最大的一个。 最小公倍数定义: 两个或多个整数公有的倍数叫做它们的公倍数&#xff0c;其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。 ①辗转相除法&#x…

最大公约数和最小公倍数的关系

联系&#xff1a; 最大公约数&#xff1a; 指两个或多个整数共有的约数中最大的那个 最小公倍数&#xff1a; 指两个或多个整数共有的倍数中最小的那个 以两个整数为例&#xff1a; 最大公约数表示为&#xff1a;(a&#xff0c;b) 最小公倍数表示为&#xff1a;[a&#xff0…

公约数(也叫公因数)|公倍数 |小知识|Golang

一、最大公约数&#xff08;也叫公因数&#xff09; 两个数的 最大公约数 是能够被两个数整除的最大正整数。 举例&#xff1a; 3 和 6 的最大公约数是3。“6和3的最大公因数是3。 6的因数有1,2,3,6&#xff0c;3的因数有1,3。两个数的最大公约数是能够被两个数整除的最大整数…

线性代数学习笔记——第六十九讲——正交向量组与标准正交基

1. 正交向量组的定义 2. 正交的判定 3. 正交向量组必然线性无关&#xff0c;线性无关向量组未必是正交向量组 4. 正交向量组求解示例 5. 标准正交向量组的定义