pgrouting 管线 联通分析

news2024/11/28 8:50:18

背景描述

啦啦啦啦,然后拉拉阿里,然后啦啦啦,最后就写了这个记录一下

数据准备

1 管线数据
在这里插入图片描述

数据要求(拓扑检查)

  1. 数据没有重叠要求

  2. 数据悬挂点问题得到合理结局,不存在数据连接点不一样的线

  3. 数据能按照正常方向处理(如果没有流向等方向,数据将按照要素的绘制方向进行)

  4. 数据能够有通和不通的标识

导入到postgis中

idgeomshape_leng
00105000020110F000001000000010200000002000000CE19510898216741808CB98B6D004F412C431C4D9821674190D409202E004F41126.8595169
10105000020110F000001000000010200000002000000CE19510898216741808CB98B6D004F41B8D1001CBA21674130CB103769004F41272.7527582
20105000020110F0000010000000102000000020000006C9A77AA9721674120C9E50FC4004F41CE19510898216741808CB98B6D004F41173.0574528
30105000020110F0000010000000102000000020000006C9A77AA9721674120C9E50FC4004F41E61DA7BA66216741E07A149EC5004F41391.506559
40105000020110F000001000000010200000003000000EC9E3C8E97216741B0D85F6EED004F414E62108297216741801D384FE9004F416C9A77AA9721674120C9E50FC4004F4182.75757135
50105000020110F000001000000010200000002000000EC9E3C8E97216741B0D85F6EED004F41744694CEAE21674160FE431AEA004F41186.1297867
60105000020110F000001000000010200000006000000143FC652A1216741701283205B014F412A189550A2216741701283784A014F41C0CAA1F19E216741A0BDC1C73D014F412C431C4D98216741D0D556FC25014F41C66D34CE97216741F05A421603014F41EC9E3C8E97216741B0D85F6EED004F41255.8795071
70105000020110F000001000000010200000002000000143FC652A1216741701283205B014F4182734670B5216741E0F21F825C014F41160.9456115
80105000020110F00000100000001020000000200000082734670B5216741E0F21F825C014F41B0506BE2BB216741907571F35C014F4151.57459883
90105000020110F000001000000010200000002000000B0506BE2BB216741907571F35C014F41FC87F465BB21674120C05BB0EB004F41226.5574896
100105000020110F000001000000010200000002000000C286A717DF216741F097DD3B5D014F41182653A5D8216741C06D34E88C004F41419.8332718
110105000020110F000001000000010200000003000000C286A717DF216741F097DD3B5D014F414E401313F8216741705F07865B014F41A089B0CB0C226741903177555A014F41365.6724458
120105000020110F000001000000010200000002000000B0506BE2BB216741907571F35C014F41EE7C3FF1C12167419028ED5D5D014F4148.47053948
130105000020110F000001000000010200000003000000EE7C3FF1C12167419028ED5D5D014F41F0164886CF216741F095B24C5E014F41C286A717DF216741F097DD3B5D014F41233.2344497
140105000020110F000001000000010200000002000000F4FDD4AE982167412063EE827E014F41143FC652A1216741701283205B014F4198.92549714
150105000020110F000001000000010200000003000000F085C9D09821674120FDF60DAA014F418295434977216741B08BDB18A4014F41083D9BC561216741B08BDB18A4014F41440.6138972
160105000020110F000001000000010200000002000000F4FDD4AE982167412063EE827E014F41F085C9D09821674120FDF60DAA014F4187.09266423
170105000020110F00000100000001020000000300000082734670B5216741E0F21F825C014F41168C4A8AB6216741D0C342CD80014F41D8F0F426B52167418026C27EBB014F41191.0307803
180105000020110F000001000000010200000003000000EE7C3FF1C12167419028ED5D5D014F415817B7D7C1216741305530A2C2014F41623255BEC1216741E0D7812BE1014F41263.6128224
190105000020110F000001000000010200000002000000F085C9D09821674120FDF60DAA014F41D881730899216741A0DFBE6EF1014F41142.7666976
200105000020110F000001000000010200000002000000D881730899216741A0DFBE6EF1014F410022FDD4E5216741A0DFBE76ED014F41614.4430713
210105000020110F0000010000000102000000020000003AB4C8489921674170787AED43024F4152962116602167412051DACB3A024F41457.9471985
220105000020110F000001000000010200000002000000D881730899216741A0DFBE6EF1014F413AB4C8489921674170787AED43024F41165.0023479
230105000020110F0000010000000102000000040000003AB4C8489921674170787AED43024F413A014D649921674120E4833667024F4102098A3199216741A0B437707B024F41141DC96199216741803F35BE9E024F41181.6831255
240105000020110F000001000000010200000002000000141DC96199216741803F35BE9E024F41F6065F9ADD216741E08C28F59B024F41545.7967295
250105000020110F000001000000010200000002000000141DC96199216741803F35BE9E024F41CAE53F829921674140795880B6024F4147.52752875
260105000020110F000001000000010200000003000000CAE53F829921674140795880B6024F41907EFB5C6E21674190C2F518BA024F41ECC0396D5B216741F0263110BE024F41496.9394137
270105000020110F000001000000010200000002000000CAE53F829921674140795880B6024F4152DA1B629A216741505986505A034F41327.7010778

