postgis最短路径查询

本文介绍了如何在PostgreSQL中利用PostGIS和pgrouting进行最短路径查询。首先,通过PostGIS Shapefile Import/Export Manager导入shp文件,然后通过SQL操作创建pg_points和pg_points_roads表,接着格式化路网数据,设置cost和reverse_cost,调用pgr_createTopology函数,最后使用pgr_dijkstra进行最短路径计算,包括不含方向和含方向的路径查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


资料准备:postgres、postgis、pgrouting

1.      下载shp文件

2.      通过PostGis Shapefile Import/Export Manager将shp导入到Postgres中。注意SRID设为4326,选项中勾选Generate simple geometries instead of MULTIgeometries(为了将多线转成线)。

3.      通过pgAdmin 4查看数据

4.      通过SQL截取全国路网数据产生新表pg_roads;

5.      通过ST_DumpPoints函数切分线LINESTRING按顺序获取线中的所有点POINT从而生成pg_points表。

create temp sequence temp_point_seq;

create table pg_points as SELECTnextval('temp_point_seq') as id,(ST_DumpPoints(geom)).geom aspoint,(ST_DumpPoints(geom)).path[1] as index,* FROM pg_roads;

6.      通过ST_MakeLine将pg_points表数据组合成两两相连的线段表pg_points_roads。

create temp sequence temp_roads_seq;

create table pg_points_roads asSELECT nextval('temp_roads_seq') as road_id,gid,ST_MakeLine(pre_point,point)line,id point_id,pre_point_id, index,osm_id, code, oneway,  layer, bridge, tunnel FROM

(SELECT   lag(point) over (partition by gid order byindex) pre_point,lag(id) over (partition by gid order by index) pre_point_id,*FROM pg_points) tt where index>1;

7.      添加格式化所需字段SOURCE,TARGET,length,cost,reverse_cost

ALTER TABLE pg_points_roads ADD SOURCE integer;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值