基于开源Postgresql构建高性能管网分析服务

2024-01-08 10:42赵雅鹏江彬樊伟平齐迹
城市勘测 2023年6期
关键词:插件管网管线

赵雅鹏,江彬,樊伟平,齐迹

(中煤(西安)地下空间科技发展有限公司,陕西 西安 710054)

0 引 言

城市地下管网根据用途可以将地下管线分为供水、电路、燃气、通信等类别,不同类别的管线,承担着城市不同的运作,保障了城市发展的经济建设[1]。地下管线管理系统是对地下管线进行综合管理的计算机管理系统,在计算机软硬件、数据库和互联网等条件的支持下,运用GIS技术对地下管网位置关系、拓扑关系、属性信息等进行存储、展示、处理、输出,结合实地需求,个性化地运用和展示城市地下管网信息。地理信息系统的空间分析能力可以分析和可视化地理空间数据中隐藏的信息,制作统计图表或专题地图,辅助决策;同时,地理信息系统的网络分析能力可以分析地理网络,如排水网络的路径分析、最短路径的求解等,为管道突发事故应急救援提供有力支持,是解决管网问题的利器。另外,GIS提供了强大的数据快速查询和展示能力,为二三维管网呈现做了有力支撑[2-4]。因此高效、稳定的管网查询、空间分析、网络分析服务能力,是上述呈现的前提条件。笔者就如何构建高性能管网分析做了深入研究,采用开源数据库Postgresql结合过程存储开发,应用数据库自身高性能特性,有效提升了管网数据的查询分析能力。

1 Postgresql数据库简介

PostgreSQL是一个强大的对象关系数据库管理系统,是自由和开放源代码的软件。PostgreSQL能够在运行时添加新的数据类型、函数和访问方法的机制。正因为如此PostGIS扩展可以由单独的开发团队开发,但仍然可以非常紧密地集成到PostgreSQL数据库中[5-7]。

PostGIS通过向PostgreSQL添加对空间数据类型、空间索引和空间函数的支持,将PostgreSQL数据库管理系统转换为空间数据库。因为PostGIS是建立在PostgreSQL之上的,所以PostGIS自动继承了重要的“企业级”特性以及开放源代码的标准[8-9]。

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。笔者基于存储过程开发了管网分析常用功能。

2 管网分析设计与实现

2.1 总体设计

管网分析算法依托Postgresql数据库存储过程函数结合postgis空间数据库插件实现。JAVA调用数据库管网分析方法后以REST方式给前端提供服务,来查询管网分析结果。

目前常用管网分析功能包括如图1所示:

图1 管网分析方法

管网数据一般包含管点和管线数据,数据为包含坐标(x、y、z)信息的矢量数据。管线数据包含分析必须字段如:管线类型、管线编号、起始管点编号、终止管点编号、起始管点埋深、终止管点埋深、起始管点高程、终止管点高程、管径、材质、管线长度。管点数据包含必须字段如:管点编号、管点类型。

管网数据通过postgis Bundle数据插件导入Postgresql数据库,导入过程中注意矢量数据坐标系。矢量数据导入过程如图2所示:

图2 矢量数据导入插件

2.2 管网分析实现

(1)代码结构示例

管网分析是基于postgis空间函数插件开发,因此需在Postgresql Admin4中执行CREATE EXTENSION postgis命令安装插件。管网分析功能采用存储过程函数实现,函数根据功能定义输入参数和输出参数,下面给出了上下游追踪函数结构代码段示例:

CREATE OR REPLACE FUNCTION public.test_pipe_upstream_downstream_tracking(

pipeline_tablename character varying,

pipepoint_tablename character varying,

pipeline1_no character varying,

is_upstream boolean,

tracking_type character varying)

RETURNS TABLE(v_lno_array text[])

LANGUAGE 'plpgsql'

COST 100

VOLATILE STRICT PARALLEL UNSAFE

ROWS 1000

AS $BODY$

declare

--变量宣称

begin

--过程函数实现逻辑

end;

$BODY$;

ALTER FUNCTION public.test_pipe_upstream_downstream_tracking(character varying,character varying,character varying,boolean,character varying) OWNER TO postgres;

基于上述方法创建过程函数,实现了管网常用功能:垂直净距分析、大管接小管分析、倒坡分析、覆土分析、横断面分析、开挖分析、上下游追踪分析、水平净距分析、连通性分析、纵断面分析。

执行各过程函数注册函数到Postgresql数据库。各函数位置如图3所示。各管网分析函数列表如图4所示,以test开头的函数。

图3 函数位置

图4 管网分析函数列表

(2)管网分析部分结果展示

①大管接小管分析函数入参为:当前管线表名,查询范围多边形。输出结果为:大管接小管连接点编号,大管管线编号,大管管径,大管材质,小管管线编号,小管管径,小管材质。如图5所示:

图5 大管接小管分析结果

②上下游追踪分析函数入参为:当前管线表名,当前管点表名,管线编号,上下游追踪标识(上游为true,下游为false),查询终止标识管点。输出结果为:管线编号数组。如图6所示:

图6 上下游追踪分析结果

③连通性分析函数入参为:管线表名,管线编号1,管线编号2。输出结果为:管线编号,管线水平投影长度。如图7所示:

图7 连通性分析结果

3 结 论

本文以地下管网分析应用为研究背景,深入研究了Postgresql数据库过程函数以及postgis空间数据库插件应用方式的基础上,开发常用管网分析过程函数,使用户通过简单的sql查询语句即可得到管网分析结果。从性能上而言,基于过程函数开发方式,可充分发挥开源Postgresql数据库自身高性能的数据检索特点,此管网分析服务相比传统后端开发管网分析功能查询效率更高。

猜你喜欢
插件管网管线
自编插件完善App Inventor与乐高机器人通信
管网独立是妥协还是改革
从管网独立看国企改革
管网改革虚实
织起一张共管网
夹套管线预制安装
浅谈通信管线工程建设
浅谈通信管线工程建设
基于jQUerY的自定义插件开发
MapWindowGIS插件机制及应用