PostGis空间(下):空间连接与空间索引

news2024/11/25 3:01:05

在这里插入图片描述

目录

  • 1、简介
  • 2、空间连接
  • 3、空间索引
    • 3.1 索引操作
    • 3.2 空间索引的工作原理
      • 3.2.1 R-Tree
    • 3.3 空间索引函数
    • 3.4 仅索引查询
    • 3.5 ANALYZE
    • 3.6 VACUUMing
    • 3.7 函数列表
  • PS


1024到啦!!!
先祝各位程序员或者想成为程序员正在奋斗中的伙伴1024程序员节快乐~
我也是今年应届毕业成为了JavaCoder的一员哈,属于程序员小新秀,祝我们技术高涨,薪资高涨,头发不减!!!

1、简介

这篇文章紧接着上一篇的PostGis--空间(上)
还没看过朋友可以先看这两篇文章:
PostGIS–介绍
PostGis–空间(上)
PostGIS的空间连接和空间索引技术是高效处理地理数据的关键。空间连接利用ST_Intersects、ST_Contains等函数实现复杂的空间关系查询。空间索引,特别是R-Tree结构,大幅提升了大规模空间数据的查询效率。空间索引的创建、维护和优化方法,包括ANALYZE和VACUUM操作,为构建高性能地理信息系统提供了实用指南。这些技术的掌握对于优化空间数据库性能和进行复杂空间分析至关重要。

2、空间连接

任何在两个表之间提供真/假关系的函数都可用于驱动空间联接,但最常用的函数是:ST_IntersectsST_ContainsST_DWithin

  • ST_Contains(几何 A,几何 B):当且仅当 B 的点不在 A 的外部,并且 B 的内部至少有一个点位于 A 的内部时,返回 true。
  • ST_DWithin(geometry A, geometry B, radius):如果几何体彼此之间的距离在指定的距离内,则返回 true。
  • ST_Intersects(geometry A, geometry B):如果几何/地理“在空间上相交”,则返回 TRUE(共享空间的任何部分),如果它们不相交(它们不相交),则返回 FALSE。
  • round(v numeric, s integer):四舍五入到小数点后 s 位的 PostgreSQL 数学函数
  • strpos(string, substring):PostgreSQL 字符串函数,返回指定子字符串的整数位置。
  • sum(expression):PostgreSQL 聚合函数,返回一组记录中的记录总和。

3、空间索引

空间索引是空间数据库的三个关键特征之一。索引使使用空间数据库作为大型数据集成为可能。如果没有索引,任何对要素的搜索都需要对数据库中的每条记录进行“顺序扫描”。索引通过将数据组织到搜索树中来加快搜索速度,该搜索树可以快速遍历以查找特定记录。
空间索引是PostGIS最大的资产之一。在前面的示例中,构建空间联接需要将整个表相互比较。这可能会变得非常昂贵:连接两个表,每个表有 10,000 条记录,而没有索引,需要 100,000,000 次比较;使用索引,成本可能低至 20,000 次比较。

3.1 索引操作

-- 删除索引
DROP INDEX nyc_census_blocks_geom_idx;

-- 创建索引
-- 该子句告诉 PostgreSQL 在构建索引时使用通用索引结构 (GIST)。
-- 如果在创建索引时收到类似此类的错误,则可能忽略了添加该子句。
-- USING GISTERROR: index row requires 11340 bytes, maximum size is 8191USING GIST
CREATE INDEX nyc_census_blocks_geom_idx
  ON nyc_census_blocks
  USING GIST (geom);

3.2 空间索引的工作原理

标准数据库索引根据要编制索引的列的值创建分层树。空间索引略有不同,它们无法对几何要素本身进行索引,而是对要素的边界框进行索引。
在这里插入图片描述

在上图中,与黄色星星相交的线数是一条,即红线。但是与黄色框相交的特征边界框两个,即红色和蓝色。

3.2.1 R-Tree

R树是B树向多维空间发展的另一种形式,它将对象空间按范围划分,每个结点都对应一个区域和一个磁盘页,非叶结点的磁盘页中存储其所有子结点的区域范围,非叶结点的 所有子结点的区域都落在它的区域范围之内;叶结点的磁盘页中存储其区域范围之内的所有空间对象的外接矩形。R树是一种动态索引结构
在这里插入图片描述

