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

相关推荐
Hello.Reader3 小时前
Redis 延迟监控深度指南
数据库·redis·缓存
ybq195133454313 小时前
Redis-主从复制-分布式系统
java·数据库·redis
好奇的菜鸟6 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
tan180°6 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
满昕欢喜7 小时前
SQL Server从入门到项目实践(超值版)读书笔记 20
数据库·sql·sqlserver
优创学社27 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
why技术7 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
幽络源小助理7 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
Hello.Reader8 小时前
Redis 延迟排查与优化全攻略
数据库·redis·缓存
ai小鬼头9 小时前
AIStarter如何助力用户与创作者?Stable Diffusion一键管理教程!
后端·架构·github