PostGis

2022-02-18 09:23 更新

PostgreSQL 是一種對象-關系型數(shù)據(jù)庫管理系(ORDBMS),也是目前功能最強大、特性最豐富和最復雜的自由軟件數(shù)據(jù)庫系統(tǒng)。它起源于伯克利(BSD)的數(shù)據(jù)庫研究計劃,目前是最重要的開源數(shù)據(jù)庫產(chǎn)品開發(fā)項目之一, 有著非常廣泛的用戶。PostGIS在對象關系型數(shù)據(jù)庫PostgreSQL上增加了存儲管理空間數(shù)據(jù)的能力,相當于Oracle的spatial部分。PostGIS最大的特點是符合并且實現(xiàn)了OpenGIS的一些規(guī)范,是最著名的開源GIS數(shù)據(jù)庫。

1986年,加州大學伯克利分校的Michael Stonebraker教授領導了Postgres的項目,它是PostgreSQL的前身。隨后出現(xiàn)了PostGIS,PostGIS是對象-關系型數(shù)據(jù)庫系統(tǒng)PostgreSQL的一個擴展,它的出現(xiàn)讓人們開始重視基于數(shù)據(jù)庫管理系統(tǒng)的空間擴展方式,而且使PostGIS有望成為今后管理空間數(shù)據(jù)的主流技術。

    
    由于空間數(shù)據(jù)具有空間位置、非結(jié)構(gòu)化、空間關系、分類編碼、海量數(shù)據(jù)等特征,一般的商用數(shù)據(jù)庫管理系統(tǒng)難以滿足要求。

為了提高數(shù)據(jù)庫管理系統(tǒng)(DBMS)對空間數(shù)據(jù)的管理能力,國內(nèi)外先后出現(xiàn)過:文件與關系數(shù)據(jù)庫混合管理系統(tǒng)、全關系型空間數(shù)據(jù)庫管理系統(tǒng)、關系型數(shù)據(jù)庫+空間數(shù)據(jù)引擎、擴展對象關系型數(shù)據(jù)庫管理系統(tǒng),以及面向?qū)ο罂臻g數(shù)據(jù)庫管理系統(tǒng)等多種解決方案。目前,國內(nèi)外較為流行的主要集中在“關系型數(shù)據(jù)庫+空間數(shù)據(jù)引擎”、“擴展對象關系型數(shù)據(jù)庫”兩方面。

    
    “關系型數(shù)據(jù)庫+空間數(shù)據(jù)引擎”通常是近年來由GIS廠商研發(fā)的一種中間件解決方案。用戶將自己的空間數(shù)據(jù)交給獨立于數(shù)據(jù)庫之外的空間數(shù)據(jù)引擎,有空間數(shù)據(jù)引擎來組織空間數(shù)據(jù)在關系型數(shù)據(jù)庫中的存儲;當用戶需要訪問數(shù)據(jù)的時候,再通知空間數(shù)據(jù)引擎,由引擎從關系型數(shù)據(jù)庫中取出數(shù)據(jù),并轉(zhuǎn)化為客戶可以使用的方式。

因此,關系型數(shù)據(jù)庫僅僅是存放空間數(shù)據(jù)的容器,而空間數(shù)據(jù)引擎則是空間數(shù)據(jù)進出該容器的轉(zhuǎn)換通道。這類系統(tǒng)的典型代表有ESRI的ArcSDE和MapInfo的SpatialWare。其優(yōu)點是,訪問速度快,支持通用的關系數(shù)據(jù)庫管理系統(tǒng),空間數(shù)據(jù)按BLOB存取,可跨數(shù)據(jù)庫平臺,與特定GIS平臺結(jié)合緊密,應用靈活。其缺點主要表現(xiàn)為,空間操作和處理無法在數(shù)據(jù)庫內(nèi)核中實現(xiàn),數(shù)據(jù)模型較為復雜,擴展SQL比較困難,不易實現(xiàn)數(shù)據(jù)共享與互操作。

    
    擴展對象關系型數(shù)據(jù)庫管理系統(tǒng)是由數(shù)據(jù)庫廠商研發(fā)的管理空間數(shù)據(jù)一種解決方案。由于關系型數(shù)據(jù)庫難以管理非結(jié)構(gòu)化數(shù)據(jù)(也包括空間數(shù)據(jù)),數(shù)據(jù)庫廠商借鑒面向?qū)ο蠹夹g,發(fā)展了對象關系型數(shù)據(jù)庫管理系統(tǒng)。