分析

建立管线拓扑关系

建立拓扑关系主要目的是为了确定管线每一段的源头和终点,简单说就是两个阀之间关系。数据库中入库数据确定管线的上游阀source和下游阀target,cost用于计算连通,cost>0表示上游到下游可联通,cost<0表示不通
reverse_cost也是用于标识连通性,reverse_cost>0标识下游到上游是联通的,reverse_cost<0标识不通

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

注意:如果数据量大,可以通过创建索引提高查询效率,分别穿件source和target的索引

赋值

这里使用管线长度来做为联通性标识,即从source到target都是联通的

UPDATE testpipeline SET cost =st_length(geom);

如果是供水等管线,可以更具实际情况对source、target、cost,reverse_cost赋值

拓扑创建

创建拓扑是给线生成点文件
原理是提取线段的起点和结束点,作为管线(testpipeline)的source和target。按照折线的绘制方向生成。
生成一个新的点表,存储有id,和空间信息

select pgr_createtopology('testpipeline',0.0001,the_geom:='geom',id:='id',source:='source',target:='target',rows_where:='true', clean:=false)
  • edge_table:text,表名’testpipeline’
  • tolerance:float8,误差缓冲值,两个点的距离在这个距离内,就算重合为一点。0.0001
  • the_geom:text,该表的空间坐标字段’geom’
  • id:text,该表的主键 ‘id’
  • source:text,空间起点编号’source’
  • target:text,空间终点编号’target’
  • rows_where:text,条件选择子集或行。默认值为true,表示源或目标具有空值的所有行,否则将使用条件。‘true’
  • clean:text,每次执行都重建拓扑图,默认false false
idcntchkeineoutthe_geom
10101000020110F0000CE19510898216741808CB98B6D004F41
20101000020110F00002C431C4D9821674190D409202E004F41
30101000020110F0000B8D1001CBA21674130CB103769004F41
40101000020110F00006C9A77AA9721674120C9E50FC4004F41
50101000020110F0000E61DA7BA66216741E07A149EC5004F41
60101000020110F0000EC9E3C8E97216741B0D85F6EED004F41
70101000020110F0000744694CEAE21674160FE431AEA004F41
80101000020110F0000143FC652A1216741701283205B014F41
90101000020110F000082734670B5216741E0F21F825C014F41
100101000020110F0000B0506BE2BB216741907571F35C014F41
110101000020110F0000FC87F465BB21674120C05BB0EB004F41
120101000020110F0000C286A717DF216741F097DD3B5D014F41
130101000020110F0000182653A5D8216741C06D34E88C004F41
140101000020110F0000A089B0CB0C226741903177555A014F41
150101000020110F0000EE7C3FF1C12167419028ED5D5D014F41
160101000020110F0000F4FDD4AE982167412063EE827E014F41
170101000020110F0000F085C9D09821674120FDF60DAA014F41
180101000020110F0000083D9BC561216741B08BDB18A4014F41
190101000020110F0000D8F0F426B52167418026C27EBB014F41
200101000020110F0000623255BEC1216741E0D7812BE1014F41
210101000020110F0000D881730899216741A0DFBE6EF1014F41
220101000020110F00000022FDD4E5216741A0DFBE76ED014F41
230101000020110F00003AB4C8489921674170787AED43024F41
240101000020110F000052962116602167412051DACB3A024F41
250101000020110F0000141DC96199216741803F35BE9E024F41
260101000020110F0000F6065F9ADD216741E08C28F59B024F41
270101000020110F0000CAE53F829921674140795880B6024F41
280101000020110F0000ECC0396D5B216741F0263110BE024F41
290101000020110F000052DA1B629A216741505986505A034F41

