SQL Servr 2008空间数据应用系列二:空间索引(Spatial Index)基础

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

 在前一篇博文中我们学习到了一些关于地理信息的基础知识,也学习了空间参照系统,既地球椭球体、基准、本初子午线、计量单位、投影等相关理论知识,我们可以使用这些空间参照系统组件来定义一系列应用于地球空间上的几何图像来表示地理空间中的特定功能,表示着地球上一个一个特定的位置点。 本篇主要介绍地理空间索引的概念以及微软SQL Server 2008 R2中的空间索引的应用。

 

一、空间索引

  空间索引是指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构,其中包含空间对象的概要信息。作为一种辅助性的空间数据结构,空间索引介于空间操作算法和空间对象之间,它通过筛选作用,大量与特定空间操作无关的空间对象被排除,从而提高空间操作的速度和效率。

 

  来至百科的定义:为便于空间目标的定位及各种空间数据操作,按要素或目标的位置和形状或空间对象之间的某种空间关系来组织和存储数据的结构。

 

  关于更多空间索引的知识点需要深入了解EPSG和SRID,本文主要介绍基于微软SQL Server 2008的空间数据特性实现介绍,故不详细介绍这些基础理论知识点,有兴趣的可以访问文末的推荐资料链接,了解更多关于EPSG核SRID的相关知识。

 

二、SQL Server 2008的空间参考系统

  微软SQL Server 2008的空间系统表(实际上是一个系统视图)"sys.spatial_reference_systems"中存储了详细的支持所有大地测量空间参考系统标准,该表中的每一行数据对应于一个唯一的空间参考系统,可以基于这些空间参考系统在SQL Server 2008中来定义任何形式的空间数据。

select   *   from  sys.spatial_reference_systems

   

 

  系统表“sys.spatial_reference_systems”中实际上仅仅只是存储了应用于SQL Server 2008中地理参照坐标的参考系统,除了空间参考系统可以使用这张表中列出的参考系统标准,也可以基于这些标准来定义基于任何地理投影的空间数据。

 

 三、空间参照文本格式(WKT)

  Well-Known Text (WKT) Representation of Spatial Reference Systems:顾名思义用众所周知的文字形式来描述看见坐标参考系统,它与EPSG(2005年已经换名)的坐标文字表述模型一致。WKT字符串应用于确定空间参考系统的组成部分的描述,其定义主要包含以下10项内容:

  1、一个总体的坐标系名

  2、一个地理图形坐标系统名
3、一个基准面定义
4、一个椭球体的名字。长半轴(semi-major axis)和反扁率(inverse flattening)
5、本初子午线(prime meridian)名和其与格林威治子午线的偏移值
6、投影方法类型(如横轴莫卡托)
7、投影参数列表(如中央经线等)
8、一个单位的名称和其到米和弧度单位的转换参数
9、轴线的名称和顺序
10、在预定义的权威坐标系中的编码(如EPSG)

 

select  well_known_text 
    
from  sys.spatial_reference_systems 
        
where  authorized_spatial_reference_id = 4326  
            
and  authority_name = ' EPSG '

 

  基于sys.spatial_reference_systems表定义了多种不同的空间参照系统的WKT描述,如上SQL语句查询出的是我们平时在地图应用开发中使用最多的EPSG:4326空间参照系统标准,则对于的WKT如下:

GEOGCS [ "WGS 84", 
        DATUM["World Geodetic System 1984", 
        ELLIPSOID["WGS 84", 6378137, 298.257223563
] ], 
        PRIMEM
[ "Greenwich", 0 ]
        UNIT
[ "Degree", 0.0174532925199433 ]
      ]

 

  以上KWT字符串确定了EPSG:4326空间参照系统的组成部分元素描述,其主要使用了四种空间配置,分别为:基准(Datum)、椭圆(Ellipsoid)、本初子午线(Primem)和Unit(计量单位)。关于这些空间参考系统参数在上一篇文中中介绍过,这里就不在做重复介绍,以上KWT字符串表述的意思大致是这样的:“WGS 84坐标系,采用1984年订立的世界地理坐标系统标准,地理标准半径为:6378137........”。

 