此系統(tǒng)支持抽象的數(shù)據(jù)類型(ADT)及其相關操作的定義;用戶利用這種能力可以增加空間數(shù)據(jù)類型及相關函數(shù),從而將空間數(shù)據(jù)類型與函數(shù)就從中間件(空間數(shù)據(jù)引擎)轉(zhuǎn)移到了數(shù)據(jù)庫管理系統(tǒng)中,客戶也不必采用空間數(shù)據(jù)引擎的專用接口進行編程,而是使用增加了的空間數(shù)據(jù)類型和函數(shù)的標準擴展型SQL語言來操作空間數(shù)據(jù)。

    
    這類支持空間擴展的產(chǎn)品有Oracle的Oracle Spatial, IBM的DB2 Spatial Extender, Informix 的Spatial DataBlade。其優(yōu)點是,空間數(shù)據(jù)的管理與通用數(shù)據(jù)庫系統(tǒng)融為一體,空間數(shù)據(jù)按對象存取,可在數(shù)據(jù)庫內(nèi)核中實現(xiàn)空間操作和處理,擴展SQL比較方便,較易實現(xiàn)數(shù)據(jù)共享與互操作。其缺點主要表現(xiàn)為,實現(xiàn)難度大,壓縮數(shù)據(jù)比較困難,目前的功能和性能與第一類系統(tǒng)尚存在差距。

目前開源空間信息軟件領域最性能優(yōu)秀的數(shù)據(jù)庫軟件當屬PostgreSQL數(shù)據(jù)庫,而構(gòu)建在其上的空間對象擴展模塊PostGIS則使得其成為一個真正的大型空間數(shù)據(jù)庫。

    

緣起PostgrSQL

1986年,加州大學伯克利分校的Michael Stonebraker教授領導了Postgres的項目,它是PostgreSQL的前身。這個項目的成果非常顯著,在現(xiàn)代數(shù)據(jù)庫的許多方面都作出了大量的貢獻,如在面向?qū)ο蟮臄?shù)據(jù)庫、部分索引技術、規(guī)則、過程和數(shù)據(jù)庫擴展方面都取得了顯著的成果。同時,Stonebraker將PostgreSQL納入到BSD版權(quán)體系中,使得PostgreSQL在各種科研機構(gòu)和一些公共服務組織得到了廣泛的應用。


    在PostgreSQL中已經(jīng)定義了一些基本的集合實體類型,這些類型包括:點(POINT)、線(LINE)、線段(LSEG)、方形(BOX)、多邊形(POLYGON)和圓(CIRCLE)等;另外,PostgreSQL定義了一系列的函數(shù)和操作符來實現(xiàn)幾何類型的操作和運算;同時,PostgreSQL引入空間數(shù)據(jù)索引R-tree。

盡管在PostgreSQL提供了上述幾項支持空間數(shù)據(jù)的特性,但其提供的空間特性很難達到GIS的要求,主要表現(xiàn)在:缺乏復雜的空間類型;沒有提供空間分析;沒有提供投影變換功能。為了使得PostgreSQL更好的提供空間信息服務,PostGIS應運而生。

    

PostGIS簡介

PostGIS是對象關系型數(shù)據(jù)庫系統(tǒng)PostgreSQL的一個擴展,PostGIS提供如下空間信息服務功能:空間對象、空間索引、空間操作函數(shù)和空間操作符。同時,PostGIS遵OpenGIS的規(guī)范。

    
    PostGIS的版權(quán)被納入到GNU的GPL中,也就是說任何人可以自由得到PostGIS的源碼并對其做研究和改進。正是由于這一點,PostGIS得到了迅速的發(fā)展,越來越多的愛好者和研究機構(gòu)參與到PostGIS的應用開發(fā)和完善當中。