字段介绍

id:bigint 顶点的标识符。
cnt:integer edge_table中引用此顶点的顶点数。See pgr_analyzeGraph.
chk:integer 指示顶点可能有问题。See pgr_analyzeGraph.
ein:integer edge_table中引用这个顶点的顶点数。See pgr_analyzeOneway.
eout:integer edge_table中引用该顶点作为输出的顶点数。See pgr_analyzeOneway.
the_geom:geometry Point geometry of the vertex:顶点的点几何。

查找联通性

此处联通性计算使用Dijkstra算法,其原理是找出两点的最短路径,如果能找到最短路径说明是联通的,并放回最短路径,如果找不到,说明不连通。

Dijkstra算法,由荷兰计算机科学家Edsger Dijkstra(上面的照片就是这位大佬!)于1956年提出。它是一种图搜索算法,它解决了非负代价边路径图的最短路径问题,即从起始顶点(start_vid)到结束顶点(end_vid)的最短路径。此算法可以与有向图无向图一起使用。

select * from pgr_dijkstra('select id ,source,target,cost::double precision from testpipeline',28,14,directed:=false)
  • edges sql Text,要进行分析的表及相关字段
  • strart_vids 起点id
  • end_vids 终点id
  • directed参数的值,默认true,true计算过程考虑图的方向,false计算过程不考虑图的方向

查询结果

seqpath_sqlnodeedgecostagg_cost
112826496.93941370
22272547.52752875496.9394137
332523181.6831255544.4669425
442322165.0023479726.150068
552119142.7666976891.1524158
66171687.092664231033.919113
77161498.925497141121.011778
8887160.94561151219.937275
999851.574598831380.882886
1010101248.470539481432.457485
11111513233.23444971480.928025
12121211365.67244581714.162474
131314-102079.83492

node节点顺序

edge 管线顺序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/763905.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C. Fighting Tournament - 模拟+思维

分析&#xff1a; 每次两个数比较&#xff0c;大的留下&#xff0c;小的放后面&#xff0c;可以发现只要最大的到了第一位就只能是它赢&#xff0c;因此统计第一次遍历所有数组元素的赢的次数&#xff0c;如果查询是最大的数呢么就在加上k-n&#xff0c;赛时代码写的一团乱&…

适合投资者的交易策略,4步找到

在外汇交易市场中&#xff0c;根据市场情况和个人投资目标&#xff0c;制定灵活的交易策略是至关重要的。Forexclub认为投资者可以通过结合多种交易策略&#xff0c;打造出全面、科学且适合自己的外汇交易策略。 首先&#xff0c;基于技术指标的交易策略是判断市场趋势和转折点…

「数字化制造」 是如何让制造过程信息化的?

「数字化制造」 是如何让制造过程信息化的&#xff1f; 数字化制造是指利用数字技术和信息化手段来实现制造过程的智能化、自动化和高效化。 它通过将传感器、物联网、云计算、大数据分析、人工智能等先进技术与制造业相结合&#xff0c;实现生产过程的数字化、网络化和智能化…

【原创】实现ChatGPT中Transformer模型之Encoder-Decoder

作者&#xff1a;黑夜路人 时间&#xff1a;2023年7月 Transformer Block &#xff08;通用块&#xff09;实现 看以上整个链路图&#xff0c;其实我们可以很清晰看到这心其实在Encoder环节里面主要是有几个大环节&#xff0c;每一层主要的核心作用如下&#xff1a; Multi-he…

Flask 分页Demo

