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,效果是類似的。

相關文章
相關標籤/搜索