PostGIS介绍

一、简介

       PostGIS是一个PostgreSQL数据库扩展,它允许GIS(地理信息系统)对象存储在数据库中。PostGIS包括对基于GiST的R-Tree空间索引的支持,以及用于分析和处理GIS对象的功能,它是一种根据知识共享署名,相同方式共享3.0许可证授权的开源软件。PostgreSQL是usinf PostGIS功能的依赖项,因此,安装PostGIS之前,首先需要安装PostgreSQL。

       PostGIS通过向PostgreSQL添加对空间数据类型、空间索引和空间函数的支持,将PostgreSQL数据库管理系统转换为空间数据库。因为PostGIS是建立在PostgreSQL之上的,所以PostGIS自动继承了重要的"企业级"特性以及开放源代码的标准。可以说PostGIS仅仅只是PostgreSQL的一个插件,但是它却将PostgreSQL变成了一个强大的空间数据库!

       PostGIS是一个空间数据库Oracle SpatialSQL Server(2008和之后版本)也是空间数据库。但是这意味着什么?是什么使普通数据库变成空间数据库?简短的答案是...

       空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象

下面简短介绍了空间数据库的发展,然后回顾了将空间数据与数据库关联起来的三个方面:数据类型索引函数

  • 空间数据类型用于指定图形为(point)、线(line)和(polygon)
  • 多维度空间索引被用于进行空间操作的高效处理
  • 空间函数构建于SQL语言中,用于空间属性和空间关系的查询

    空间数据类型空间索引空间函数组合在一起,提供了灵活的结构用于优化性能和分析。

二、空间数据库的发展

 在传统的第一代地理信息系统(GIS)实现中,所有的空间数据都存储在平面文件中,需要专门的GIS软件来解释和操作这些数据。

    这些第一代管理系统旨在满足用户的需求,其中所有所需的数据都在用户的组织领域中。

    它们是专为处理空间数据而构建的专有的、独立的系统。

    第二代空间系统将一些数据存储在关系数据库(RDBMS)中(通常是“属性”或非空间部分),但仍然缺乏直接集成所具有的灵活性。

    真正的空间数据库诞生于人们开始把空间特征当作第一级数据库对象的时候

    空间数据库空间数据对象关系数据库(Object Relational database)完全集成在一起实现从以GIS为中心向以数据库为中心的转变

PostGIS介绍
                                                               空间数据存储的体系架构的发展

从上图可以看出,有了空间数据库之后,就不再需要专门的GIS数据引擎(GIS Data Engine)去处理和操纵空间数据了,应用程序只需要通过SQL语言就能轻松地操纵空间数据。

    说明空间数据库管理系统也可用于地理信息以外的应用。例如,空间数据库可以用于管理与人体解剖、大规模集成电路、分子结构和电磁场等相关的数据。

三、将空间数据与数据库关联起来的三个方面

3.1、空间数据类型

    普通数据库拥有字符串(string)、数值(number)和日期(date)这些数据类型,空间数据库添加了额外的数据类型(空间数据类型)以用于表达地理特征(geographic features)。

    这些空间数据类型抽象并封装了诸如边界(boundary)和维度(dimension)等空间结构。

    在许多方面,空间数据类型可以简单的理解为形状(shape)

PostGIS介绍

                                           空间数据类型组织结构图

    空间数据类型按类型层次结构组织。每个子类型继承其父类型的结构(属性)和行为(方法或函数)。

3.2、空间索引和边界框(bounding box)

    普通数据库提供索引机制以允许对数据子集进行快速、随机地访问。

    标准的数据类型(number、string、date)的索引通常是B-tree索引(B树索引),B树索引使用自然排序顺序(natural sort order)对数据进行分区,以便将数据放入分层树中。

    数字字符串日期的自然排序顺序很容易确定 —— 每个值都小于、大于或等于其他值。

    但是由于多边形(Polygon)可以重叠,可以相互包含,并且可以排列在二维(或更多维数)空间中,因此无法使用B树索引有效地索引它们。

    空间数据库提供了一个“空间索引(spatial index)”,它回答了“哪些对象在这个特定的边界框内?”这个问题。

    边界框(bounding box)是平行于坐标轴且包含给定地理要素(feature)的最小的矩形。

PostGIS介绍

                          边界框示例

    使用边界框是为了判断”A被包含在B中吗?"这个问题,对多边形进行计算,计算量非常大而且难以计算,但在计算矩形的情况下,计算比较容易,而且速度非常快。

    即使是最复杂的多边形和线串(LineString)也可以用一个简单的边界框来表示。

    索引必须快速执行才能起到理想的作用。因此,空间索引不像B树索引那样提供精确的结果,而是提供近似的结果

    "多边形内部包含哪些线段“将由空间索引解释为”这个多边形边界框内部包含哪些线段边界框

    各种数据库实际实现的空间索引差异很大,最常见的实现是R-tree(在PostGIS中使用),但在其他空间数据库中也有基于四叉树(Quadtrees)的实现和基于网格的索引(grid-based indexes)的实现。

3.3、空间函数

    关于查询的数据操作,普通数据库提供的函数功能包括连接字符串、对字符串执行哈希操作、对数值进行数学运算以及从日期中提取信息等。

    空间数据库为分析几何信息、确定空间关系和操作几何图形提供了一套完整的空间函数。

    空间函数中的大部分可以被归纳为以下五类:

  • 转换    ——    在geometry(PostGIS中存储空间信息的格式)和外部数据格式之间进行转换的函数
  • 管理    ——    管理关于空间表和PostGIS组织的信息的函数
  • 检索    ——    检索几何图形的属性和空间信息测量的函数
  • 比较    ——    比较两种几何图形的空间关系的函数
  • 生成    ——    基于其他几何图形生成新图形的函数

    函数列表可能非常长,OGC   SFSQL定义了一组通用空间函数规范,PostGIS实现了这些规范(并另外实现了其他有用的空间函数)。

四、PostgreSQL介绍

查看本人另一篇博客:https://blog.****.net/awangdea99/article/details/109219007