PostGIS空间数据库之空间数据融合实践

目录

前言

一、ST_Union()简介

1、方法说明       

2、参数介绍

二、ST_Collect()简介

1、方法说明

2、参数介绍

3、两者区别

三、实际案例实践

1、不重叠融合

2、空间重叠融合

总结


前言

        众所周知,熟悉GIS桌面软件的同学一定都知道,想要对空间中的两个或者多个地理数据进行融合,可以使用融合的工具。常见的桌面软件,比如ArcGIS或者QGIS、SuperMap等均有成熟的工具。以QGIS为例,可以使用工具包中的合并工具,如下所示:

         在日常的工作当中,可以采用这些工具进行数据的融合。只是这些数据操作通常需要人工进行干预,而且数据不能实时进行。比如有时候,我们已经将这些数据保存到了空间数据库PostGIS中,而用户可能会随机抽取一些空间数据进行动态的融合。

        应对上面的场景,我们就可以采用SQL查询的方式来满足。比如在实际需求中,需要将某几个城市的空间数据进行融合形成新的数据以供查询分析。而在进行数据融合的时候,通常我们可以选用PostGIS中的ST_Union()和ST_Collect()这两个函数。

        这两个函数乍一看几乎是一样的,其实两者还是有一些区别的,但是通过官网的介绍又不是特别清楚。因此本文采用实例的方式进行讲解,将ST_Union()和ST_Collect()这两个函数进行空间融合实战,我们通过实际的两个面的函数操作和实际场景融合,来看看两个函数的具体使用。

一、ST_Union()简介

         在PostGIS中,对于st_union函数的定义有以下的几个入参,我们来看一下定义:

         st_union函数的定义如下:

CREATE OR REPLACE FUNCTION "public"."st_union"("geom1" "public"."geometry", "geom2" "public"."geometry")RETURNS "public"."geometry" AS '$libdir/postgis-3', 'ST_Union'LANGUAGE c IMMUTABLE STRICTCOST 10000

1、方法说明       

         与Java的方法重载类似,st_union方法有5个重载。

序号方法
1st_union(geometry, geometry)
2st_union(geometry, geometry, float8)
3st_union(_geometry)
4st_union(geometry)
5st_union(geometry, float8)

2、参数介绍

        在上面的方法介绍中,geometry表示一个空间对象,float8的参数表示数据精度。注意,使用st_union函数进行运算之后,得到的结果是合并输入几何体,合并几何体以生成没有重叠的结果几何体。输出可以是原子几何图形、多重几何图形或几何图形集合。请一定注意这里合并的描述。

二、ST_Collect()简介

        首先来看在PostGIS数据库中对于st_collect()函数的定义。

st_collect函数的定义SQL如下:

CREATE OR REPLACE FUNCTION "public"."st_collect"("geom1" "public"."geometry", "geom2" "public"."geometry")RETURNS "public"."geometry" AS '$libdir/postgis-3', 'LWGEOM_collect'LANGUAGE c IMMUTABLECOST 50

1、方法说明

序号函数说明
1geometry ST_Collect(geometry g1, geometry g2);接受两个输入几何
2geometry ST_Collect(geometry[] g1_array);接受几何图形数组
3geometry ST_Collect(geometry set g1field);接受几何图形行集的聚合函数

2、参数介绍

        将几何图形收集(聚合)到几何图形集合中。结果是一个多*或一个GeometryCollection,这取决于输入几何的类型是相同的还是不同的(同构或异类)。输入几何图形在集合中保持不变。这里特别要注意的描述是聚合,与上面的函数相比,合并和聚合是两个概念。

3、两者区别

        如果单纯的从文字上讲,合并和聚合是一个近义词,表示两者的概念是差不多的。实际上两者的区别比较大,尤其是在空间运算中。可以用这句话来概括:ST_Collect将几何图形聚合到一个集合中,而不会以任何方式更改它们。ST_UNION以几何形式合并重叠的几何图形,并在交点处拆分线串。融合边界时,它可能会返回单个几何图形。

        简单来理解就是,使用st_collect进行运算,不会改变数据;而用st_union进行空间运算,会改变原有的数据。下面就进行实际的讲解。

三、实际案例实践

        在这里将采用面数据进行讲解,这里选择的面数据又分两种。第一种情况是空间不重叠融合,第二种是空间重叠融合,通过实际的例子来看一下在不同的空间关系中,两个函数的融合结果是什么样的。

1、不重叠融合

        空间不重叠融合中,我们采用保存在PostGIS数据库中的城市信息进行实例开展,对长株潭三个城市进行融合。

         biz_city的表数据如下所示:

 st_union融合sql:

select st_asgeojson(st_union(geom)) from biz_city where city_name in ('长沙市','株洲市','湘潭市');

查询结果如下:

 来看QGIS的结果:

        通过上图可以看出,使用st_union之后,三个城市已经完全融合,从而形成了一个全新的数据。下面再来看看st_collect函数的运行效果。

