OpenGIS 介绍(转)

值此FOSS4G大会即将召开之日,最近我会在Blog上依次介绍一些OpenGIS标准、架构及用于实现的软件。一方面给初涉此行的朋友一个快速入门的概览,另外一方面也是对我接触OpenGIS近一年来的总结。

OpenGIS定义了一组基于数据的服务,而数据的基础是要素(Feature)。所谓要素简单地说就是一个独立的对象,在地图中可能表现为一个多边形建筑物,在数据库中即一个独立的条目。要素具备两个必要的组成部分,几何信息和属性信息。OpenGIS将几何信息分为点、边缘、面和几何集合四种:其中咱们熟悉的线(Linestring)属于边缘的一个子类,而多边形(Polygon)是面的一个子类。也就是说OpenGIS定义的几何类型并不只仅是咱们常见的点、线、多边形三种,它提供了更复杂更详细的定义,加强了将来的可扩展性。另外,几何类型的设计中采用了组合模式(Composite),将几何集合(GeometryCollection)也定义为一种几何类型,相似地,要素集合(FeatureCollection)也是一种要素。属性信息没有作太大的限制,能够在实际应用中结合具体的实现进行设置。
相同的几何类型、属性类型的组合成为要素类型(FeatureType),要素类型相同的要素能够被存放在一个数据源中。而一个数据源只能拥有一个要素类型。所以,能够用要素类型来描述一组属性类似的要素。在面向对象的模型中,彻底能够把要素类型理解为一个类,而要素则是类的实例。
经过GIS中间件能够从数据源中取出数据,供WMS服务器和WFS服务器使用。
WMS服务器接收请求,根据请求内容的不一样,能够返回不一样格式的最终数据。例如,WMS能够返回经常使用图片格式的地图片断供最终用户阅读(相似Google Maps),其中地图是根据一个样式文件(SLD)生成的,它描述了地图的线划粗细,色彩等;WMS也能够返回GeoRSS和KML用来和其它地图服务互通。
WFS服务器也能够接收请求,但WFS将返回GML格式的地理信息数据。GML是一种基于XML的数据格式,它能够完整的再现数据,也是OpenGIS数据源的重要形式。也就是说,WFS返回的GML能够继续做为数据源。在WFS请求中,OpenGIS定义了一个Filter标准,用来实现对数据的筛选,使WFS更加灵活。另外一方面,WFS还支持经过WFS-t提交客户端对数据的修改。通俗地说,WMS是“只读”的,而WFS则是能够读写的。
草草说完,发现本身的理解也十分有限,若有谬误,还望读者不吝指正。另外还有WCS方面未曾涉及,要得到更进一步的了解,请下载OpenGIS的标准进行阅读。
opengis_architecture
今天来讲OpenGIS架构的软件、类库实现状况。OpenGIS是一个开放标准,不过它已经不只仅在开源世界发挥做用,许多商业软件也支持了OpenGIS的标准。固然,这里所提到的软件所有都是开源软件。 数据库

几何基础类库

表明: JTS(Java), GEOS(C++), Shapely(Python)浏览器

这类几何基础类库主要实现的是OpenGIS的Simple Feature Access标准,简单地说他们就是对几何类型(Geometry)进行了必定程度的封装。以JTS为例,它按照OpenGIS对于Geometry的描述实现了基于Java的接口和继承关系,制做好了可使用的相似Point、LineString这样的类。另外这些类库还广泛实现了OpenGIS的DE-9IM空间位置关系判断和一些经常使用的计算几何方法(如缓冲(buffer))。 此类软件是全部GIS类库的基础,正如几何是GIS的基础之一同样。服务器

数据源实现网络

表明:PostGIS(PostgreSQL),MySQL Spatial架构

数据源的实现主要是开源数据库的空间扩展。数据库的空间扩展不只仅在数据表中支持几何类型的存储,并且更提供了SQL级别的集合关系判断,例如,能够直接利用SQL查询在某个多边形内的点。 性能

中间件
表明:GeoTools(Java)
中间件在系统中扮演链接数据和服务的角色。GeoTools承担了从各类数据源(如PostGIS,GML,Shapefile,WFS)读取数据并将数据标准化的工做。Feature接口就定义在GeoTools中,不一样数据源的数据读出后被统一成包含一个Geometry成员(定义在JTS中)的Feature接口的实现。这样,进一步的操做只需面向Feature便可,省去了高层软件对于不一样数据源的解读过程。另外,GeoTools仍是OpenGIS标准的全面实现,其中包括Filter、坐标转换、GML。
WMS/WFS服务器 ui