项目结构 app.py from flask import Flask, render_template, requestapp Flask(__name__)books [{title: Book 1, author: Author 1, year: 2020},{title: Book 2, author: Author 2, year: 2021},{title: Book 3, author: Author 3, year: 2022},{title: Book 4, author: …

《面试1v1》面试官让我讲一下Kafka的性能哪里好

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

公钥加密之『迪菲–赫尔曼密钥交换』,颜色混合的把戏

前奏&#xff1a; 迪菲-赫尔曼密钥交换是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。 颜色混合&#xff1a; 如图所示&#xff0c;蛇和老鼠要交换一个共享密钥&…

Springboot热部署相关功能

文章目录 前言一、Springboot如何在IDEA中开启热部署二、热部署的相关知识1.热部署的范围2.关闭热部署 前言 环境是Mac电脑下的IDEA 2023.1.X版本 如何在修改程序后自动进行加载修改后的程序而不是重启加载所有资源而更新程序&#xff0c;这就使用到了Springboot相关的热部署功…

120页商业银行企业级IT架构规划ppt

导读&#xff1a;原文《商业银行企业级IT架构规划ppt》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取方式&#xff1a; 如需获取完整的电…

2023年7月17日,比较器,TreeMap底层,LinkedHashMap,Set接口

比较器 Comparator是外部比较器&#xff0c;用于比较来对象与对象之间的&#xff0c;两个对象进行比较&#xff0c;多用于集合排序 Comparable可以认为是一个内比较器&#xff0c;根据对象某一属性进行排序的。 1. 使用场景 ​ 内置比较器&#xff08;Comparable&#xff09;的…

Windows10下ChatGLM2-6B模型本地化安装部署教程图解

随着人工智能技术的不断发展&#xff0c;自然语言处理模型在研究和应用领域备受瞩目。ChatGLM2-6B模型作为其中的一员&#xff0c;以其强大的聊天和问答能力备受关注&#xff0c;并且最突出的优点是性能出色且轻量化。然而&#xff0c;通过云GPU部署安装模型可能需要支付相应的…

手把手带你创建微服务项目

1.先创建以下项目结构 2.在父项目中导入以下依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Web依赖 --><dependency>&l…

关于Java集合框架的总结

关于Java集合框架的总结 本篇文章先从整体介绍了java集合框架包含的接口和类&#xff0c;然后总结了集合框架中的一些基本知识和关键点&#xff0c;并结合实例进行简单分析。当我们把一个对象放入集合中后&#xff0c;系统会把所有集合元素都当成Object类的实例进行处理。从JDK…

分享四款导航页 个人主页html源码

一、开源免费&#xff0c;可以展示很多社交账号&#xff0c;也可以更换社交账号图标指向你的网站&#xff0c;上传后即可使用 https://wwwf.lanzout.com/ik7R912s031g 二、开源免费&#xff0c;不过部署稍微麻烦点 https://wwwf.lanzout.com/iCq2u12s02wb 三、适合做成导航页面…

Android性能优化篇[谷歌官方]

网上看到了个和Android性能优化相关的系列文章&#xff0c;觉的还不错&#xff0c;和大家分享下。 在Android领域&#xff0c;性能永远是一块大头。市场对这类人才的需求也是有增不减&#xff0c;而且薪资待遇也不错。如果大家想深入学习Android某个领域&#xff0c; 那性能这块…

190 → 169,50天瘦20斤随感

一头猪瘦二十斤没有人会在意&#xff0c;但一个人猛地瘦二十斤或许就会有意思~ 从五月底到7月中旬&#xff0c;大致50天瘦了21斤。本文大致从我自己的感想、方法、减肥前后的心态及身体变化等方面来给予你一些关键信息&#xff0c;希望对你有用吧。 当你发现自己真的在一斤一斤…

react CSS :last-child 最后一个下边框线如何去掉

需求&#xff1a;调用分类接口后&#xff0c;tab的最后一个border不要横线。 代码如下 逻辑是 i是否等于books数组的长度-1。 books.map((book, i) > { return( <View style{borderBottom:idx ! dictype.length - 1 && "1px solid #ECEFF7"} key…

CentOS7 mariadb10.x 安装

1、添加mariabd yum源 vi /etc/yum.repos.d/mariadb.repo [mariadb] name MariaDB baseurl https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.5/centos7-amd64/ gpgkey https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck 12、建立yum…

EMC学习笔记(十六)射频PCB的EMC设计(三)

射频PCB的EMC设计&#xff08;三&#xff09; 1.布线1.1 阻抗控制2.2 转角1.3 微带线布线1.4 微带线耦合器1.5 微带线功分器1.6 微带线基本元件1.7 带状线布线1.8 射频信号走线两边包地铜皮 2.其他设计考虑 1.布线 1.1 阻抗控制 PCB信号走线的阻抗与板材的介电常数、PCB结构、…

【山河送书第二期】:《零基础学会Python编程(ChatGPT版》

【山河送书第二期】&#xff1a;《零基础学会Python编程&#xff08;ChatGPT版》 前言内容简介作者简介 前言 在过去的 5 年里&#xff0c;Python 已经 3 次获得 TIOBE 指数年度大奖&#xff0c;这得益于数据科学和人工智能领域的发展&#xff0c;使得 Python 变得异常流行&am…