select st_asgeojson(st_collect(geom)) from biz_city where city_name in ('长沙市','株洲市','湘潭市');

        来看一下在QGIS中的展示结果:

        从总体来看,虽然长株潭三个城市同样合成了,但是三个城市的边界还是存在的,并没有进行融合。而在geojson的type中明确了两个的区别。

         结论:在空间不重叠的情况下,使用st_union和st_collect的合并结果虽然不大,但是对于数据是否改变来说,影响还是很大的。

2、空间重叠融合

 首先我们准备两份空间上重叠的数据,我们可以采用一下的模拟数据进行展示。

A B 图作为测试图形,用来验证这些函数的使用
-- A 图
select ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[120.52757263183594,31.495432803134843],[120.59211730957031,31.31199502365151],[120.89012145996094,31.35950051982242],[120.74729919466666,31.483245492650792],[120.52757263183594,31.495432803134843]]]}')-- B 图
select ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[120.74386596679688,31.487235582017444],[120.84548950195312,31.269747790889888],[121.01783752441405,31.378261512889125],[120.91827392578125,31.487821121636433],[120.74386596679688,31.487235582017444]]]}')

        将上述两个空间数据转成geojson,在QGIS中展示如下,首先是A图

         下面是B图:

         将两者空间叠加后,可以看到空间关系:

 st_union融合语句:

-- ST_Union在几何形状重叠的地方对其进行几何合并,并在相交处拆分线串。溶解边界时,它可能会返回单个几何。
select ST_Union (
ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[120.52757263183594,31.495432803134843],[120.59211730957031,31.31199502365151],[120.89012145996094,31.35950051982242],[120.52757263183594,31.495432803134843]]]}'),
ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[120.74386596679688,31.487235582017444],[120.84548950195312,31.269747790889888],[121.01783752441405,31.378261512889125],[120.91827392578125,31.487821121636433],[120.74386596679688,31.487235582017444]]]}')
)

st_collect融合语句:

--  ST_Collect将几何形状聚合到一个集合中,而无需进行任何更改。 
select ST_Collect (ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[120.52757263183594,31.495432803134843],[120.59211730957031,31.31199502365151],[120.89012145996094,31.35950051982242],[120.74729919466666,31.483245492650792],[120.52757263183594,31.495432803134843]]]}'),ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[120.74386596679688,31.487235582017444],[120.84548950195312,31.269747790889888],[121.01783752441405,31.378261512889125],[120.91827392578125,31.487821121636433],[120.74386596679688,31.487235582017444]]]}')
)

         通过实验,同样可以得到上面的结论,使用st_collect对于原来的空间数据没有什么改变,而st_untion对数据的改变很大。

        所以,到了这里一定要深深的理解合并和聚合的区别。在实际项目过程中,根据需要进行合理的选择。

总结

        以上就是本文的主要内容,本文采用实例的方式进行讲解,将ST_Union()和ST_Collect()这两个函数进行空间融合实战,我们通过实际的两个面的函数操作和实际场景融合,希望通过实战的方式让你了解两者的区别,在具体使用空间函数的时候给予充分的评估和参考。行文仓促,不免有错误,欢迎朋友进行批评指正交流。

本文部分参考博文,原文地址:postgis函数知识积累

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

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

相关文章

使用goland IDE编写go windows ui

最近突发奇想,想实现一款工作节奏的提示安排小闹钟。那首先解决的就是UI。本人擅长go语言。那go在windows ui的探索肯定有人做过了吧。一查还真有,通过知乎,csdn等查到目前支持最好的就是walk库了。那走起试试。 一、拷贝go代码 将官网例子…

WiFi 7 的核心要点

目录 WiFi 7 是什么? WiFi 7 的主要feature功能: 320Mhz channel 4K QAM Multi-Link Operation (MLO),多链路操作 512 block ACK OFDMA:multiple RUs to single STA. 总结:性能是第一优先级,WiFi 7&#xf…

Multi ElasticSearch Head插件基本操作

Multi ElasticSearch Head插件安装好之后我们可以进行一些基本的操作。 1、复合查询 因为ES提供了一些Restful风格的接口,可以让任何语言去调用,因此我们可以将之前的请求地址粘贴到Multi ElasticSearch Head插件里面,选择GET请求方式&#x…

RIP——路由信息协议

目录 1 内部网关协议 RIP 1.1 协议 RIP 的工作原理 1.2 RIP“距离”的定义 1.3 RIP 协议的三个特点 1.4 RIP 协议的优缺点 1.5 路由表的建立 路由表主要信息和更新规则 2 距离向量算法 3 RIP2 报文 4 坏消息传播得慢 5 启动RIP 启动RIP: router rip 命令 启用和检…

Elasticsearch:Geoshape query

