3.2. 数据库

3.2.1. PostgreSQL

PostgreSQL(对象-关系数据库管理系统)是由加州大学伯克利分校计算机系开发的Postgres软件包发展而来的。PostgreSQL几乎支持所有SQL构件(包括子查询,事物和用户定义类型和函数),并且可以获得非常广阔范围的开发语言绑定(包括C,C++,Java,Perl,tcl,和Python)。在空间数据管理方面, PostgreSQL定义了一系列的几何数据类型, 包括点(point),线(line),线段(lseg), 方形(box), 闭合和开放路径(path),多边形(polygon), 圆(circle)。但是PostgreSQL提供的几何类型并不支持OpenGIS的SFS规范, 缺乏复杂几何类型, 没有提供空间分析和投影变换模块, 很难达到GIS的应用要求。

3.2.2. PostGIS

PostGIS(http://www.postgis.org/)是一个功能强大的开源空间数据库。它是在1986年诞生于加州大学伯克利分校。PostGIS是PostgreSQL(对象-关系型数据库管理系统)的一个扩展。它支持所有的空间数据类型与一系列重要的GIS 函数,包括完全的OpenGIS 支持、拓扑结构和用于查看、编辑GIS 数据桌面用户相关工具和基础网络访问工具。作为PostgreSQL对象关系数据库系统的扩展模块,PostGIS 支持GIS 空间数据的存储,PostGIS 遵循OGC 的Simple Feature for SQL。PostGIS在PostgreSQL基础上增加了存储空间数据的能力,与Oracle中Spatial相似。PostGIS也具有大型数据库的特性,如数据备份,数据库恢复,灾难恢复等。

PostGIS支持所有的空间数据类型,这些类型包括:点(POINT)、线(LINESTRING)、 多边形(POLYGON)、多点(MULTIPOINT)、 多线(MULTILINESTRING)、 多多边形(MULTIPOLYGON)和集合对象集(GEOMETRYCOLLECTION)等。PostGIS支持所有的对象表达方法,比如WKT和WKB。PostGIS支持所有的数据存取和构造方法,如GeomFromText()、AsBinary(),以及GeometryN()等。PostGIS提供简单的空间分析函数(如Area和Length)同时也提供其他一些具有复杂分析功能的函数,比如Distance。PostGIS提供了对于元数据的支持,如GEOMETRYCOLUMNS和SPATIAL REF SYS,同时,PostGIS也提供了相应的支持函数,如AddGeometryColumn和DropGeometryColumn。PostGIS提供了一系列的二元谓词(如Contains、Within、Overlaps和Touches)用于检测空间对象之间的空间关系,同时返回布尔值来表征对象之间符合这个关系。PostGIS提供了空间操作符(如Union和Difference)用于空间数据操作。比如,Union操作符融合多边形之间的边界。两个交迭的多边形通过Union运算就会形成一个新的多边形,这个新的多边形的边界为两个多边形中最大边界。

3.2.3. PostGIS与PostgreSQL的对比

总的来说PostGIS相当于PostgreSQL的升级版,在此基础上完善了空间分析操作以及更复杂的几何量算。

3.2.4. MySQL

MySQL(https://www.mysql.com/)是一种小型关联数据库管理系统。这种数据库的最大特点是,它将数据保存在不同的数据表中,而不是将全部的数据都存放在仓库中,这样提高了数据库的灵活性,增加了查询的速度。它现在同样支持空间扩展,该数据库能够生成、保存及分析空间特征,它使用了OGC建议的含有Geometry类型的,负荷SQL语句环境的一个自己,提供了一组对空间数据实现很多操作的函数,这些函数可以在各种格式间转换几何值,并且访问几何值的定性或定量等属性信息。开发者为瑞典MySQLAB公司。该公司在2008年被Sun公司收购。

MySQL是完全网络化的跨平台关系型数据库,因为其体积小、速度快、总体拥有成本低,且开放源码,被广泛的应用于Internet上的中小型网站中。

3.2.5. MongoDB

MongoDB(https://www.mongodb.com/)是一个开源面向文档的NoSQL 数据库,用C++编写。它提供一种强大、灵活、可扩展的数据存储形式。MongoDB功能丰富,内置MapReduce聚合的支持,支持地理空间索引。MongoDb具有弱一致性,保证用户的访问速度,文档结构的访问方式,能够更便捷地获取数据,内置GirdFS 支持大容量的储存,内置Sharding,第三方支持丰富,性能优越。MongoDB在存储空间数据比传统的关系数据库如MySQL 和PostgreSQL 更具优势。MongoDB 对空间数据是原生支持,不需要安装第三方空间数据库引擎即可构建空间索引进行进行快速的空间查询。MongoDB 支持平面( 2d) 和球面( 2dsphere indexes) 两种空间索引。面向大众型的GIS 应用会存储大量的POI 数据或者用户产生的位置数据,利用MongoDB 储存可以提高检索效率。MongoDB 支持MapReduce计算模型,处理海量LBS数据有较高的效率。MongoDB有多种基于的Node.JS的第三方库实现对MongoDB的操作,这样使得对数据的操作更加的便捷。

3.2.6. PostGIS、MySQL和MongoDB的比较

总的来说,PostGIS对GIS原生支持的最多;MySQL胜在速度快,体积小但并不是所有功能都免费;MongoDB处理数据快,适用于大数据级别的数据处理,在弱GIS应用中或简单的LBS应用中有天然的优势。