PostGIS管网连通性分析
GIS在管网数据中的很重要的一个应用方向就是”管网空间分析“,其中包括连通性分析、上下游分析、爆管分析等等。下面是我使用postgis来实现该“管网连通性分析”的解决方案,分享给大家,以便相互学习。
使用该分析之前确保已添加扩展postgis、pgrouting
CREATE EXTENSION postgis;
CREATE EXTENSION pgrouting;
导入数据
将数据导入到postgreSQL数据库,我是从ArcGIS直接导入的,导入方式参考https://blog.csdn.net/eternity_xyf/article/details/80168029
创建拓扑
这里我用的管网数据表名为pipe
创建拓扑,生成pipe_vertices_pgr,该操作类似于ArcGIS中创建路网数据。
为pipe添加管段起始编号pgr_source、结束编号pgr_target、管段长度pgr_length三个字段,其中管段长度是用于分析的权重值。
--添加起点id
ALTER TABLE postgres.pipe ADD COLUMN IF NOT EXISTS pgr_source integer;
--添加终点id
ALTER TABLE postgres.pipe ADD COLUMN IF NOT EXISTS pgr_target integer;
--添加权重值
ALTER TABLE postgres.pipe ADD COLUMN IF NOT EXISTS pgr_length double precision;
为pgr_source、pgr_target创建索引
--为pgr_source字段创建索引
CREATE INDEX IF NOT EXISTS pgr_source_idx ON postgres.pipe("pgr_source")
--为pgr_target字段创建索引
CREATE INDEX IF NOT EXISTS pgr_target_idx ON postgres.pipe("pgr_target")
为权重字段pgr_length赋值
--为pgr_length赋值,shape为几何类型的字段,可能为shape、the_geom,通过ArcGIS导入的时候字段为"shape",其他方式导入时一般为"the_geom"
update postgres.pipe set pgr_length = public.st_length(shape)
调用pgr_createTopology方法,创建拓扑,这个步骤会为pgr_source和pgr_target字段赋值,同时生成节点表pipe_vertices_pgr
--为目标表创建拓扑布局,即为pgr_source和pgr_target字段赋值
select public.pgr_createTopology('postgres.pipe',0.000001,'shape','objectid','pgr_source','pgr_target')
计算联通性
根据起点坐标、终点坐标从pipe_vertices_pgr查询最近的起点、终点标识

调用pgr_kdijkstraPath函数,查询出起点、终点联通的线。

通过这里我们可以看出,该分析的核心是调用了pgrouting扩展中的求最短路径的函数pgr_kdijkstraPath,该函数用的是是Dijkstra算法,通过已添加的索引pgr_source和pgr_target以及权重值pgr_length,计算出两点之间的最短路径,如果有最短路径,证明两点联通。
该分析可用于计算给水管网、排水管网、输油管道等管网数据的两节点的连通性,当然也可用于路网的最短路径分析。
函数脚本
上面为整体分析思路,现在将上述思路整理成函数,方便使用
- 创建拓扑函数:analysis_updatetopology()
- 计算连通性函数:analysis_connect()
如何使用
调用
analysis_updatetopology()函数,完成拓扑创建-- 传入表名pipe,创建拓扑
select * from analysis_updatetopology('pipe')
从地图选择起点、终点,然后调用
analysis_connect()函数,得到分析结果-- 传入表名、起点坐标、终点坐标、容差值
select * from analysis_connect('pipe',103.90893393,30.789659886,103.911700936,30.787850094,0.00001)
原文地址:http://gisarmory.xyz/blog/index.html?blog=PostGISConnect
关注《GIS兵器库》, 第一时间获得更多高质量GIS文章。

