认识PostGIS
1、什么是PostGIS
PostGIS是在对象关系型数据库PostgreSQL上增加了存储管理空间数据的能力的开源空间数据库,空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。
它是PostgreSQL的扩展插件,在PostgreSQL的core(存储、检索、事务等)层之上实现GIS层的功能,它不能独立于PostgreSQL运行。
2、PostGIS解决什么问题?
产生的原因是什么?发展轨迹是什么?
空间数据库是为了存储和管理空间数据而存在的,在Postgis之前,是如何对空间数据进行存储和管理的呢?
在第一代地理信息系统(GIS)实现中,所有的空间数据都存储在平面文件(例如shp)中,用专门的GIS软件(即空间数据引擎)来解释和操作这些数据。它们是专为处理空间数据而构建的专有的、独立的系统,即应用程序和平面文件之间的耦合性非常高,平面文件里的空间数据没有数据独立性。
在第二代地理信息系统(GIS)实现中,将空间数据存储在关系数据库(RDBMS)中(以子表或LOB的方式来存储图形),此时关系型数据库仅仅是存放空间数据的容器,但仍然需要空间数据引擎为空间数据进出该容器提供通道,数据库中的空间数据仍然没有数据独立性。这个时候虽然有了“空间数据库”的概念,但并不彻底。
其优点是:支持通用的关系数据库管理系统,空间数据按BLOB存取,可跨数据库平台,与特定GIS平台结合紧密,应用灵活。
其缺点是:主要表现为,空间操作和处理无法在数据库内核中实现,数据模型较为复杂,扩展SQL比较困难,不易实现数据互操作。
Orace + ArcSDE是第二代GIS系统的典型解决方案。
在第三代地理信息系统(GIS)实现中,人们开始把空间数据类型当作第一级数据库对象,存储Geometry就同存储Int、Char等类型的数据一样,只需定义成Geometry数据类型即可,这个时候才可是真正意义上的“空间数据库”。空间数据库实现了从以GIS为中心向以数据库为中心的转变。之所以能够这样实现,是因为关系型数据库向对象关系型数据库的发展,数据库厂商借鉴了面向对象技术,支持抽象的数据类型(即用户可以自己定义数据类型,也称UDT)及其相关操作的定义。第三代地理信息系统,就不再需要专门的空间数据引擎去处理和操纵空间数据了,应用程序只需要通过SQL语言就能轻松地操纵空间数据。
使用SDO_GEOMETRY类型来表达Geometry,由于数据是结构化的,通过SQL查询空间数据即可了解数据内容,通过SQL即可非常便捷地对数据进行各种操作(例如更新)。这样的好处是显示易见的,它突破了空间数据引擎的种种障碍限制,在特定的环境下特别是用户的数据都是简单的点线面,并且业务只有相关的编辑方面,SQL操作将非常便捷直观。这些操作其实也降低了操作人员的GIS门槛,但是切记:高便利与高风险是时刻并存的,通过SQL修改图形难以兼顾数据的一致性。
3、PostGIS与ArcSDE的关系
要回答这个问题,先得明白ArcSDE是什么。
ArcSDE是ESRI提供的一项技术,可以访问和管理存储在关系型数据库中的空间数据。
与Postgis的相同点:
- 都可以作为空间数据库的实现;
- 都遵循OGC SFSQL以及ISO SQL/MM两个规范;
与Postgis的不同点:
- ArcSDE可作为不同关系型数据库的空间数据引擎(SDE即spatial data engine),Postgis不可以;
- ArcSDE可在不同关系型数据库中实现空间数据库,Postgis只能在PostgreSQL上实现空间数据库。
4、PostGIS的生态
谁在应用?被哪些软件支持?
关于谁在应用,参见:http://postgis.net/casestudy/
PostGIS已经成为了一个广泛使用的空间数据库,支持使用它存储和检索数据的第三方程序的数量也在增加。
支持PostGIS的程序包括服务器端和桌面端的开源软件和闭源软件。下表列出了一些使用或支持PostGIS的软件:
5、PostGIS包含的内容
有什么内容?遵循什么规范?
Postgis在PostgreSQL基础上,实现了空间数据类型、空间索引和空间函数。它所实现的这些内容,遵循了两个规范:OGC SFSQL以及ISO SQL/MM。
OGC:它是一个国际标准组织,成立于1994年,是一个由GIS厂商、计算机厂商、数据库厂商、美国联邦机构、标准组织以及学术界等部门代表组成的公益性行业协会。致力于实现地理空间数据与地理信息处理资源的全面集成,通过信息基础设施,广泛使用商业化的、可互操作的地理信息处理软件。
5.1 SFSQL
5.1.1 SFSQL约定的内容
5.1.2 SFSQL Geometry的对象模型
5.1.3 SFSQL 九交模型
5.1.4 SFSQL 基于九交模型的关系谓词
什么叫空间关系谓词?它是用来界定空间的运算符,类似于我们用>、<、=来判断一维可排序数据的关系一样。
5.1.5 SFSQL Geometry的WKT表达
5.1.6 SFSQL 基于预定义数据类型的SQL实现
5.1.7 SFSQL 基于扩展Geometry的SQL实现
5.1.7 SFSQL 在扩展Geometry上实现的函数
5.2 SQL/MM
5.2.1 SQL/MM 约定的内容
5.3 PostGIS在标准以外的扩展
5.3.1扩展EWKT、EWKB
5.3.2扩展GIS函数(一般以postgis_开头)
如addBBox(geometry)函数给所给的几何体加上一个边框。
如simplify(geometry,tolerance)函数可以对折线和多边形利用Douglas-Peuker算法进行一些节点进行删除,从而使表现的图形更简单而清晰,在网络传输数据时具有更高的效率。
详见帮助文件14章。
5.3.3扩展PostGIS管理函数
AddGeometryColumn、postgis_version()等函数。
5.3.4其它
例如对于矢量瓦片的支持。