PostGIS發(fā)展歷程

    
    PostGIS是由Refractions Research Inc開發(fā)的,Refractions是一家GIS和數(shù)據(jù)庫咨詢公司,Refraction公司最初是在PostgreSQL的基礎上研究空間數(shù)據(jù)庫的實現(xiàn),由于PostgreSQL所提供的空間數(shù)據(jù)類型和功能遠遠不能滿足GIS的需求,研究工作經(jīng)常陷入到進退維谷的境地,最終的結(jié)果往往是耗費了大量的人力物力,而產(chǎn)品卻極其復雜并且性能低下。這些原因直接或間接促成PostGIS項目的實施。

PostGIS的實施也不是一帆風順,直到PostgreSQL 7.1發(fā)布之后,PostGIS的實現(xiàn)才變?yōu)榭赡?,主要原因?.1版本之前PostgreSQL支持的記錄大小最大為8Kb,從7.1之后,PostgreSQL將這一限制擯棄。即使采用二進制方式存儲,空間數(shù)據(jù)對象也往往會經(jīng)常超過8Kb,如果這個限制存在的話,空間數(shù)據(jù)的存儲就無從談起.

    
    伴隨著這一限制的消除,PostGIS的研究和開發(fā)也隨即在2001年的4月展開,并于2001年的5月發(fā)布了PostGIS的第一版(PostGIS V0.1)。在PostGIS的第一版中,主要包括空間數(shù)據(jù)庫、采用標準表示方式的空間數(shù)據(jù)對象、支持快速查詢的空間索引和一些簡單的分析函數(shù)(如area和length等)。PostGIS V0.1中支持的空間數(shù)據(jù)對象類型包括:點、線、多邊形、幾何對象類型,以及多點、多線、多多邊形的幾何對象類型。

2001年5月發(fā)布的PostGIS V0.2增加了對于Windows平臺下二進制表示的支持,同時為新用戶提供幫助文檔。不過,用戶反饋PostGIS的函數(shù)命名沒有遵循OpenGIS規(guī)范。

2001年7月PostGIS V0.5發(fā)布,PostGIS增加了OpenGIS現(xiàn)有的所有功能性函數(shù)并在函數(shù)的命名上與其保持一致。增加了24個OpenGIS存取函數(shù),同時刪除了與這些函數(shù)功能等價的不標準的原有函數(shù)。

    
    伴隨著來自不列顛哥倫比亞省政府的資金支持,對于在球體表面的長度運算支持也加入到0.5版中。同期,Refractions公司將British Columbia省的數(shù)字道路地圖集移植到PostGIS中,同時使用數(shù)據(jù)庫的模式和數(shù)據(jù)轉(zhuǎn)換功能為地圖集客戶提供支持(急救車派遣、緊急事物響應,以及其他市政事物等)。

PostGIS V0.5之所以重要,還有一個原因就是Minnesota大學的Mapserver的發(fā)布。Minnesota大學的Mapserver是一個開源的互聯(lián)網(wǎng)地圖發(fā)布引擎,就像ESRI公司的ArcIMS系統(tǒng),Mapserver同時增加了對于PostGIS的支持。

在Mapserver中,提供了一個Web驅(qū)動的接口,這個接口用于檢查數(shù)據(jù)庫中數(shù)據(jù)的空間特征。在PostGIS中,PostGIS為了使得Mapserver能夠更好的提供服務,提供了一個易于讀寫的數(shù)據(jù)源,這個數(shù)據(jù)源將會在網(wǎng)絡事務繁忙的時候發(fā)揮其效用。比如,如果用標準的GIS文件作為數(shù)據(jù)源,如果有兩個用戶并發(fā)的對同一文件進行寫入操作,這樣將會不可避免的導致操作沖突,而利用PostGIS就能夠很好的解決這個缺陷,同時確保數(shù)據(jù)的完整性。