四、SQL Server 2008的空间索引

  SQL Server 2008 引入了对空间数据和空间索引的支持。“空间索引”是一种扩展索引,允许您对空间列编制索引。空间列是包含空间数据类型(如 geometry 或 geography)数据的表列。本节中的主题介绍了空间索引。 

 

  在 SQL Server 2008 中,空间索引(存储在:sys.spatial_indexes表中)使用 B 树构建而成,也就是说,这些索引必须按 B 树的线性顺序表示二维空间数据。因此,将数据读入空间索引之前,SQL Server 2008 先实现对空间的分层均匀分解。索引创建过程会将空间分解成一个四级“网格层次结构”。这些级别指的是“第 1 级”(顶级)、“第 2 级”、“第 3 级”和“第 4 级”。

 

  每个后续级别都会进一步分解其上一级,因此上一级别的每个单元都包含下一级别的整个网格。在给定级别上,所有网格沿两个轴都有相同数目的单元(例如 4x4 或 8x8),并且单元的大小都相同。下图显示了网格层次结构每个级别的右上角单元被分解成 4x4 网格的情况。事实上,所有单元都是以这种方式分解的。因此,以此为例,将一个空间分解成四个级别的 4x4 网格际上会总共产生 65,536 个第四级单元。针对空间索引进行的空间分解与应用程序数据使用的度量单位无关。

 

 

        untitled

 

 

  网格层次结构的单元是利用多种 Hilbert 空间填充曲线以线性方式编号的。然而,出于演示目的,这里使用的是简单的按行编号,而不是由 Hilbert 曲线实际产生的编号。在下图中,几个表示建筑物的多边形和表示街道的线已经放进了一个 4x4 的 1 级网格中。第 1 级单元的编号为 1 到 16,编号从左上角的单元开始。

 

        untitle22d

 

  沿网格轴的单元数目确定了网格的“密度”:单元数目越大,网格的密度越大。例如,8x8 网格(产生 64 个单元)的密度就大于 4x4 网格(产生 16 个单元)的密度。网格密度是以每个级别为基础定义的。网格配置单元数目低 :4X4 =16,中8X8 = 64,高16X16 =256,默认设置所有级别都为 

 

  您可以通过指定非默认的网格密度控制分解过程。例如,在不同级别指定不同网格密度对于基于索引空间的大小和空间列中的对象来优化索引可能非常有用。空间索引的网格密度显示在 sys.spatial_index_tessellations 目录视图的 level_1_grid、level_2_grid、level_3_grid 和 level_4_grid 列中。

 

  将索引空间分解成网格层次结构后,空间索引将逐行读取空间列中的数据。读取空间对象(或实例)的数据后,空间索引将为该对象执行“分割过程”。分割过程通过将对象与其接触的网格单元集(“接触单元”)相关联使该对象适合网格层次结构。从网格层次结构的第 1 级开始,分割过程以“广度优先”方式对整个级别进行处理。在可能的情况下,此过程可以连续处理所有四个级别,一次处理一个级别。

 

  注:以上内容截取SQL Server 2008帮助文档,详细请查看联机帮助文档。





本文转自 beniao 51CTO博客,原文链接:http://blog.51cto.com/beniao/491642,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
7天前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
7天前
|
存储 关系型数据库 MySQL
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
覆盖索引、前缀索引、索引下推、SQL优化、EXISTS 和 IN 的区分、建议COUNT(*)或COUNT(1)、建议SELECT(字段)而不是SELECT(*)、LIMIT 1 对优化的影响、多使用COMMIT、主键设计、自增主键的缺点、淘宝订单号的主键设计、MySQL 8.0改造UUID为有序
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
|
20天前
|
Java 前端开发 容器
Struts 2:在技术变革的风暴中航行,探索框架的革命性未来与创新融合之路
【8月更文挑战第31天】Struts 2作为一款成熟的企业级Java Web框架,凭借其稳定性和灵活性自2007年以来广受欢迎。它基于MVC设计模式,支持插件架构和RESTful服务,并能与Spring框架良好集成。然而,面对微服务架构和容器化技术(如Docker和Kubernetes)的兴起,Struts 2需提供更轻量级和支持指南来适应变化。通过深化与现代前端框架(如React和Vue.js)及AI技术的集成,并强化安全性与开发工具,Struts 2有望保持竞争力并迎接未来挑战。
30 0
|
20天前
|
SQL 测试技术 数据处理
|
20天前
|
SQL 数据采集 数据挖掘
深入理解SQL中的DISTINCT语句及其应用
【8月更文挑战第31天】
34 0
|
20天前
|
SQL 存储 数据库
|
2月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
63 13
|
2月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
2月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
44 6
|
1月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
178 0