PostgreSQL & PostGIS 1 :为什么使用?
空间数据管理解决方案
由于空间数据具有空间位置、非结构化、空间关系、分类编码、海量数据等特征,一般的商用数据库管理系统难以满足要求。为了提高数据库管理系统(DBMS)对空间数据的管理能力,国内外先后出现过如下几种方案:
1.文件与关系数据库混合管理系统
2.全关系型空间数据库管理系统
3.关系型数据库+空间数据引擎
4.扩展对象关系型数据库管理系统
5.面向对象空间数据库管理系统
其中,以3和4使用最为广泛,3的典型代表为ArcSDE+关系数据库(Oracle/MySQL/PostgreSQL等),4的典型代表为PostgreSQL+PostGIS。这两种方式的优缺点是什么呢?
关系型数据库+空间数据引擎
此种方案为GIS厂商研发的一种中间件解决方案。用户将自己的空间数据交给独立于数据库之外的空间数据引擎,由空间数据引擎来组织空间数据在关系型数据库中的存储;当用户需要访问数据的时候,再通知空间数据引擎,由引擎从关系型数据库中取出数据,并转化为客户可以使用的方式。关系型数据库仅仅是存放空间数据的容器,而空间数据引擎则是空间数据进出该容器的转换通道。这类系统的典型代表有ESRI的ArcSDE和MapInfo的SpatialWare。
优点:访问速度快,支持通用的关系数据库管理系统,空间数据按BLOB存取,可跨数据库平台,与特定GIS平台结合紧密,应用灵活。
缺点:空间操作和处理无法在数据库内核中实现,数据模型较为复杂,扩展SQL比较困难,不易实现数据共享与互操作。
扩展对象关系型数据库管理系统
此种方案为数据库厂商研发的管理空间数据一种解决方案。由于关系型数据库难以管理非结构化数据(也包括空间数据),数据库厂商借鉴面向对象技术,发展了对象关系型数据库管理系统。
此系统支持抽象的数据类型(ADT)及其相关操作的定义;用户利用这种能力可以增加空间数据类型及相关函数,从而将空间数据类型与函数就从中间件(空间数据引擎)转移到了数据库管理系统中,客户也不必采用空间数据引擎的专用接口进行编程,而是使用增加了的空间数据类型和函数的标准扩展型SQL语言来操作空间数据。
这类支持空间扩展的产品有Oracle的Oracle Spatial, IBM的DB2 Spatial Extender, PostgreSQL的PostGIS。
优点:空间数据的管理与通用数据库系统融为一体,空间数据按对象存取,可在数据库内核中实现空间操作和处理,扩展SQL比较方便,较易实现数据共享与互操作。
缺点:实现难度大,压缩数据比较困难,目前的功能和性能与第一类系统尚存在差距。
PostgreSQL介绍
PostgreSQL是一种对象关系型数据库管理系统,支持大部分SQL标准并且提供了许多其他现代特性。在开源数据库中,为除MySQL外的第二大数据库,且近些年有奋起直追的趋势。
PostgreSQL相对于其他关系数据库主要有以下优势:
1.有GIS扩展PostGIS插件
这个优势对GIS开发最为重要
2.对很多高级开发语言提供原生的编程接口
3.支持服务器端脚本,如Python/R等
4.自带全文搜索功能
5.支持把70种外部数据源当作自己数据库进行查询
......
PostgreSQL空间数据支持
PostgreSQL提供了以下空间数据支持能力:
1.定义了一些基本的集合实体类型,包括:点(POINT)、线(LINE)、线段(LSEG)、方形(BOX)、多边形(POLYGON)和圆(CIRCLE)等;
2.定义了一系列的函数和操作符来实现几何类型的操作和运算;
3.引入空间数据索引R-tree。
PostgreSQL尽管提供了上述几项支持空间数据的特性,但很难达到GIS要求,主要表现在:
1.缺乏复杂的空间类型;
2.没有提供空间分析;
3.没有提供投影变换功能。
PostGIS的出现补充了这部分能力。PostGIS是PostgreSQL的一个扩展,它的出现让人们开始重视基于数据库管理系统的空间扩展方式,而且使PostGIS成为管理空间数据的主流技术。PostGIS支持的主要特性如下,具体内容参加百度百科或维基百科。
1.支持所有的空间数据类型
2.支持所有的对象表达方法
3.支持所有的数据存取和构造方法
4.多种空间分析函数
5.提供了对于元数据的支持
6.提供了一系列的二元谓词用于检测空间对象之间的空间关系
7.提供了空间操作符用于空间数据操作
8.数据库坐标变换
9.球体长度运算
10.三维的几何类型支持
11.空间聚集函数
12.栅格数据的存储和访问
解决方案选择
在当前大数据时代的背景下,与位置有关的数据占比和使用率会愈来愈大,数据量也在以几何数量级增加,因此需要考虑到数据增加时的承载能力提升问题,采用GIS厂商提供的第3类方案会受制于许可和软件采购等因素。因此方案4有较大优势,其中PostgreSQL+PostGIS则为当前最为成熟的首选方案。