3.3 空间索引函数

  1. ST_Intersects:
    ○ 判断两个几何图形是否相交。如果两个图形有任何共享点(包括边界和内部),此函数返回真(true)。
  2. ST_Contains:
    ○ 检查第一个几何图形是否完全包含第二个几何图形。如果第二个图形的所有点都在第一个图形的内部,返回真。
  3. ST_Within:
    ○ 检查第一个几何图形是否完全位于第二个几何图形内部。这是ST_Contains的逆操作。
  4. ST_DWithin:
    ○ 判断两个几何图形之间的距离是否在指定的距离之内。这对于找出“近”某个点或图形的其他点或图形特别有用。
  5. ST_ContainsProperly:
    ○ 类似于ST_Contains,但更严格。它返回真只在第一个几何完全包含第二个,并且二者不仅是接触边界。
  6. ST_CoveredBy:
    ○ 判断第一个几何图形是否被第二个几何图形覆盖。如果第一个图形的所有点都在第二个图形中,或者在其边界上,返回真。
  7. ST_Covers:
    ○ 检查第一个几何图形是否覆盖第二个几何图形。这是ST_CoveredBy的逆操作。
  8. ST_Overlaps:
    ○ 检查两个几何图形是否在两者都不被对方完全包含的情况下共享一些部分区域。
  9. ST_Crosses:
    ○ 判断两个几何图形是否在内部相交,但不完全包含对方。这通常用于不同维度的图形,例如线与多边形。
  10. ST_DFullyWithin:
    ○ 类似于ST_DWithin,但要求两个几何体之间的每个点的距离都必须在指定距离之内。
  11. ST_3DIntersects:
    ○ 在三维空间中检查两个几何体是否相交。
  12. ST_3DDWithin:
    ○ 在三维空间中,检查两个几何体之间的距离是否在指定的距离内。
  13. ST_3DDFullyWithin:
    ○ 在三维空间中,这是ST_DFullyWithin的一个版本,确保所有点的距离都在给定距离之内。
  14. ST_LineCrossingDirection:
    ○ 确定两条线的交叉方向。这个函数返回一个整数,表明线是如何相交的(比如从左到右,从右到左等)。
  15. ST_OrderingEquals:
    ○ 如果两个几何图形在空间中的点序列完全一致,则返回真。这常用于检查两个几何图形是否完全相同。
  16. ST_Equals:
    ○ 检查两个几何图形是否在空间上等同,忽略点的顺序。

3.4 仅索引查询

PostGIS 中大多数常用函数(ST_Contains、ST_Intersects、ST_DWithin 等)都自动包含索引过滤器。但某些函数(例如,ST_Relate)不包括索引筛选器。
要使用索引(不过滤)进行边界框搜索,请使用 && 运算符。对于几何图形,&&运算符表示“边界框重叠或接触”,就像对于数字,=运算符表示“值相同”。

3.5 ANALYZE

在这里插入图片描述

-- 用于收集有关指定表的统计信息,这里的表名为 nyc_census_blocks。
-- 这些统计信息主要用于优化查询计划器的决策过程,从而提高查询效率。
ANALYZE nyc_census_blocks;

作用
收集统计数据
优化查询性能
自动和手动触发

重要性
查询计划的准确性
处理数据倾斜
维护和自动化

在数据库维护中,ANALYZE 是一个重要的工具,它可以被集成到定期维护脚本中,
以自动化这一过程,确保数据库性能的持续优化。
总结来说,ANALYZE nyc_census_blocks; 是一个关键的数据库维护命令,
用于确保查询性能通过准确和及时的统计数据得到优化。
这对于维护查询响应时间和整体数据库性能至关重要。

3.6 VACUUMing

仅仅创建一个索引并不足以让PostgreSQL有效地使用它。每当对表发出大量 UPDATE、INSERT 或 DELETE 时,都必须执行 VACUUMing。该命令要求 PostgreSQL 回收表页中因更新或删除记录而留下的任何未使用空间。

VACUUM可以根据需要单独执行数据库的清空和分析。发出命令不会更新数据库统计信息;同样,发出命令也不会恢复未使用的表行。这两个命令都可以针对整个数据库、单个表或单个列运行。

