首页 > 其他分享 >PostGIS之空间索引

PostGIS之空间索引

时间:2023-01-04 17:00:21浏览次数:54  
标签:-- PostGIS ST 索引 空间 nyc

1. 概述

PostGIS 是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在 SQL 中运行空间查询

PostGIS官网:About PostGIS | PostGIS

PostGIS官方教程:PostGIS 简介 — Introduction to PostGIS

PostGIS相关教程:文章目录汇总 - 知乎 (zhihu.com)

本文基于官方教程描述PostGIS中的空间索引

数据准备可参考:

数据介绍可参考:

2. 空间索引

2.1 R树索引

PostGIS使用的是R树索引,对于空间物体,计算其外包矩形

_images/bbox.png

根据不同层级的外包矩形建立R树索引

_images/index-01.png

2.2 索引速度测试

空间索引使得空间查询速度极大提升,以下是速度对比试验:

删除空间索引并查询Broad St地铁站所在的社区:

-- 1. 删除数据库自动创建的空间索引
DROP INDEX nyc_neighborhoods_geom_idx;

-- 2. 查询Broad St的位置
-- SELECT ST_AsEWKT(geom) FROM nyc_subway_stations WHERE name = 'Broad St';
-- 空间位置为 SRID=26918;POINT(583571.9059213118 4506714.341192182)
 
-- 3. 查询包含这个位置的社区
SELECT name FROM nyc_neighborhoods WHERE ST_Contains(geom, ST_GeomFromText('SRID=26918;POINT(583571.9059213118 4506714.341192182)'));

image-20230104160912622

查询时间为6.423秒

创建空间索引并查询Broad St地铁站所在的社区:

-- 1. 创建数据表的空间索引
CREATE INDEX nyc_neighborhoods_geom_idx ON nyc_census_blocks USING GIST (geom);

-- 2. 查询Broad St的位置
-- SELECT ST_AsEWKT(geom) FROM nyc_subway_stations WHERE name = 'Broad St';
-- 空间位置为 SRID=26918;POINT(583571.9059213118 4506714.341192182)
 
-- 3. 查询包含这个位置的社区
SELECT name FROM nyc_neighborhoods WHERE ST_Contains(geom, ST_GeomFromText('SRID=26918;POINT(583571.9059213118 4506714.341192182)'));

image-20230104161045005

查询时间为1.379秒,速度提升很大

2.3 支持空间索引的函数

不是所有函数都会使用空间索引的,如果存在空间索引,那么支持使用空间索引的函数会自动使用它。支持空间索引的空间函数主要有:

前四个是查询中最常用的,ST_DWithin 对于 “一定距离内”、“一定半径内” 的查询是非常重要的,能获得指数级别的查询性能

2.4 使用索引进行运算

对于创建的空间物体的边界矩形,可以使用它作为快速判断,比如:

  • && (A , B)Returns TRUE if A's 2D bounding box intersects B's 2D bounding box
  • ~ (A, B) Returns TRUE if A's bounding box contains B's

比如使用 && 来计算Broad St地铁站所在的社区:

SELECT name FROM nyc_neighborhoods WHERE geom && ST_GeomFromText('SRID=26918;POINT(583571.9059213118 4506714.341192182)');

image-20230104164449671

2.5 清理与分析

PostGIS会Analyst和Vacuum进行信息统计和垃圾清理,也可手动执行:

-- 分析统计数据表
ANALYZE nyc_census_blocks;

-- 清理分析数据
VACUUM ANALYZE nyc_census_blocks;

3. 参考资料

[1]15. 空间索引 — Introduction to PostGIS

[2]PostGIS教程十:空间索引 - 知乎 (zhihu.com)

[3]PostGIS 3.3.3dev Manual

[4]PostGIS Cheat Sheet

标签:--,PostGIS,ST,索引,空间,nyc
From: https://www.cnblogs.com/jiujiubashiyi/p/17025371.html

相关文章

  • 百万并发场景中倒排索引与位图计算的实践
    作者:京东物流郎元辉背景Promise时效控单系统作为时效域的控制系统,在用户下单前、下单后等多个节点均提供服务,是用户下单黄金链路上的重要节点;控单系统主要逻辑是针对用......
  • EasyAR4.0稀疏空间地图室内导航
    现有的AR室内导航,一种方案是利用运动跟踪实现,但是偏移较大。比较靠谱或者说能满足商业使用的还是稀疏空间地图。(ARCore管叫云锚点)实现效果如下:EasyAR稀疏云地图室内导航......
  • mysql索引简谈
                           mysql索引简谈 一、什么是索引就好比我们在看一本书的时候,有目录的话,我们可以快速定位到想看......
  • 【数据库】浅析Innodb的聚集索引与非聚集索引
    Mysql存储引擎之一的Innodb的索引,可以分为聚集索引与非聚集索引,这两种索引都是使用B+树组织的。本文不讲解什么是索引,对索引不了解的同学可以先移步到我的另外一篇文章【......
  • R语言用贝叶斯层次模型进行空间数据分析|附代码数据
    阅读全文:http://tecdat.cn/?p=10932最近我们被客户要求撰写关于贝叶斯层次模型的研究报告,包括一些图形和统计输出。在本文中,我将重点介绍使用集成嵌套拉普拉斯近似方法......
  • 从零开始学习 MySQL 系列--索引、视图、导入和导出
    前言上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识。作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家......
  • 解决国内使用Google搜索引擎
    1.下载IGG谷歌访问助手,然后对文件解压,如下图。  2.将此扩展配置到GoogleChrome浏览器中。打开扩展程序  打开开发者模式 将扩展文件拖入此页面 ......
  • 索引库创建
    数据准备本次学习涵盖ES简单查询,聚合查询,所以在创建测试库时会可以涵盖一些个性化字段,用于学习搜索用法索引创建几个疑问1.能否用中文命名安排:我用"蓝闪test",中英文......
  • [MySQL] 索引的使用、SQL语句优化策略
    目录索引什么是索引索引的创建与删除创建索引删除索引索引的使用使用explain分析SQL语句最佳左前缀索引覆盖避免对索引列进行额外运算SQL语句优化小表驱动大表索引什么是......
  • 按用户重建索引
    --赋用户表空间分配权限ALTERUSERYBSH_BASEQUOTAUNLIMITEDONTS_YBSH_BASE; --查询已有索引select*fromuser_indexeswhereindex_name='INDX_REG_SI_ITEM3'......