總體介紹
1986年,加州大學伯克利分校的Michael Stonebraker教授領導了Postgres的項目,它是PostgreSQL的前身。隨後出現了PostGIS,PostGIS是對象-關係型資料庫系統PostgreSQL的一個擴展,它的出現讓人們開始重視基於資料庫管理系統的空間擴展方式,而且使PostGIS有望成為今後管理空間數據的主流技術。
由於空間數據具有空間位置、非結構化、空間關係、分類編碼、海量數據等特徵,一般的商用資料庫管理系統難以滿足要求。
為了提高資料庫管理系統(DBMS)對空間數據的管理能力,國內外先後出現過:檔案與關係資料庫混合管理系統、全關係型空間資料庫管理系統、關係型資料庫+空間數據引擎、擴展對象關係型資料庫管理系統,以及面向對象空間資料庫管理系統等多種解決方案。目前,國內外較為流行的主要集中在“關係型資料庫+空間數據引擎”、“擴展對象關係型資料庫”兩方面。
“關係型資料庫+空間數據引擎”通常是近年來由GIS廠商研發的一種中間件解決方案。用戶將自己的空間數據交給獨立於資料庫之外的空間數據引擎,有空間數據引擎來組織空間數據在關係型資料庫中的存儲;當用戶需要訪問數據的時候,再通知空間數據引擎,有引擎從關係型資料庫中取出數據,並轉化為客戶可以使用的方式。
因此,關係型資料庫僅僅是存放空間數據的容器,而空間數據引擎則是空間數據進出該容器的轉換通道。這類系統的典型代表有ESRI的ArcSDE和MapInfo的SpatialWare。其優點是,訪問速度快,支持通用的關係資料庫管理系統,空間數據按BLOB存取,可跨資料庫平台,與特定GIS平台結合緊密,套用靈活。其缺點主要表現為,空間操作和處理無法在資料庫核心中實現,數據模型較為複雜,擴展SQL比較困難,不易實現數據共享與互操作。
擴展對象關係型資料庫管理系統是由資料庫廠商研發的管理空間數據一種解決方案。由於關係型資料庫難以管理非結構化數據(也包括空間數據),資料庫廠商借鑑面向對象技術,發展了對象關係型資料庫管理系統。
此系統支持抽象的數據類型(ADT)及其相關操作的定義;用戶利用這種能力可以增加空間數據類型及相關函式,從而將空間數據類型與函式就從中間件(空間數據引擎)轉移到了資料庫管理系統中,客戶也不必採用空間數據引擎的專用接口進行編程,而是使用增加了的空間數據類型和函式的標準擴展型SQL語言來操作空間數據。
這類支持空間擴展的產品有Oracle的Oracle Spatial, IBM的DB2 Spatial Extender, Informix 的Spatial DataBlade。其優點是,空間數據的管理與通用資料庫系統融為一體,空間數據按對象存取,可在資料庫核心中實現空間操作和處理,擴展SQL比較方便,較易實現數據共享與互操作。其缺點主要表現為,實現難度大,壓縮數據比較困難,目前的功能和性能與第一類系統尚存在差距。
目前開源空間信息軟體領域性能最優秀的資料庫軟體當屬PostgreSQL資料庫,而構建在其上的空間對象擴展模組PostGIS則使得其成為一個真正的大型空間資料庫。PostGIS在對象關係型資料庫PostgreSQL上增加了存儲管理空間數據的能力,相當於Oracle的spatial部分。PostGIS最大的特點是符合併且實現了OpenGIS的一些規範,是最著名的開源GIS資料庫。
緣起PostgreSQL
1986年,加州大學伯克利分校的Michael Stonebraker教授領導了Postgres的項目,它是PostgreSQL的前身。這個項目的成果非常顯著,在現代資料庫的許多方面都作出了大量的貢獻,如在面向對象的資料庫、部分索引技術、規則、過程和資料庫擴展方面都取得了顯著的成果。同時,Stonebraker將PostgreSQL納入到BSD著作權體系中,使得PostgreSQL在各種科研機構和一些公共服務組織得到了廣泛的套用。
在PostgreSQL中已經定義了一些基本的集合實體類型,這些類型包括:點(POINT)、線(LINE)、線段(LSEG)、方形(BOX)、多邊形(POLYGON)和圓(CIRCLE)等;另外,PostgreSQL定義了一系列的函式和操作符來實現幾何類型的操作和運算;同時,PostgreSQL引入空間數據索引R-tree。
儘管在PostgreSQL提供了上述幾項支持空間數據的特性,但其提供的空間特性很難達到GIS的要求,主要表現在:缺乏複雜的空間類型;沒有提供空間分析;沒有提供投影變換功能。為了使得PostgreSQL更好的提供空間信息服務,PostGIS應運而生。
PostGIS簡介
PostGIS是對象關係型資料庫系統PostgreSQL的一個擴展,PostGIS提供如下空間信息服務功能:空間對象、空間索引、空間操作函式和空間操作符。同時,PostGIS遵循OpenGIS的規範。
PostGIS的著作權被納入到GNU的GPL中,也就是說任何人可以自由得到PostGIS的源碼並對其做研究和改進。正是由於這一點,PostGIS得到了迅速的發展,越來越多的愛好者和研究機構參與到PostGIS的套用開發和完善當中。
PostGIS發展歷程
PostGIS是由Refractions Research Inc開發的,Refractions是一家GIS和資料庫諮詢公司,Refraction公司最初是在PostgreSQL的基礎上研究空間資料庫的實現,由於PostgreSQL所提供的空間數據類型和功能遠遠不能滿足GIS的需求,研究工作經常陷入到進退維谷的境地,最終的結果往往是耗費了大量的人力物力,而產品卻極其複雜並且性能低下。這些原因直接或間接促成PostGIS項目的實施。
PostGIS的實施也不是一帆風順,直到PostgreSQL 7.1發布之後,PostGIS的實現才變為可能,主要原因是7.1版本之前PostgreSQL支持的記錄大小最大為8Kb,從7.1之後,PostgreSQL將這一限制擯棄。即使採用二進制方式存儲,空間數據對象也往往會經常超過8Kb,如果這個限制存在的話,空間數據的存儲就無從談起。
伴隨著這一限制的消除,PostGIS的研究和開發也隨即在2001年的4月展開,並於2001年的5月發布了PostGIS的第一版(PostGIS V0.1)。在PostGIS的第一版中,主要包括空間資料庫、採用標準表示方式的空間數據對象、支持快速查詢的空間索引和一些簡單的分析函式(如area和length等)。PostGIS V0.1中支持的空間數據對象類型包括:點、線、多邊形、幾何對象類型,以及多點、多線、多多邊形的幾何對象類型。
2001年5月發布的PostGIS V0.2增加了對於Windows平台下二進制表示的支持,同時為新用戶提供幫助文檔。不過,用戶反饋PostGIS的函式命名沒有遵循OpenGIS規範。
2001年7月PostGIS V0.5發布,PostGIS增加了OpenGIS現有的所有功能性函式並在函式的命名上與其保持一致。增加了24個OpenGIS存取函式,同時刪除了與這些函式功能等價的不標準的原有函式。
伴隨著來自不列顛哥倫比亞省政府的資金支持,對於在球體表面的長度運算支持也加入到0.5版中。同期,Refractions公司將British Columbia省的數字道路地圖集移植到PostGIS中,同時使用資料庫的模式和數據轉換功能為地圖集客戶提供支持(急救車派遣、緊急事物回響,以及其他市政事物等)。
PostGIS V0.5之所以重要,還有一個原因就是Minnesota大學的Mapserver的發布。Minnesota大學的Mapserver是一個開源的網際網路地圖發布引擎,就像ESRI公司的ArcIMS系統,Mapserver同時增加了對於PostGIS的支持。
在Mapserver中,提供了一個Web驅動的接口,這個接口用於檢查資料庫中數據的空間特徵。在PostGIS中,PostGIS為了使得Mapserver能夠更好的提供服務,提供了一個易於讀寫的數據源,這個數據源將會在網路事務繁忙的時候發揮其效用。比如,如果用標準的GIS檔案作為數據源,如果有兩個用戶並發的對同一檔案進行寫入操作,這樣將會不可避免的導致操作衝突,而利用PostGIS就能夠很好的解決這個缺陷,同時確保數據的完整性。
2001年9月,PostGIS V0.6發布,PostGIS V0.6提供了完整的OpenGIS支持,加入了標準的元數據表,並且提供了對於空間參照系統標識的支持。另外還加入了OpenGIS支持的12個功能函式,同時對於Mapserver的支持得到了進一步的增強。
2002年2月,PostgreSQL V7.2發布,在7.2版中,GIST索引的API函式作了一點改進。由於這些API函式同樣套用於PostGIS中,這給PostGIS V0.6的套用帶來了麻煩,促使PostGIS必須作出改進適應PostgreSQL的變化。2002年PostGIS V0.7發布,在0.7版中,提供了新的對於GIST的API函式支持,同時在這一版中,提供了對於坐標變換的支持。
從2002年到現在,PostGIS又陸續發布了一系列的新版本,這些PostGIS產品在繼承PostGIS產品原有優點的同時,又針對PostGIS本身存在的問題和不足進行了進一步的改進。到現在為止,PostGIS的最新版本是PostGIS V1.1.4。PostGIS V1.1.4主要改進的地方包括:⑴提供了對於將要發布的PostgreSQL V8.2的支持;⑵修復了函式collect中存在的bug;⑶在MakeBox2d和MakeBox3d中增加了對SRID的匹配檢查;⑷提高了pgsql2shp的運行並發性;⑸進一步改進了對於Java的支持。
PostGIS特性
PostGIS支持所有的空間數據類型,這些類型包括:點(POINT)、線(LINESTRING)、多邊形(POLYGON)、多點(MULTIPOINT)、多線(MULTILINESTRING)、多多邊形(MULTIPOLYGON)和集合對象集(GEOMETRYCOLLECTION)等。PostGIS支持所有的對象表達方法,比如WKT和WKB。
PostGIS支持所有的數據存取和構造方法,如GeomFromText()、AsBinary(),以及GeometryN()等。
PostGIS提供簡單的空間分析函式(如Area和Length)同時也提供其他一些具有複雜分析功能的函式,比如Distance。
PostGIS提供了對於元數據的支持,如GEOMETRY_COLUMNS和SPATIAL_REF_SYS,同時,PostGIS也提供了相應的支持函式,如AddGeometryColumn和DropGeometryColumn。
PostGIS提供了一系列的二元謂詞(如Contains、Within、Overlaps和Touches)用於檢測空間對象之間的空間關係,同時返回布爾值來表征對象之間符合這個關係。
PostGIS提供了空間操作符(如Union和Difference)用於空間數據操作。比如,Union操作符融合多邊形之間的邊界。兩個交迭的多邊形通過Union運算就會形成一個新的多邊形,這個新的多邊形的邊界為兩個多邊形中最大邊界。
PostGIS額外功能
資料庫坐標變換
資料庫中的幾何類型可以通過Transform函式從一種投影系變換到另一種投影系中。在OpenGIS中的幾何類型都將SRID作為自身結構的一部分,但不知什麼原因,在OpenGIS的SFSQL規範中,並沒有引入Transform。
球體長度運算
存儲在普通地理坐標系中的集合類型如果不進行坐標變換是無法進行程度運算的,OpenGIS所提供的坐標變換使得積累類型的程度計算變成可能。
三維的幾何類型
SFSQL規範只是針對二維集合類型。OpenGIS提供了對三維集合類型的支持,具體是利用輸入的集合類型維數來決定輸出的表現方式。例如,即便所有幾何對象內部都以三維形式存儲,純粹的二維交叉點通常還是以二維的形式返回。此外,還提供幾何對象在不同維度間轉換的功能。
空間聚集函式
在資料庫中,聚集函式是一個執行某一屬性列所有數據操作的函式。比如Sum和Average,Sum是求某一關係屬性列的數據總和,Average則是求取某一關係屬性列的數據平均值。與此對應,空間聚集函式也是執行相同的操作,不過操作的對象是空間數據。例如聚集函式Extent返回一系列要素中的最大的包裹矩形框,如“SELECT EXTENT(GEOM) FROM ROADS”這條SQL語句的執行結果是返回ROADS這個數據表中所有的包裹矩形框。
柵格數據類型
PostGIS通過一種新的數據類型片,提供對於大的柵格數據對象的存儲。片由以下幾個部分組成:包裹矩形框、SRID、類型和一個位元組序列。通過將片的大小控制在資料庫頁值(32×32)以下,使得快速的隨即訪問變成可能。一般大的圖片也是通過將其切成32×32像素的片然後再存儲在資料庫中的。
PostGIS發展展望
目前,由於“關係型資料庫+空間數據引擎”的技術方案訪問迅速、與GIS聯繫緊密的優點,在套用中占有一定的優勢,但空間數據引擎獨立於資料庫核心,難以充分利用關係型資料庫中各種成熟的數據管理、訪問技術,成為進一步發展的致命弱點。另外,難以支持擴展SQL,不易實現數據共享與互操作等問題也逐漸暴露出來。
儘管面向對象空間資料庫管理系統最適應於空間數據的表達和管理,不僅支持變長記錄,而且支持對象的嵌套、信息的繼承與聚集。有關面向對象資料庫管理系統的研究已有十多年了,由於缺乏良好的數據基礎,在訪問速度尚未有重大突破,難以發展成熟,據估計在較長一段時間內面向對象資料庫管理系統都不會替代對象關係型資料庫管理系統。
擴展對象關係型資料庫管理系統無疑將成為以後的發展方向。儘管目前PostGIS/PostgreSQL和Spatial Oracle的性能與ArcSDE仍有一定的差距,但是隨著資料庫廠商對空間數據管理市場的不斷重視、結構化數據管理方式與空間數據管理方式的進一步融合、數據壓縮傳輸技術的不斷提高,基於資料庫管理系統的空間擴展方式將會不斷的完善,成為今後管理空間數據的主流技術。而多數GIS廠商則應將精力集中到空間分析、空間模型等方面,從而形成較好的社會分工結構。
目前,軟體開源已經成為IT界的一種發展趨勢,越來越多的軟體加入到開源系統中。PostGIS不論在功能還是擴展性方面都不落後於商業GIS平台的空間資料庫,而且由於其原始碼的公開性,更加容易吸引廣大愛好者參與到PostGIS的開發中,不斷完善現有的功能同時進一步擴展新的特性,相信PostGIS的發展前景將會非常美好。