VACUUM ANALYZE nyc_census_blocks;
  1. VACUUM:
    功能: VACUUM 操作用于回收数据库表中的空闲空间,这个空间是由于数据删除和更新操作留下的。这不仅有助于释放存储空间,还可以避免表内部碎片化,从而提高数据库查询的效率。
    细节: PostgreSQL 中的事务性特性意味着,当数据被删除或更新时,旧的数据版本并不会立即从物理存储中移除。这样做是为了支持并发控制和事务回滚。VACUUM 正是用来清理这些不再需要的数据版本的。
  2. ANALYZE:
    功能: ANALYZE 操作用于更新表的统计信息,这些信息对于数据库优化器(Planner/Optimizer)选择最佳执行计划至关重要。统计信息包括数据的分布情况、列值的频率等。
    细节: 数据库优化器使用这些统计信息来评估不同查询操作的成本,如何高效地执行查询(例如,决定使用哪种类型的索引,是否执行表连接等)。如果统计信息不准确,可能导致数据库选择了非最优的执行计划,影响查询性能。

3.7 函数列表

geometry_a && geometry_b:如果 A 的边界框与 B 的边界框重叠,则返回 TRUE。
geometry_a = geometry_b:如果 A 的边界框与 B 的边界框相同,则返回 TRUE。
ST_Intersects(geometry_a, geometry_b):如果几何/地理“在空间上相交”(共享空间的任何部分),则返回 TRUE,如果它们不相交(它们不相交),则返回 FALSE。


PS

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

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

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

相关文章

pdf免费压缩软件 pdf文件压缩免费软件 软件工具方法

pdf文件压缩免费软件?对于提升日常工作效率至关重要。在繁忙的工作流程中,寻找一种既高效又合适的压缩策略显得尤为重要。那么,我们该如何优化工作流程呢?在职场中,良好的开端是制定一套清晰的工作方案。只有明确了目标…

Konva 组,层级

代码&#xff1a; <template><div class"rect"><div class"header"> <!-- <el-button type"primary" click"show">展示</el-button>--> <!-- <el-button type"success&quo…

算法设计与分析——动态规划

1.动态规划基础 1.1动态规划的基本思想 动态规划建立在最优原则的基础上&#xff0c;在每一步决策上列出可能的局部解&#xff0c;按某些条件舍弃不能得到最优解的局部解&#xff0c;通过逐层筛选减少计算量。每一步都经过筛选&#xff0c;以每一步的最优性来保证全局的最优性…

UniHttp 框架,请求http接口

项目案例下载地址: https://download.csdn.net/download/jinhuding/89902024 1.快速开始 2.1引入依赖 <dependency><groupId>io.github.burukeyou</groupId><artifactId>uniapi-http

react18中使用redux管理公共数据仓库实现数据immutable更新

Immutable.js出自Facebook&#xff0c;是最流行的不可变数据结构的实现之一。它实现了完全的持久化数据结构&#xff0c;使用结构共享。所有的更新操作都会返回新的值&#xff0c;但是在内部结构是共享的&#xff0c;来减少内存占用。Immutablejs官网 在上一篇介绍redux的文章&…

Docker 部署 JDK11 图文并茂简单易懂

部署 JDK11 ( Docker ) [Step 1] : 下载JDK11 - JDK 11 | Oracle 甲骨文官网 [Step 2] : jdk11上传服务器/root/jdk11 可自行创建文件夹 进入目录 /root/jdk11 解压文件 tar -zxvf jdk-11.0.22_linux-x64_bin.tar.gz解压后 进入 /root/jdk11/jdk-11.0.22 创建 jre 文件 ./bi…

基于RK3588/算能BM1684 AI盒子:综合视频智能AI分析系统建设方案(三)安全帽、睡岗检测、电瓶车、吸烟场景

安全帽反光衣检测算法 功能说明 安全帽反光衣检测是指在监控场景中预先设定监测区域&#xff0c;在区域内人员没有穿戴安全帽反光衣的现象&#xff0c;及时触发告警。检测目标在1080p图像中的分辨率大小不小于30*30像素。 推荐场景 场景要求&#xff1a;可室内外使用&#x…

VS无法安装Win10SDK_10.0.2200,快捷方法

Visual Studio无法安装Win10SDK_10.0.2200&#xff0c;我在安装VS2019、2022提示&#xff0c;软件就不能编译。 因为之前安装过VS软件&#xff0c;重新安装软件提示“无法安装”。 原因 之前安装在D盘&#xff0c;现在没有D盘了 说明 因为电脑第一次安装VS&#xff0c;会自动安…

安全见闻---清风

注&#xff1a;本文章源于泷羽SEC&#xff0c;如有侵权请联系我&#xff0c;违规必删 学习请认准泷羽SEC学习视频:https://space.bilibili.com/350329294 安全见闻1 泷哥语录&#xff1a;安全领域什么都有&#xff0c;不要被表象所迷惑&#xff0c;无论技术也好还是其他方面…