2001年9月,PostGIS V0.6發(fā)布,PostGIS V0.6提供了完整的OpenGIS支持,加入了標準的元數(shù)據(jù)表,并且提供了對于空間參照系統(tǒng)標識的支持。另外還加入了OpenGIS支持的12個功能函數(shù),同時對于Mapserver的支持得到了進一步的增強。

2002年2月,PostgreSQL V7.2發(fā)布,在7.2版中,GIST索引的API函數(shù)作了一點改進。由于這些API函數(shù)同樣應用于PostGIS中,這給PostGIS V0.6的應用帶來了麻煩,促使PostGIS必須作出改進適應PostgreSQL的變化。2002年PostGIS V0.7發(fā)布,在0.7版中,提供了新的對于GIST的API函數(shù)支持,同時在這一版中,提供了對于坐標變換的支持。

從2002年到現(xiàn)在,PostGIS又陸續(xù)發(fā)布了一系列的新版本,這些PostGIS產(chǎn)品在繼承PostGIS產(chǎn)品原有優(yōu)點的同時,又針對PostGIS本身存在的問題和不足進行了進一步的改進。到現(xiàn)在為止,PostGIS的最新版本是PostGIS V1.1.4。PostGIS V1.1.4主要改進的地方包括:⑴提供了對于將要發(fā)布的PostgreSQL V8.2的支持;⑵修復了函數(shù)collect中存在的bug;⑶在MakeBox2d和MakeBox3d中增加了對SRID的匹配檢查;⑷提高了pgsql2shp的運行并發(fā)性;⑸進一步改進了對于Java的支持。

PostGIS特性

  1. PostGIS支持所有的空間數(shù)據(jù)類型,這些類型包括:點(POINT)、線(LINESTRING)、多邊形(POLYGON)、多點(MULTIPOINT)、多線(MULTILINESTRING)、多多邊形(MULTIPOLYGON)和集合對象集(GEOMETRYCOLLECTION)等。PostGIS支持所有的對象表達方法,比如WKT和WKB。

  1. PostGIS支持所有的數(shù)據(jù)存取和構(gòu)造法,GeomFromText()、AsBinary(),以及GeometryN()等。

  1. PostGIS提供簡單的空間分析函數(shù)(如Area和Length)同時也提供其他一些具有復雜分析功能的函數(shù),比如Distance。

  1. PostGIS提供了對于元數(shù)據(jù)的支持,如GEOMETRY_COLUMNS和SPATIAL_REF_SYS,同時,PostGIS也提供了相應的支持函數(shù),如AddGeometryColumn和DropGeometryColumn。

  1. PostGIS提供了一系列的二元謂詞(如Contains、Within、Overlaps和Touches)用于檢測空間對象之間的空間關系,同時返回布爾值來表征對象之間符合這個關系。

  1. PostGIS提供了空間操作符(如Union和Difference)用于空間數(shù)據(jù)操作。比如,Union操作符融合多邊形之間的邊界。兩個交迭的多邊形通過Union運算就會形成一個新的多邊形,這個新的多邊形的邊界為兩個多邊形中最大邊界。

