我来详细拆解这几个空间数据库核心知识点

一、空间数据管理技术的发展阶段

空间数据(带位置、形状的地理数据)的管理方式,随技术发展经历了 4 个阶段:

  1. 文件系统阶段

    • 方式:用纯文件存储(如 Shapefile、GeoTIFF),通过独立软件(如 ArcGIS)读写。
    • 缺点:无统一管理、数据冗余大、无法多用户并发访问。
  2. 文件混合系统阶段

    • 方式:“文件存空间数据 + 关系数据库存属性数据”(如 Shapefile 存几何,MySQL 存名称、ID)。
    • 缺点:空间数据与属性数据分离,查询需手动关联,效率低。
  3. 空间数据库引擎(SDE)阶段

    • 方式:通过 “引擎”(如 ArcSDE)将空间数据封装后,存入关系数据库(如 Oracle)。
    • 特点:实现空间与属性数据的统一管理,但依赖特定引擎,兼容性差。
  4. 空间数据库管理系统阶段

    • 方式:关系数据库直接支持空间数据类型(如 PostgreSQL+PostGIS、MySQL Spatial)。
    • 特点:原生支持空间存储、查询、分析,兼容性强、效率高,是当前主流。

二、空间数据库标准

空间数据库需遵循统一规范,才能实现数据互通与功能兼容:

  1. PostGIS 遵循的规范

    • 核心遵循 OGC Simple Features 规范(开放地理空间联盟制定),定义了点、线、面等基础几何对象的存储与操作规则。
    • 同时支持 ISO SQL/MM Part 3(SQL 多媒体标准的空间部分),扩展了空间函数与数据类型。
  2. 空间网络模型对应的标准

    • 主要遵循 ISO SQL/MM Part 4(SQL 多媒体标准的 “空间网络” 部分),定义了网络拓扑(如道路、管线的节点、边)的存储与分析规则。

三、空间几何对象(以 MultiPolygon 为例)

空间几何对象是描述地理实体形状的 “数据类型”,常用的有:

  • 点(Point):表示单个位置(如经纬度坐标)。
  • 线(LineString/MultiLineString):表示路径(如道路中心线,MultiLineString 是多条线的集合)。
  • 面(Polygon/MultiPolygon):表示区域(如北京市的形状)。
    • Polygon:单个封闭区域(无孔洞或分离部分)。
    • MultiPolygon:多个 Polygon 的集合(适用于 “有飞地” 的区域,如北京市包含多个分散的行政区域)。

四、九交矩阵(DE-9IM)判断空间关系

九交矩阵(Dimensionally Extended 9-Intersection Model)是判断两个空间对象关系的标准方法,通过两个对象的 “内部(Interior)、边界(Boundary)、外部(Exterior)” 的交集维度,生成一个 3×3 的矩阵,从而定义空间关系(如相接、相交、包含)。

以 “河北省与北京市” 的空间关系为例(用1表示交集维度≥1,0表示维度 = 0,-1表示无交集):

北京内部 北京边界 北京外部
河北内部 1(两省区域相邻,内部有接触) 1(边界重合) 1(河北外部包含北京外部区域)
河北边界 1(河北边界与北京内部接触) 1(边界重合) 1(河北边界延伸至北京外部)
河北外部 0(北京内部不在河北外部) 0(北京边界不在河北外部) 1(河北外部与北京外部有交集)

常见空间关系(通过矩阵判断):

  • 相接(Touch):两个对象仅边界相交,内部不相交(如两个相邻的面)。
  • 包含(Contains):一个对象完全在另一个对象内部(如点在面内)。

五、空间数据库扩展(PostGIS 相关应用)

PostGIS 是PostgreSQL 数据库的空间扩展插件,让普通关系数据库具备空间数据管理能力,核心应用包括:

  1. 空间数据存储:支持点、线、面等几何类型,存储地理实体的形状与坐标。
  2. 空间查询:通过函数(如ST_DWithin)查询 “某点 2 公里内的设施”。
  3. 空间分析:计算面积(ST_Area)、长度(ST_Length)、缓冲区(ST_Buffer)等。
  4. 业务场景:城市道路管理(存储道路中心线)、出租车轨迹分析(存储实时位置并关联道路)等。

✅ 空间数据库核心知识点(完整版 + PostGIS 常用函数速查表)

一、空间数据管理技术的发展阶段(4 个阶段,必考,按顺序记)

