postgis ST_CoverageInvalidEdges用法

news/2024/7/9 19:58:31 标签: postgresql

官方文档

概要

geometry ST_CoverageInvalidEdges(geometry winset geom, float8 tolerance = 0);

描述

一个窗口函数,用于检查窗口分区中的多边形是否形成有效的多边形覆盖范围。 它返回线性指示器,显示每个多边形中无效边(如果有)的位置。

如果满足以下条件,则一组有效多边形是有效的覆盖范围:

  • Non-overlapping-多边形不重叠(它们的内部不相交)

  • Edge-Matched-沿共享边的顶点相同

作为窗口函数,为每个输入多边形返回一个值。 对于违反一个或多个有效性条件的多边形,返回值是包含有问题边的 MULTILINESTRING。 覆盖范围有效的面返回值 NULL。 非多边形或空几何图形也会产生 NULL 值。

只要周围的多边形边缘匹配,这些条件就允许有效的覆盖范围包含孔(多边形之间的间隙)。 然而,非常窄的间隙通常是不希望的。 如果使用非零距离指定公差参数,则形成较窄间隙的边缘也将被返回为无效。

正在检查覆盖范围有效性的多边形也必须是有效的几何图形。 这可以使用ST_IsValid 进行检查。

可用性:3.4.0

需要GEOS >= 3.12.0

由重叠和不匹配顶点引起的无效边

WITH coverage(id, geom) AS (VALUES
  (1, 'POLYGON ((10 190, 30 160, 40 110, 100 70, 120 10, 10 10, 10 190))'::geometry),
  (2, 'POLYGON ((100 190, 10 190, 30 160, 40 110, 50 80, 74 110.5, 100 130, 140 120, 140 160, 100 190))'::geometry),
  (3, 'POLYGON ((140 190, 190 190, 190 80, 140 80, 140 190))'::geometry),
  (4, 'POLYGON ((180 40, 120 10, 100 70, 140 80, 190 80, 180 40))'::geometry)
)
SELECT id, ST_AsText(ST_CoverageInvalidEdges(geom) OVER ())
  FROM coverage;

 id |               st_astext
----+---------------------------------------
  1 | LINESTRING (40 110, 100 70)
  2 | MULTILINESTRING ((100 130, 140 120, 140 160, 100 190), (40 110, 50 80, 74 110.5))
  3 | LINESTRING (140 80, 140 190)
  4 | null

解析:

这个方法有2个功能。

  • 1、检测多边形集合是否有效。
  • 2、把多边形集合无效(例如相交、重叠)的部分给依次列举出来。

返回值

  • 1、返回几何对象
  • 2、返回NULL(没有相交) 

我把数据插入到表中。因为最终使用都会在表中使用。

  --新建表
  create table t2(
	id serial primary key,
	geom geometry(POLYGON,4326)
  )
  --插入数据
  insert into t2 values
  (1, 'POLYGON ((10 190, 30 160, 40 110, 100 70, 120 10, 10 10, 10 190))'::geometry),
  (2, 'POLYGON ((100 190, 10 190, 30 160, 40 110, 50 80, 74 110.5, 100 130, 140 120, 140 160, 100 190))'::geometry),
  (3, 'POLYGON ((140 190, 190 190, 190 80, 140 80, 140 190))'::geometry),
  (4, 'POLYGON ((180 40, 120 10, 100 70, 140 80, 190 80, 180 40))'::geometry)

我把示例中的4条数据插入到了数据库,下图是4条数据的集合。

举例说明

数据可视化

你会发现,有些多边形有重叠的部分,我们把数据在详细展开。拿id=1和id=2为例。

数据分析

通过数据可视化我们发现,id=1和id=2的数据有相交的,对于多边形数组来说是无效的。

则一组有效多边形是有效的覆盖范围:

  • Non-overlapping-多边形不重叠(它们的内部不相交)

  • Edge-Matched-沿共享边的顶点相同

 相交抛分