Geoshape 查询可以用于过滤使用 geo_shape 或 geo_point 类型索引的文档。 geo_shape 查询使用与 geo_shape 或 geo_point 映射相同的索引来查找具有与查询形状相关的形状的文档,并使用指定的空间关系:相交(intersect)、包含(con…

Git介绍与常用命令总结

Git介绍与其常用命令总结 1、Git介绍2、Git的使用3、Git常用命令3.1 初始化仓库3.2 克隆仓库3.3 配置用户信息3.4 提交代码(Commit)3.5 推送代码(Push)3.6 拉取代码(Pull)3.7 分支(Branch)3.8 远程仓库(Remote)3.9 撤销回退本地改动3.10 更新本地仓库与远程仓库 1、Git介绍 Gi…

AI Prompt工程师 学习整理

前言 如果说Al大语言模型(LLM,Large Language Model)是宝藏我,那么Prompt提示词就是打开宝藏的钥匙。 最新一代的Al大语言模型具备出色的创作能力,能够生成富有人类感情、严谨逻辑、多场景应用的内容,而如何获得高质量的回答,正确学习使用Prompt提示词是关键。 &#x1f4a5…

【2024美国大学生数学建模竞赛】2024美赛C题网球运动中的势头,网球教练4.0没人比我更懂这个题了!!!

【2023美国大学生数学建模竞赛】2024美赛C题 问题分析、数学模型、实现代码、完整论文 引言 题目将于2024年2月2日6:00发布。我们团队将会在8点前准时更新问题分析,逐步更新数学模型和实现代码,最后发布完整的论文。 更新进展: &#xff08…

轻型民用无人机驾驶航空器安全操控——理论考试多旋翼部分笔记

今天已经可以在线考取轻型民用无人机驾驶航空器执照了,所以我也在在线观看完视频之后整理了如下的知识点,所有知识点全部来自UOM平台。 目录 航空器知识 (1)多旋翼民用无人驾驶航空器螺旋桨的作用 (2&#x…

Servlet简述

Servlet是动态web资源开发技术,其实就是一个接口,将来定义Servlet实现类时,都必须实现该接口,并让web服务器运行Servlet 1.快速入门 使用注释配置访问路径在Servlet3.0之后应用,在此之前都是使用xml配置文件来配置的。…

WPS WORD 宏导出高亮文本

WPS手机版可以直接导出高亮文本,但只能导出手机编辑的部分,如果同时在电脑上编辑过,电脑上高亮的无法导出,因为作者不一样。 但WPS电脑版没有这个功能,只能通过宏编程实现。 这里利用了审阅模式,在文字高亮…

springBoot+Vue汽车销售源码

源码描述: 汽车销售管理系统源码基于spring boot以及Vue开发。 针对汽车销售提供客户信息、车辆信息、订单信息、销售人员管理、 财务报表等功能,提供经理和销售两种角色进行管理。 技术架构: idea(推荐)、jdk1.8、mysql5.X(不能为8驱动不匹配)、ma…

重温《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)》 –– 学习笔记(二)

第二部分:自动内存管理机制 第2章:Java内存区域与内存溢出异常 2.1 概述 Java 与 C 之间有一堵由内存动态分配和垃圾收集技术围成的高墙。 Java 程序员在 虚拟机自动内存管理机制 的帮助下,无需为每一个 new 操作去写配对的 delete/free …

Java知识点总结

数据类型强转:byte short int long float double ; 数组定义 [ ]数组名 clone-复制数组equals-比较存储地址 toString sort-排序 length-长度 arraycopy([]a,s,[]b,ss,n)-数组复制 运算符及语句 instanceof双目运算符 –左对象右类 判断是否是该类创建…

2024年美国大学生数学建模C题思路分析 - 网球的动量

# 1 赛题 问题C:网球的动量 在2023年温布尔登绅士队的决赛中,20岁的西班牙新星卡洛斯阿尔卡拉兹击败了36岁的诺瓦克德约科维奇。这是德约科维奇自2013年以来首次在温布尔登公开赛失利,并结束了他在大满贯赛事中历史上最伟大的球员之一的非凡…

JeecgBoot jmreport/loadTableData RCE漏洞复现(CVE-2023-41544)

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

three.js CSS2DRenderer、CSS2DObject渲染HTML标签

有空的老铁关注一下我的抖音&#xff1a; 效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red;position: relative;"><…

OSPF 协议

OSPF 开放式最短路径优先协议 形容&#xff1a; 无类别链路状态协议&#xff1a; 无类别 ---- 存在掩码 IGP 内部网关协议 动态路由协议 一、链路状态协议(LS) OSPF 协议 隶属于 链路状态协议。 区别&#xff1a; 距离矢量协议(DV)&#xff1a;运行距离矢量协议的路由器…

Docker 镜像的创建

创建镜像有三种方法&#xff0c;分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。 一、基于现有镜像创建 创建nginx镜像&#xff1a; 1、首先启动一个容器&#xff0c;在容器里做修改 2、然后将修改后的容器提交为新的镜像&#xff0c;需要使用该容器的 I…

Vue3中实现歌词滚动显示效果

目录 &#x1f389;前言 &#x1f389;整体布局 &#x1f389;处理歌词数据 &#x1f389;处理事件 &#x1f389;完整代码 &#x1f389;总结 &#x1f389;前言 在这篇博客中&#xff0c;我将分享如何在 Vue 3 中实现一个简单的歌词滚动效果。我将从歌词数据的处理开始&…