核心背景:空间数据 = 几何图形 (坐标 / 形状) + 属性信息 (名称 / 编号 / 长度),这 4 个阶段是空间数据与属性数据从分离到统一、从低效到高效的演进,考点常考「阶段特点 + 优缺点」

  1. 第一阶段:纯文件系统管理阶段

    • 存储方式:空间数据和属性数据全部存入独立文件(如 Shapefile、GeoTIFF、CAD 文件),无数据库参与。
    • 访问方式:依赖 ArcGIS、QGIS 等 GIS 软件直接读写文件。
    • 优点:简单易实现,无数据库部署成本;
    • 缺点:无数据约束、数据冗余严重、无法多用户并发访问、查询效率极低,空间和属性数据无关联规则。
  2. 第二阶段:文件 - 关系数据库混合管理阶段

    • 存储方式:分离存储 → 空间几何数据存在文件(如 Shapefile 存面 / 线 / 点),属性数据存入传统关系数据库(MySQL/Oracle/PostgreSQL)。
    • 关联方式:通过「唯一 ID」手动关联文件的空间数据和数据库的属性数据。
    • 优点:属性数据可利用数据库的索引、约束、查询功能,比纯文件高效;
    • 缺点:空间 + 属性数据分离,查询需二次关联,无统一事务管理,易出现数据不一致,空间操作仍依赖 GIS 软件。
  3. 第三阶段:空间数据库引擎(SDE)管理阶段

    • 存储方式:引入「空间数据库引擎」(如 ArcSDE、Oracle Spatial 引擎)作为中间件,将空间数据封装后存入传统关系数据库,实现空间 + 属性数据同库存储
    • 核心特点:引擎负责解析空间数据格式、执行空间运算,数据库只负责存储。
    • 优点:首次实现空间与属性数据的统一管理,支持并发访问、数据安全;
    • 缺点:高度依赖专属引擎,兼容性差、成本高,空间运算效率受引擎性能限制,非开源。
  4. 第四阶段:原生空间数据库管理系统阶段(主流,重中之重)

    • 存储方式:传统关系数据库原生支持空间数据类型和空间函数,无需中间件,直接存储、管理、运算空间数据。
    • 代表技术:PostgreSQL + PostGIS、MySQL Spatial、Oracle Spatial;PostGIS 是考试核心考点
    • 优点:开源免费、兼容性极强,空间运算效率最高,完美结合关系数据库的所有优点(约束、索引、事务、多表连接)+ 空间数据处理能力,是目前行业主流方案。


二、空间数据库标准(必考,精准考点,无混淆)

所有空间数据库 / 空间扩展(如 PostGIS)的设计和开发,都遵循统一国际标准,保证不同软件 / 数据库的空间数据互通、函数通用,考点集中在「对应关系」

✔ 核心两大标准体系
  1. OGC 开放地理空间联盟规范 → PostGIS 的核心遵循标准

    • 全称:OGC Simple Features for SQL(SQL 简单要素规范)
    • 定义内容:规定了「点、线、面、复合几何」等基础空间几何对象的数据结构、存储格式、基础空间函数,是所有空间数据库的通用基础。
    • 考点:PostGIS 首要遵循 OGC Simple Features 规范
  2. ISO SQL/MM 国际标准化组织规范 → 分模块对应不同空间需求

    • 全称:SQL Multimedia and Application Packages(SQL 多媒体应用包),是对 SQL 标准的空间扩展;
    • 分模块考点(必背):
      • ISO SQL/MM Part 3:定义「基础空间几何对象」的操作规则,PostGIS 兼容此标准,补充 OGC 规范的细节;
      • ISO SQL/MM Part 4:定义「空间网络模型」的标准,专门针对道路、管线、水系这类「节点 + 边」的网络型空间数据,是空间网络分析的统一标准。

考试高频题:PostGIS 遵循什么规范?→ 主要遵循 OGC Simple Features,同时兼容 ISO SQL/MM Part3;空间网络模型对应的标准是?→ ISO SQL/MM Part4。


三、空间几何对象(核心:MultiPolygon,必考定义 + 区分)