PostGIS還提供以下功能:

  1. 數(shù)據(jù)庫坐標變換 數(shù)據(jù)庫中的幾何類型可以通過Transform函數(shù)從一種投影系變換到另一種投影系中。在OpenGIS中的幾何類型都將SRID作為自身結(jié)構(gòu)的一部分,但不知什么原因,在OpenGIS的SFSQL規(guī)范中,并沒有引入Transform。

  1. 球體長度運算 存儲在普通地理坐標系中的集合類型如果不進行坐標變換是無法進行程度運算的,OpenGIS所提供的坐標變換使得積累類型的程度計算變成可能。

  1. 三維的幾何類型 SFSQL規(guī)范只是針對二維集合類型。OpenGIS提供了對三維集合類型的支持,具體是利用輸入的集合類型維數(shù)來決定輸出的表現(xiàn)方式。例如,即便所有幾何對象內(nèi)部都以三維形式存儲,純粹的二維交叉點通常還是以二維的形式返回。此外,還提供幾何對象在不同維度間轉(zhuǎn)換的功能。

  1. 空間聚集函數(shù) 在數(shù)據(jù)庫中,聚集函數(shù)是一個執(zhí)行某一屬性列所有數(shù)據(jù)操作的函數(shù)。比如Sum和Average,Sum是求某一關系屬性列的數(shù)據(jù)總和,Average則是求取某一關系屬性列的數(shù)據(jù)平均值。與此對應,空間聚集函數(shù)也是執(zhí)行相同的操作,不過操作的對象是空間數(shù)據(jù)。例如聚集函數(shù)Extent返回一系列要素中的最大的包裹矩形框,如“SELECT EXTENT(GEOM) FROM ROADS”這條SQL語句的執(zhí)行結(jié)果是返回ROADS這個數(shù)據(jù)表中所有的包裹矩形框。

  1. 柵格數(shù)據(jù)類型 PostGIS通過一種新的數(shù)據(jù)類型片,提供對于大的柵格數(shù)據(jù)對象的存儲。片由以下幾個部分組成:包裹矩形框、SRID、類型和一個字節(jié)序列。通過將片的大小控制在數(shù)據(jù)庫頁值(32×32)以下,使得快速的隨即訪問變成可能。一般大的圖片也是通過將其切成32×32像素的片然后再存儲在數(shù)據(jù)庫中的。

    PostGIS發(fā)展展望

目前,由于“關系型數(shù)據(jù)庫+空間數(shù)據(jù)引擎”的技術方案訪問迅速、與GIS聯(lián)系緊密的優(yōu)點,在應用中占有一定的優(yōu)勢,但空間數(shù)據(jù)引擎獨立于數(shù)據(jù)庫內(nèi)核,難以充分利用關系型數(shù)據(jù)庫中各種成熟的數(shù)據(jù)管理、訪問技術,成為進一步發(fā)展的致命弱點。另外,難以支持擴展SQL,不易實現(xiàn)數(shù)據(jù)共享與互操作等問題也逐漸暴露出來。

盡管面向?qū)ο罂臻g數(shù)據(jù)庫管理系統(tǒng)最適應于空間數(shù)據(jù)的表達和管理,不僅支持變長記錄,而且支持對象的嵌套、信息的繼承與聚集。有關面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)的研究已有十多年了,由于缺乏良好的數(shù)據(jù)基礎,在訪問速度尚未有重大突破,難以發(fā)展成熟,據(jù)估計在較長一段時間內(nèi)面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)都不會替代對象關系型數(shù)據(jù)庫管理系統(tǒng)。

擴展對象關系型數(shù)據(jù)庫管理系統(tǒng)無疑將成為以后的發(fā)展方向。盡管目前PostGIS/PostgreSQL和Spatial Oracle的性能與ArcSDE仍有一定的差距,但是隨著數(shù)據(jù)庫廠商對空間數(shù)據(jù)管理市場的不斷重視、結(jié)構(gòu)化數(shù)據(jù)管理方式與空間數(shù)據(jù)管理方式的進一步融合、數(shù)據(jù)壓縮傳輸技術的不斷提高,基于數(shù)據(jù)庫管理系統(tǒng)的空間擴展方式將會不斷的完善,成為今后管理空間數(shù)據(jù)的主流技術。而多數(shù)GIS廠商則應將精力集中到空間分析、空間模型等方面,從而形成較好的社會分工結(jié)構(gòu)。

目前,軟件開源已經(jīng)成為IT界的一種發(fā)展趨勢,越來越多的軟件加入到開源系統(tǒng)中。PostGIS不論在功能還是擴展性方面都不落后于商業(yè)GIS平臺的空間數(shù)據(jù)庫,而且由于其源代碼的公開性,更加容易吸引廣大愛好者參與到PostGIS的開發(fā)中,不斷完善現(xiàn)有的功能同時進一步擴展新的特性,相信PostGIS的發(fā)展前景將會非常美好。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號