本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名《GIS兵器库》(包含链接: http://gisarmory.xyz/blog/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
PostGIS管网连通性分析的更多相关文章
- 基于AE连通性分析
曾经做管线连通性分析,总觉得ARCGIS应该有现成的方案可以实现,但最终没有找到,后来只好自己写了套代码,但在搜索过程中找到了这样一估代码,当时留了下来,那我现在也把它留下来. Dim pLayer ...
- PostGIS 爆管分析之找出上游阀门
环境: Win10 ArcMap10.4(用于数据处理) postgresql9.4 postgis2.2.3 pgRouting2.3(postgresql插件) 说明: 继上一篇文章做了爆管分析找 ...
- PostGIS 爆管分析之根据爆点找出所有影响阀门
环境: Win10 ArcMap10.4(用于数据处理) postgresql9.4 postgis2.2.3 pgRouting2.3(postgresql插件) 说明: 做爆管分析的第一步,需要先 ...
- OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)
前面已经创建了两个 OVS local network,今天详细分析它们之间的连通性. launch 新的 instance "cirros-vm3",网络选择 second_lo ...
- PostGIS 爆管分析之找出上游阀门(优化版)
说明 前面描述过利用postgis查找上游阀门的原理,以及代码,其实当初写完就发现又很大的优化空间,但一直没有时间去做. 最近遇到一个情况,处理60w+条管网数据时,效率太慢了,于是腾时间优化了一版. ...
- PostGIS 爆管分析之找出总阀门
这个算法算是被摒弃了,但是很多自己思考过后留下的成果,虽然不用了,留着做记录. 算法目的是为了发生爆管后找到总阀门,这里分了几个步骤: 1.找到爆管点所在管段 2.通过遍历找到爆管点所有影响的阀门 3 ...
- 常用机器视觉工具----图像分析工具(blob分析)
http://blog.sina.com.cn/s/blog_67cc4eb70100ivnt.html Blob分析:Blob分析目的在于对图像中的2-D形状进行检测和分析,得到诸如目标位置.形状. ...
- JDK自带的监控分析工具JConsole
非常多开发人员认为自己懂Java编程.事实是大多数开发人员都仅仅领会到了Java平台的皮毛.所学也仅仅够应付工作. 作者将深度挖掘Java平台的核心功能.揭示一些鲜为人知的事实.帮助您解决最棘手的编程 ...
- 基于OpenCV.Net连通域分析进行文本块分割
上一次通过投影的方式进行了文本块分割,(见 https://www.cnblogs.com/BoyTNT/p/11812323.html )但这种方法有很大的局限性,要求分行清晰.不能有字符跨多行.不 ...
随机推荐
- AWS Switching to an IAM role (AWS CLI)
一,引言 今天额外分享一篇 AWS 的技术内容,需要在 EC2 切换到跨账号 IAM 角色(AWS CLI).假设我们使用两个 AWS 账户,A账号,B账号.我们希望允许 A 账号用于 "i ...
- msfconsole 常用命令记录
Metasploit是一款开源的渗透测试框架,它现在还在逐步发展中,下面介绍的一些功能和命令,可能会在未来失效. Metasploit框架提供了多种不同方式的使用接口: msfgui msfconso ...
- “Mac应用”已损坏,打不开解决办法
问题说明: 通常在非 Mac App Store下载的软件都会提示"xxx已损坏,打不开.您应将它移到废纸篓"或者"打不开 xxx,因为它来自身份不明的开发者" ...
- HDOJ-1074(动态规划+状态压缩)
Doing Homework HDOJ-1074 1.本题主要用的是状态压缩的方法,将每种状态用二进制压缩表示 2.状态转移方程:dp[i|(1<<j)]=min(dp[i|(1<& ...
- HDOJ-1560(迭代加深搜索问题)
DNA sequence HDOJ-1560 *本题是迭代加深搜索问题,主要是要理解题目,题目中一定是有解的,所以为了找最小的解,可以从小的搜索深度开始逐渐增加. *这里有个技巧就是,如果本次指定开始 ...
- PAT-1132(Cut Integer )数的拆分+简单题
Cut Integer PAT-1132 #include<iostream> #include<cstring> #include<string> #includ ...
- HDOJ-6621(线段树+二分法)
K-th Closest Distance HDOJ-6621 本题可以使用线段树解决,结点存本结点对应的所有元素,并按照从小打到排序 最后使用二分法求解答案.因为题目中有绝对值,所以需要使用两次查找 ...
- spring-cloud-alibaba之Nacos
在微服务构架中,集群服务间的需要调用时就需要知道各个服务的IP和提供服务的端口等信息,如果每个部署一个服务就配置一次,那么必然时非常麻烦的,因此我们需要一个能够统一管理的东西来解决这个问题,由此诞生了 ...
- JPress企业站主题-zbout
JPress企业站主题-zbout 经典的黑白灰颜色搭配风格,首页配置有轮播图.案例展示.公司简介.新闻中心.联系方式以及合作伙伴模块,全站使用了响应式结构,可以自适应电脑端和手机端浏览器访问.主题整 ...
- MIMO OFDM 常用信号检测算法
MIMO OFDM 系统检测算法 1. 前言 MIMO的空分复用技术可以使得系统在系统带宽和发射带宽不变的情况下容易地获得空间分集增益和信道的容量增益.OFDM技术采用多个正交的子载波并行传输数据,使 ...