空间几何对象是 PostGIS 中存储地理实体的专用数据类型,所有地理事物都能抽象为以下几类,考点集中在「Polygon 与 MultiPolygon 的区别」「适用场景」,所有类型均兼容 OGC 规范,按复杂度排序:

  1. 点类Point(单点,如经纬度坐标:北京市中心)、MultiPoint(多点集合,如多个公交站点)
  2. 线类LineString(单条线段,如单条道路中心线)、MultiLineString(多线段集合,如整个城市的道路网)
  3. 面类(重中之重,考点核心)
    • Polygon单一封闭区域,由一条外边界 + 可选内边界(孔洞)组成,无分离的部分。→ 适用:形状完整、无飞地的区域(如一个圆形公园、一个矩形小区)。
    • MultiPolygon多个 Polygon 的集合,是 PostGIS 中表示「区域形状」的核心类型。→ 定义:专门用于表示「由多个分离的封闭区域组成的地理实体」,多个 Polygon 之间无交集。→ 适用:带飞地 / 分散的行政区域(如中国版图、北京市行政区,包含多个分离的区块)、湖泊群、岛屿群,考试 100% 考此类型的应用场景

核心考点:什么几何对象适合表示区域形状?→ MultiPolygon。


四、九交矩阵 DE-9IM(Dimensionally Extended 9-Intersection Model)【必考核心,精准背诵】

✅ 1. 核心定义

九交矩阵是判断两个空间几何对象之间空间关系的国际标准方法,是空间关系判断的「底层逻辑」,所有 PostGIS 的空间关系函数(如 ST_Touches、ST_Contains)都是基于九交矩阵实现的。

✅ 2. 矩阵的构成(3×3 矩阵,必背,无例外)

判断逻辑:对任意两个空间对象 A 和 B,都将其拆解为 3 个部分:

  • 内部(Interior, I):对象的核心区域,不含边界(如北京市的城区内部)
  • 边界(Boundary, B):对象的轮廓线 / 边界点(如北京市的行政区边界)
  • 外部(Exterior, E):对象以外的所有空间

九交矩阵 = A 的 3 个部分 与 B 的 3 个部分 依次求交集,形成 3×3 的矩阵,矩阵中每个单元格的值表示「交集的维度」:

  • -1 :无交集(两个部分完全分离)
  • 0 :交集为点(维度为 0)
  • 1 :交集为线(维度为 1)
  • 2 :交集为面(维度为 2)

矩阵固定格式(必记):

​I(A)∩I(B)      B(A)∩I(B)      E(A)∩I(B)

​I(A)∩B(B)     B(A)∩B(B)    E(A)∩B(B)​

I(A)∩E(B)     B(A)∩E(B)    E(A)∩E(B)​​

✅ 3. 必考应用:九交矩阵判断「相接 (Touch)」关系

相接(ST_Touches)是考试最高频的空间关系考点,用九交矩阵的判定规则:

✔ 两个空间对象「相接」的核心条件:仅边界相交,内部完全不相交矩阵特征:I(A)∩I(B)=−1 且 B(A)∩B(B)=−1

→ 例子:河北省和北京市、两个相邻的小区、两条首尾相连的道路,都是「相接」关系。

✅ 4. 补充高频空间关系(九交矩阵推导,必背)
  • 包含(ST_Contains):A 完全包裹 B,B 的内部 + 边界都在 A 的内部 → I(A)∩I(B)=2
  • 相交(ST_Intersects):A 和 B 的任意部分有交集(内部 / 边界),是最宽泛的关系
  • 相离(ST_Disjoint):A 和 B 无任何交集,所有单元格都是 - 1

五、空间数据库扩展 - PostGIS(必考,核心中的核心)

✅ 1. 定义(必背)

PostGIS 是 开源关系型数据库 PostgreSQL 的空间扩展插件,通过这个插件,原本只能存储普通数据的 PostgreSQL,被赋予了「存储空间数据、执行空间运算、空间分析」的全部能力,是目前最主流的开源空间数据库方案。

✅ 2. 核心核心能力(考试全考这 5 点)
  1. 支持 OGC/ISO 标准的所有空间几何数据类型(Point、Polygon、MultiPolygon 等);
  2. 提供几百个空间函数,实现空间查询、分析、运算;
  3. 支持空间索引,大幅提升空间查询效率;
  4. 完美兼容 PostgreSQL 的所有特性(主键、外键、约束、多表连接、嵌套查询);
  5. 支持空间参考系(如 4326 坐标系,经纬度),可实现坐标转换。

✅ 重磅:PostGIS 高频空间函数速查表(考试 100% 考,分模块整理,无多余,直接背诵)