通过查询,我们可以得到id=1和id=2相交的部分。

  select id,geom,ST_AsText(ST_CoverageInvalidEdges(geom) OVER ()),
  ST_GeomFromText(ST_AsText(ST_CoverageInvalidEdges(geom) OVER ()),4326)
  from t2 where id=1 or id=2

  • 图1是第1条数据相交部分
  • 图2是第2条数据相交部分

 如果数据集合没有相交,则会返回NULL。见下图。

 id=4的数据与前面2条数据不相交,所以通过函数返回NULL。

场景

本函数适用于校验多边形是否有效,并返回错误的几何的位置,有助于去辨别修改。

ST_IsValid函数只是判定是否有效,且不能鉴别定位。


http://www.niftyadmin.cn/n/5128005.html

相关文章

以技术创新“谋局”,洗碗机市场的风向变了

在知乎、小红书等知识社区上,时常可以看到一些有趣的“种草”帖:扫地机器人和洗碗机,被并称为“解放人类双手的家电产品”。 特别是洗碗机的话题下,不少对清洁、节能、烘干、容量等卖点进行详尽阐述的科普文章,动辄就…

傅里叶在图像中的应用FFT算法---fft实战应用案例

https://www.zhihu.com/question/20460630 电子衍射其实就是物质的实空间FFT变换后的倒易空间,在垂直于电子束方向的投影(因为CCD相机捕捉到的是二维平面,一般宏观物质和其倒易空间是三维的) 傅里叶变换有哪些具体的应用&#xff…

ESP32网络开发实例-HTTP-POST请求

HTTP-POST请求 文章目录 HTTP-POST请求1、HTTP POST2、软件准备3、硬件准备4、代码实现在本文中,我们将介绍如何使用 ESP32向 ThingSpeak等常用 API 发出 HTTP POST 请求。 1、HTTP POST 超文本传输协议 (HTTP) 用作服务器和客户端之间的请求-响应协议。 它使它们之间的通信顺…

Windows平台下将exe及其dll封包到新的exe

Windows平台下将exe及其dll封包到新的exe 〇、项目需求一、生成 exe二、通过 Dependencies 寻找所需dll三、将所需 dll 复制到 exe 同级目录下3.1 通过 python 脚本自动处理3.2 使用 Everthing 搜索特定dll3.3 验证 dll 是否完备 四、使用 Enigma Virtual Box 对 dll 和 exe 进…

解决node项目一个极度困难的捕获异常却无法读取异常信息的问题

这个项目是集成了第三方NeteaseCloudMusicApi项目的接口代码,我没有直接使用它的接口,因为需要再跑一个npm run开个端口,感觉很麻烦。 所以下定决心,使用拆分代码的方式,硬生生将这个api项目的部分api接口代码集成到了…

内存-虚拟地址到物理内存地址转换

虚拟地址的位数 [rootnew ~]# cat /proc/cpuinfo | grep virtu | tail -1 address sizes : 46 bits physical, 48 bits virtual 高性能C之虚拟内存_哔哩哔哩_bilibili 第零层,每一项是4KB 512个4KB是2MB,第一层,每一项是1GB 512个2MB是…

66 内网安全-域横向批量atschtasksimpacket

目录 演示案例:横向渗透明文传递at&schtasks 案例2-横向渗透明文HASH传递atexec-impacket案例3-横向渗透明文HASH传递批量利用-综合案例5-探针主机域控架构服务操作演示 传递攻击是建立在明文和hash值的一个获取基础上的攻击,也是在内网里面常见协议的攻击&…

使用 @antfu/eslint-config 配置 eslint (包含兼容uniapp方法)

安装 pnpm i -D eslint antfu/eslint-config创建 eslint.config.js 文件 // 如果没有在 page.json 配置 "type": "module" const antfu require(antfu/eslint-config).default module.exports antfu()// 配置了 "type": "module" …