Python爬虫教程:从入门到精通

Python爬虫教程&#xff1a;从入门到精通 前言 在信息爆炸的时代&#xff0c;数据是最宝贵的资源之一。Python作为一种简洁而强大的编程语言&#xff0c;因其丰富的库和框架&#xff0c;成为了数据爬取的首选工具。本文将带您深入了解Python爬虫的基本概念、实用技巧以及应用…

若依RuoYi-Vue 定时任务 速学

1.若依定时任务模块&#xff08;ruoyi-quartz&#xff09; 那么从一个简单的入门示例开始&#xff0c;掌握定时任务的使用吧&#xff01; 2. 入门示例&#xff08;学会制作一个简单定时任务&#xff09; 首先打开定时任务模块中的task包&#xff0c;这里已经有一个已经写好的R…

51单片机——OLED显示图片

取模软件&#xff1a;链接:https://pan.baidu.com/s/1UcrbS7nU4bsawNxsaaULfQ 提取码:gclc 1、如果图片大小和格式不合适&#xff0c;可以先用Img2Lcd软件进行调整图片大小&#xff0c;一般取模软件使用的是.bmp图片&#xff0c;可以进行输出.bmp格式。软件界面如下&#xff1…

【Javaee】网络原理—TCP协议的核心机制

前言 TCP/IP五层协议是互联网中的主流模型&#xff0c;为网络通信提供了一个稳固的框架。 主要包含了应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层。 本篇主要介绍传输层的TCP协议的核心机制 一. 确认应答&#xff08;ack&#xf…

ESP32-S3学习笔记:常用的ESP-IDF命令总结

参考资料&#xff1a;1.esptool.py工具 2.idf.py工具 后续文章的讲解需要用到IDF命令行工具&#xff0c;当前文章简单介绍一下。 目录 打开命令行的小技巧 一、读flash信息 二、擦除flash 三、读flash数据 四、写flash数据 打开命令行的小技巧 大家安装完IDF开发包后…

关于小程序审核需要提交订单列表页面path的修改办法

小程序又又又又又搞事情啦&#xff5e;&#xff5e;&#xff5e; 从12月31号起&#xff0c;所有有订单生成逻辑的小程序在审核过程中&#xff0c;必须要填写订单列表页面的path才可以进行审核 在代码层面上会有一些小的改动&#xff0c;下面就告诉大家怎么去修改吧。 第一步…

算法笔记day07

目录 1.最长回文子串 2.买卖股票的最好时机(一) 3.过河卒 1.最长回文子串 最长回文子串_牛客题霸_牛客网 算法思路&#xff1a; 使用中心扩散算法&#xff0c;枚举所有的中点&#xff0c;向两边扩散&#xff0c;一个中点需要枚举两次&#xff0c;一次当回文串是奇数另一次回…

SpringBoot实现 License 认证(只校验有效期)

文章目录 一、License介绍二、授权者生成密钥对三、授权者生成license.lic证书3.1、 配置pom.xml3.2 、License生成类3.3 、License生成类需要的参数类3.4、自定义KeyStoreParam3.5、main方法生成license.lic注意事项 四、使用者配置4.1、配置pom.xml4.2、License校验类4.3、Li…

论文速读:YOLO-G,用于跨域目标检测的改进YOLO(Plos One 2023)

原文标题&#xff1a;YOLO-G: Improved YOLO for cross-domain object detection 中文标题&#xff1a;YOLO-G&#xff1a;用于跨域目标检测的改进YOLO 论文地址&#xff1a; 百度网盘 请输入提取码 提取码&#xff1a;z8h7 代码地址&#xff1a; GitHub - airy975924806/yolo…

ArkUI自定义TabBar组件

在ArkUI中的Tabs&#xff0c;通过页签进行内容视图切换的容器组件&#xff0c;每个页签对应一个内容视图。其中内容是图TabContent作为Tabs的自组件&#xff0c;通过给TabContent设置tabBar属性来自定义导航栏样式。现在我们就根据UI设计的效果图来实现下图效果&#xff1a; 根…

打包方式-jar和war的区别

1、jar包 JAR包是类的归档文件&#xff0c;与平台无关的文件格式&#xff0c;其实jar包就是java的类进行编译生成的class文件进行打包的压缩包。 JAR以ZIP文件格式为基础&#xff0c;与ZIP不同的是&#xff0c;JAR不仅用于压缩和发布&#xff0c;还用于部署和封装库、组件和插…