【说明】

  1. 所有函数均为考试高频考点,来自你这份测试卷的原题;
  2. 函数名大小写不敏感(PostgreSQL 特性),如ST_Area()st_area()均可;
  3. 所有函数返回值、作用、应用场景一一对应,完美匹配你的考点,直接用!

一、几何对象「创建 / 构造」函数(建表 + 插入数据必考)

函数名称 核心作用 语法示例 应用场景
ST_GeomFromText('几何文本', 坐标系) 将 WKT 格式的文本,转为 PostGIS 的 geometry 空间类型;坐标系4326 是必考值(全球通用经纬度) ST_GeomFromText('POINT(116.4 39.9)',4326)ST_GeomFromText('LineString(116 39,117 40)',4326)ST_GeomFromText('MultiPolygon(((xxx)))',4326) 插入空间数据时必用,如插入道路、区域、点位的坐标
ST_MakePoint(经度,纬度) 快速构造「点对象」,最常用的点构造函数,效率高于上面的函数 ST_MakePoint(116.3972,39.9075) 存储出租车位置、POI 点位、传感器坐标等
ST_AsText(geom) 把 PostGIS 的 geometry 空间类型,转回文本格式,便于查看 SELECT ST_AsText(position) FROM taxi; 查询时查看空间对象的具体坐标,调试必备

二、空间「关系判断」函数(基于九交矩阵,必考 TOP 级)

函数名称 核心作用(九交矩阵实现) 返回值 应用场景
ST_Touches(A,B) 判断 A 和 B 是否「相接」:仅边界相交,内部不相交 true/false 判断两个区域是否相邻、两条道路是否相连
ST_Contains(A,B) 判断 A 是否完全包含 B true/false 判断一个点位是否在某个行政区内、一个小区是否在某个街道内
ST_Intersects(A,B) 判断 A 和 B 是否有任意交集(最常用) true/false 判断两个几何对象是否重叠、相交、相接
ST_Disjoint(A,B) 判断 A 和 B 是否完全分离(无交集) true/false 判断两个区域是否互不相邻

三、空间「距离计算」函数(业务应用题必考,测试卷原题全有)

函数名称 核心作用 语法示例 应用场景(原题考点)
ST_Distance(A,B) 计算两个空间对象的最短直线距离,单位与坐标系一致(4326 为米) SELECT ST_Distance(t1.position,t2.position) FROM taxi t1,taxi t2; 计算两辆出租车的距离、点位到道路的距离
ST_DWithin(A,B,距离值) 判断 A 和 B 的最短距离是否小于等于指定值,效率极高(走空间索引),考试第一高频函数 SELECT * FROM taxi WHERE ST_DWithin(position, ST_MakePoint(116,39), 2000); ✅ 查询 2 公里内的空车✅ 查询某点位 100 米内的所有车辆✅ 筛选指定范围内的地理实体

四、空间「属性计算」函数(基础分析必考)

函数名称 核心作用 语法示例 应用场景
ST_Area(geom) 计算面 / 多边形的面积 SELECT ST_Area(geom) FROM district; 计算行政区面积、公园面积、地块面积
ST_Length(geom) 计算线 / 道路的长度 SELECT ST_Length(geom) FROM road; 计算道路长度、河流长度、管线长度
ST_NumGeometries(geom) 计算复合几何对象的个数 SELECT ST_NumGeometries(geom) FROM china; 查看 MultiPolygon 有多少个分离的区域

五、空间「分析处理」函数(进阶应用,测试卷考点)

函数名称 核心作用 应用场景
ST_Buffer(geom, 距离) 给空间对象生成「缓冲区」,如点生成圆形缓冲区、线生成带状缓冲区 查询某道路两侧 50 米内的所有商铺、某点位 1 公里的辐射范围
ST_Centroid(geom) 计算面对象的「几何中心点」 求行政区的中心坐标、公园的中心点

✅ 最后补充:2 个考试「高频易错点」(必看,避坑)

  1. 关系代数的「投影 (π)」和空间几何的「投影」不是一个概念:前者是取表的列,后者是坐标系统的转换,考试不会混淆,只需区分即可;
  2. PostGIS 的空间字段定义固定语法:geometry(几何类型, 坐标系),如 geometry(Point,4326)geometry(MultiPolygon,4326),建表题必考此写法。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