postgreSQL:通过pgrouting扩展,进行连通性分析

1.添加postgres扩展

CREATE EXTENSION PostGIS
CREATE EXTENSION pgRouting

2.导入线数据至pg数据库

将shp数据,通过PostGIS Bundle导入至数据库,shp数据尽量为LineString类型,避免MultiLineString类型(多部件无法进行网络分析),以线的表名称“linetest”为例。

若导入为MultiLineString类型,则可在数据库表中新建geometry类型字段(字段名为“the_geom”,空间参考srid为4490),将MultiLineString类型转换为LineString类型。

(1)LineString类型字段创建方法:

select addgeometrycolumn('linetest', 'the_geom', 4490, 'LINESTRING', 2, FALSE)

(2)MultiLineString类型转换为LineString类型:

update linetest
set the_geom = st_linemerge(geom)

3.创建网络拓扑

根据linetest表,创建网络拓扑,作为分析的基础。shp导入后,linetest表会自动包含gid字段,可作为线段的唯一标识。

(1)创建必要的字段:

source integer类型 ##起点id,空值即可

target integer类型 ##终点id,空值即可

cost double类型 ##线段长度,赋值

创建字段:

ALTER TABLE linetest ADD COLUMN "source" INTEGER  default null;
ALTER TABLE linetest ADD COLUMN "target" INTEGER  default null;
ALTER TABLE linetest ADD COLUMN "cost" DOUBLE PRECISION  default null;

其中:

source、target字段可通过创建拓扑,自动添加线段节点的id。

计算线段长度:

UPDATE roads SET cost =st_length(ST_Transform(the_geom,4551));

其中:

4551为平面坐标系srid,可根据实际情况设置。

(2)创建拓扑

通过pgr_createtopology函数自动创建拓扑关系,其中:

linetest ##线段表名称

0.000001 ##计算容差

the_geom LineString类型 ##线段几何字段

gid integer类型 ##线段唯一id

source integer类型 ##起点id

target integer类型 ##终点id

select pgr_createtopology('linetest',0.000001,the_geom:='the_geom',id:='gid',source:='source',target:='target',rows_where:='true', clean:=false)

执行后,结果为ok,则成功。

(3)拓扑创建结果

执行成功后,自动创建节点表linetest_vertices_pgr,并为linetest表的source、target字段添加对应节点id。

节点表linetest_vertices_pgr:

线段表linetest字段赋值结果:

4.计算最短路径

通过pgr_dijkstra函数,计算最短路径。其中:

1、9为两个节点id,directed为是否考虑方向

select * from pgr_dijkstra('select gid as id,source,target,cost::double precision from linetest',1,9,directed:=true)

查询结果如下:

其中:

  1、seq:查询结果排序值

  2、path_seq:一个路径下的排序值,新的路径重新从1开始

  3、node:路径中各节点的标识(上一个边的 end,下一个边的 start)

  4、edge:路径中边的标识

  5、cost:当前边的成本(长度)

  6、agg_cost:总成本(总长度)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值