表明: GeoServer(Java),MapServer(PHP)
地图服务器扮演向网络中的客户端提供地图服务的角色。这类地图服务器能够接收统一规范的WMS和WFS请求(request),返回多种格式的数据。这个过程有WMS/WFS规范的严格规定,因此,对客户端来讲其地图服务器的实现到底是什么并不会形成太大影响。这样的规范,为公共的、联合的地图服务创造了可能。
客户端 spa

表明:OpenLayers/MapBuilder(JavaScript),uDig(Java),QGIS(C++)
客户端分为浏览器和桌面客户端程序两种。以OpenLayers为表明的B/S系统客户端如今已经很是强大,它能够封装WMS请求,在浏览器上实现地图的切片载入功能。另外拖动、缩放都功能也很是完善,能够实现跨浏览器操做。最近的OpenLayers版本还支持了矢量编辑功能,能够经过WFS-t提交。而传统的桌面客户端程序功能则更增强大,支持多种包括WMS和WFS在内的数据源,另外编辑功能、操做性也要比浏览器中的强大。
Shapefile 设计

ESRI的Shapefile格式是GIS矢量文件格式的事实标准,一般由.shp, .shx, .prj, .dbf等文件组成。OpenGIS的实现软件广泛支持Shapefile的读写。Shapefile在GeoServer中能够直接做为数据源,可是这种方式并不被推荐,缘由很简单,基于文件的数据源可能形成性能不佳和数据丢失。
GML xml

GML是OpenGIS的标准规范之一,它基于xml描述地理数据。于Shapefile相比,xml更容易读写,易于在网络中以各类形式传播。同时,xml还具备可读性,人能够理解和辨识。GeoTools实现了GMLDataStore,所以在GeoServer中GML也能够直接做为数据源(须要下载GML扩展)。同时,GML的数据源为数据源动态化提供了实现的思路和可能性。
PostGIS

PostGIS是加拿大Refractions公司支持的开源项目,它为开源数据库PostgreSQL提供了空间支持。PostGIS安装后,PostgreSQL中出现一个模版数据库,新建空间数据库时只需以PostGIS为模版便可。PostGIS在SQL级别上实现了基本的空间运算功能。另外绝大多数开源GIS软件(即便是不严格遵照OpenGIS标准的)都支持PostGIS数据表的直接载入,读写等功能。毋庸置疑,PostGIS是OpenGIS数据源最佳实现。
MySQL Spatial

MySQL是开源数据库的大鳄,从MySQL4.0开始加入了Spatial扩展功能,实现了OpenGIS规定的几何数据类型,在SQL中的简单空间运算。可是从4.0以后到如今,MySQL的Spatial部分一直没有继续的更新和加强。加上早先MySQL在SQL上对空间运算支持的不完善(只支持基于最小外接矩形的关系判断),因此MySQL是开源数据源中一个不太让人满意的选择。不过因为MySQL在小型项目上的普遍引用,在一些状况下也是能够以MySQL为数据源的。
db4o?: 对象数据库做为数据源的可能性

OpenGIS的系统架构彻底是基于一个面向对象的模型的,而传统的关系数据库、Shapefile文件是如今应用的主流。在地理描述的过程当中,关系数据库的特性并无被彻底发挥,而为此还须要有中间件作ORM的工做。试想直接将FeatureType和Features以对象形式存入对象数据库,整个系统至少在理论上能够减小一层。不过,以对象数据库做为数据源,还须要对象数据库的性能进一步提高。而以后的和已有软件的对接应该不成问题,由于db4o能够直接存储Feature对象和Geometry对象。
可是所以产生的数据对实现的依赖性又是一个问题:数据和实现紧密耦合,数据中捆绑了代码,虽然db4o号称支持Java和.NET的的互操做,可是对于其它实现来讲又成了问题。从这个角度来讲,对象数据库做为数据源是一种倒退。
为何没有KML?

KML做为一种新的标准(没有在乎最后是否经过),它的做用主要是网络中地理信息的传输。KML是一种面向客户端设计的数据形式,这是它不能取代GML地位的缘由,同时也是它在GoogleEarth和不少地图应用上远强于GML的缘由。对照一下KML和GML的形式就很容易理解,GML将属性数据存储为Element,而KML则是以超文本的形式存储属性数据,前者便于数据读取,后者便于客户端表现。于KML很相似的就是GeoRSS,效果是类似的。

相关文章
相关标签/搜索