PostGreSQL(三)PostGIS
PostGIS是一个空间数据库,空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。
空间数据库将空间数据和对象关系数据库(Object Relational database)完全集成在一起。实现从以GIS为中心向以数据库为中心的转变。
PostGIS通过向PostgreSQL添加对空间数据类型、空间索引(R-Tree)和空间函数的支持,将PostgreSQL数据库管理系统转换为空间数据库,可以说PostGIS仅仅只是PostgreSQL的一个插件,但是它将PostgreSQL变成了一个强大的空间数据库!
空间数据类型
-
空间数据类型用于指定图形为点(point)、线(line)和面(polygon)
-
普通数据库拥有字符串(string)、数值(number)和日期(date)这些数据类型,空间数据库添加了额外的数据类型(空间数据类型)以用于表达地理特征(geographic features)。
这些空间数据类型抽象并封装了诸如边界(boundary)和维度(dimension)等空间结构。
在许多方面,空间数据类型可以简单的理解为形状(shape)
-
空间索引和边界框
-
多维度空间索引被用于进行空间操作的高效处理(注意是多维度哦,而不是只有针对二维空间数据的索引)
-
由于多边形(Polygon)可以重叠,可以相互包含,并且可以排列在二维(或更多维数)空间中,因此无法使用B树索引有效地索引它们。
空间数据库提供了一个“空间索引(spatial index)”,它回答了“哪些对象在这个特定的边界框内?”这个问题。
边界框(bounding box)是平行于坐标轴且包含给定地理要素(feature)的最小的矩形。
-
空间索引不像B树索引那样提供精确的结果,而是提供近似的结果。
-
各种数据库实际实现的空间索引差异很大,最常见的实现是R-tree(在PostGIS中使用),但在其他空间数据库中也有基于四叉树(Quadtrees)的实现和基于网格的索引(grid-based indexes)的实现
空间函数
空间函数构建于SQL语言中,用于进行空间属性和空间关系的查询,空间函数中的大部分可以被归纳为以下五类:
-
转换 —— 在geometry(PostGIS中存储空间信息的格式)和外部数据格式之间进行转换的函数
-
管理 —— 管理关于空间表和PostGIS组织的信息的函数
-
检索 —— 检索几何图形的属性和空间信息测量的函数
-
比较 —— 比较两种几何图形的空间关系的函数
-
生成 —— 基于其他几何图形生成新图形的函数
参考: https://zhuanlan.zhihu.com/p/67232451