PostGis空间(上):常见空间关联函数全解析

1、简介

接着PostGis入门的下一章节,我们来讲PostGis的空间关系,下面讲空间关系常用的函数以及他们的含义。 不了解PostGis的朋友可以看一下这篇文章:PostGIS入门指南:将PostgreSQL转变为强大的空间数据库

2、空间关系

2.1 ST_Equals

ST_Equals(几何 A,几何 B)测试两个几何的空间相等性。

  • 如果两个相同类型的几何具有相同的 x,y 坐标值,即如果第二个形状等于(相同)第一个形状,则 ST_Equals 返回 TRUE。 几何意义:
  • 空间相等性: 两个几何对象在空间上完全相等意味着它们覆盖相同的空间区域,并且几何形状完全一致。
  • 边界和内部: ST_Equals 不仅检查两个几何对象的形状,还检查它们的边界和内部是否完全相同。
  • 拓扑相等 : 这意味着两个几何对象即使在表示形式上有所不同(例如顶点顺序),只要它们覆盖相同的空间区域,也会被认为是相等的。

2.2 ST_Intersects、ST_Disjoint、ST_Crosses和ST_Overlaps

ST_IntersectsST_CrossesST_Overlaps 测试几何图形的内部是否相交。

2.2.1 ST_Intersects

ST_Intersects(几何 A,几何 B)返回 t (TRUE), 如果几何对象 A 和 B 之间有任何共同的空间部分。这意味着 A 和 B 之间的边界或内部有重叠或接触的部分。

2.2.2 ST_Disjoint

ST_Intersects 的反义词是 ST_Disjoint(几何 A , 几何 B)。返回 TRUE 如果几何对象 A 和 B 完全不相交,即没有任何重叠或接触。例如,如果两个多边形完全分开,没有任何公共点或边界,那么 ST_Disjoint 会返回 TRUE。

2.2.3 ST_Crosses

ST_Crosses(geometry A, geometry B) 返回 TRUE,如果两个几何对象相交,并且交集位于两个几何对象的内部,同时交集的维度比源几何对象的最大维度小1。 在理解 ST_Crosses 的定义时,重要的是要了解几何对象的维度:

  • 点:0 维
  • 线串:1 维
  • 多边形:2 维
  • 多面体:3 维

2.2.4 ST_Overlaps

ST_Overlaps (几何 A,几何 B)比较两个相同尺寸的几何,如果它们的交集导致几何不同但尺寸相同,则返回 TRUE。 ST_Overlaps(geometry A, geometry B) 返回 TRUE,如果以下条件同时满足:

  1. 几何对象 A 和 B 的维度相同。
  2. 几何对象 A 和 B 的交集是一个具有相同维度的几何对象。
  3. 几何对象 A 和 B 的交集部分导致一个新的几何对象,这个新的几何对象与 A 和 B 都不完全相同。
  4. 交集部分的几何尺寸与 A 和 B 相同。

2.3 ST_Touches

ST_Touches测试两个几何体是否在其边界处相交,但在其内部不相交

2.4 ST_Within和ST_Contains

T_WithinST_Contains测试一个几何图形是否完全位于另一个几何图形中。

2.4.1 ST_Within

ST_Within(geometry A , geometry B) 如果第一个几何图形完全位于第二个几何图形中,则返回 TRUE。ST_Within测试的结果与ST_Contains完全相反。

2.4.2 ST_Contains

ST_Contains(geometry A, geometry B) 如果第二个几何完全包含在第一个几何中,则返回 TRUE。

2.5 ST_Distance和ST_DWithin

一个非常常见的 GIS 问题是"查找其他东西距离 X 内的所有东西"。 ST_Distance(几何 A,几何 B)计算两个几何之间的最短距离,并将其作为浮点数返回。这对于实际报告对象之间的距离很有用。 为了测试两个对象是否在彼此的距离范围内,ST_DWithin 函数提供了索引加速的真/假测试。这对于诸如"道路 500 米缓冲区内有多少棵树"之类的问题很有用。您不必计算实际的缓冲区,只需测试距离关系即可。


PS:

大家好,我是小健,Java开发工程师一枚,我会持续发一些技术推文,偶尔也会发些工作求职,互联网热点的事情,希望各位小伙伴多多支持,如果觉得本篇文章对您有所帮助,记得点赞关注收藏喔~

相关推荐
煎饼小狗10 分钟前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
永乐春秋27 分钟前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
捂月29 分钟前
Spring Boot 深度解析:快速构建高效、现代化的 Web 应用程序
前端·spring boot·后端
瓜牛_gn1 小时前
依赖注入注解
java·后端·spring
打鱼又晒网1 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
大白要努力!1 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
Estar.Lee1 小时前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
喜欢猪猪1 小时前
Django:从入门到精通
后端·python·django
一个小坑货1 小时前
Cargo Rust 的包管理器
开发语言·后端·rust
bluebonnet271 小时前
【Rust练习】22.HashMap
开发语言·后端·rust