postgis ST_CoverageInvalidEdges使用说明

官方文档

函数说明

概要

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是把多边形集合无效(例如相交、重叠)的部分给依次列举出来。

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

  --新建表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.mzph.cn/news/119780.shtml

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

相关文章

【微信小程序】实现投票功能(附源码)

一、Vant Weapp介绍 Vant Weapp 是一个基于微信小程序的组件库,它提供了丰富的 UI 组件和交互功能,能够帮助开发者快速构建出现代化的小程序应用。Vant Weapp 的设计理念注重简洁、易用和高效,同时提供灵活的定制化选项,以满足开发…

知识付费系统的移动应用开发:跨平台和原生应用的比较

移动应用在知识付费系统中发挥着重要作用,为用户提供了便捷的访问方式。在开发知识付费系统的移动应用时,开发团队通常需要考虑使用跨平台开发工具或原生开发。本文将比较这两种方法,讨论它们的优点和缺点,并提供示例代码来说明它…

面向对象设计原则之接口隔离原则

目录 定义接口隔离原则与单一职责原则示例 定义 接口隔离原则,全称为 Interface Segregation Principle,缩写ISP。 原始定义:Clients should not be forced to depend upon interfaces that they don’t use。 翻译: 不应该强行…

k8s 部署nginx前端

1.构建docker镜像,k8s拉取镜像运行 ​​​​​​​docker自己安装 [rootmaster1 ~]# docker pull nginx:1.24.0 [rootmaster1 ~]# mkdir k8s-nginx [rootmaster1 ~]# cd k8s-nginx [rootmaster1 k8s-nginx]# vim nginx.conf server_tokens off;server {listen …

MVC架构_Qt自己的MV架构

文章目录 前言模型/视图编程1.先写模型2. 视图3. 委托 例子(Qt代码)例1 查询本机文件系统例2 标准模型项操作例3 自定义模型示例:军事武器模型例4 只读模型操作示例例5 选择模型操作例6 自 定 义委 托(在testSelectionModel上修改) 前言 在Qt中&#xf…

ROS自学笔记十五:URDF工具

要使用工具之前,首先需要安装,安装命令: sudo apt install liburdfdom-tools 1.check_urdf 语法检查 在ROS中,你可以使用.check_urdf命令行工具来对URDF(Unified Robot Description Format)文件进行语法检查和验证。…

Pytorch实现深度学习常见问题

RuntimeError: stack expects each tensor to be equal size, but got [3, 300, 300] at entry 0 and [3, 301, 301] at entry 24 这里的问题出现的原因肯定是在数据预处理处,如下图,当数据使用不同的transforms处理方式时,会导致数据的尺寸大…

使用docker部署flask接口服务 一

文章目录 一:说明二:dockerfile 参数说明1. 一般常用的 参数,以及它的含义2. 我自己的 dockerfile 三:示例操作1. Gunicorn Gevent启动服务的好处2. 用Gunicorn Gevent的好处:3. Gunicorn Gevent的 使用示例4. 创建…

ChatGPT 与 Python Echarts 完成热力图实例

热力图是一种数据可视化方式,它通过颜色的变化来表示数据的差异和分布。以下是使用热力图的一些作用和好处: 数据可视化:热力图可以将复杂的数据集转化为更直观、更易理解的形式。这对于很多人来说,尤其是那些没有深入统计学或数…

Golang Struct 继承的深入讨论和细节

1)结构体可以使用嵌套匿名结构体所有的字段和方法,即:首字母大写或者小写的字段、方法,都可以使用。 package mainimport "fmt"type A struct {Name stringage int }func (a *A) SayName() {fmt.Println("A say …

【软件测试】了解JUnit单元测试框架常用注解

目录 1、认识JUnit 2、Junit中常见的注解 1、Test 2、Disabled 3、BeforeAll和AfterAll 4、BeforeEach和AfterEach 5、 ParameterizedTest:参数化 6、order 3、断言 1、断言相等【Assertions.assertEquals(预期,比较值)】;相等测试通…

SpringBoot日志+SpringMVC+UUID重命名文件+Idea热部署

目录 【SpringBoot日志】 什么是日志,日志的作用 关于日志的基本信息,又有哪些呢? 关于日志的级别 Springboot内置SLF4J【门面模式】 和 logback【日志框架】 在配置文件中可以设置日志级别【以.yml为例】 SpringBoot 持久化的保存日…

Echarts 实现 设备运行状态图(甘特图) 工业大数据展示

let option{tooltip: {formatter: function (params) {let startTime new Date(params.value[1])let endTime new Date(params.value[2]);//北京时间/时间戳转成日常时间function convert(date){var y date.getFullYear();var m date.getMonth() 1;m m < 10 ? "0…

DBOW概要理解与记录

前言 DBOW作为一种视觉回环技术被广泛应用在各类VSLAM框架中&#xff0c;之前的经验主要集中在使用和抽象理解层面&#xff0c;近期花了一些时间仔细阅读了相关论文和源码&#xff0c;这里做一些记录。 两个关键概念 Vocabulary 通过预先训练得到的词汇库&#xff0c;以树状…

LeetCode217——存在重复元素

LeetCode217——存在重复元素 1.题目描述&#xff1a; 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 2.Result01(暴力解) public static boolean containsDuplicate(in…

在Go项目中封装AES加解密客户端接口

1.摘要 在一个中型以上的项目中, 我们一般会在项目工程中开辟一个pkg文件夹用来存放一些基础工具接口,比如:数据库、中间件、加解密算法、基础协议等等。在这篇文章中, 我主要分享一下在基于Go语言的项目中, 加解密算法中如何封装一个通用的加解密接口, 并以使用比较广泛的AES…

机器学习2(Numpy)

1、numpy ndarray 案例演示 可以在创建的时候就指定元素类型 生成0/1数组 从现有数组中生成 生成固定数组 生成随机数组

如何将 huggingface上的模型文件下载到本地

写在前面 缘由&#xff1a;国内的GPU服务器直接调取 huggingface 上模型经常会失败&#xff0c;因此下载到本地就能免去许多麻烦。 方法三基于知乎上一位博主所提出方法的基础上进行改进&#xff0c;可以将huggingface上模型由 Colab 存进 谷歌云盘 或者 百度云盘。特别是有些…

项目管理之如何有效定义项目目标

项目目标管理是项目管理中非常重要的一个环节&#xff0c;它可以帮助项目团队明确目标&#xff0c;制定合理可行的计划&#xff0c;确保项目顺利实施并取得成功。在定义项目目标时&#xff0c;需要遵循SMART原则&#xff0c;确保目标具体、明确、可衡量、可实现、相关且有时间和…

基于ssm的宠物医院管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…