PostGis

2022-02-18 09:23 更新

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

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

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

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

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

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

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

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

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

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

    

緣起PostgrSQL

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


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

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

    

PostGIS簡(jiǎn)介

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

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

PostGIS發(fā)展歷程

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

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

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

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

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

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

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

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

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

2002年2月,PostgreSQL V7.2發(fā)布,在7.2版中,GIST索引的API函數(shù)作了一點(diǎn)改進(jìn)。由于這些API函數(shù)同樣應(yīng)用于PostGIS中,這給PostGIS V0.6的應(yīng)用帶來(lái)了麻煩,促使PostGIS必須作出改進(jìn)適應(yīng)PostgreSQL的變化。2002年P(guān)ostGIS V0.7發(fā)布,在0.7版中,提供了新的對(duì)于GIST的API函數(shù)支持,同時(shí)在這一版中,提供了對(duì)于坐標(biāo)變換的支持。

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

PostGIS特性

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

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

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

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

  1. PostGIS提供了一系列的二元謂詞(如Contains、Within、Overlaps和Touches)用于檢測(cè)空間對(duì)象之間的空間關(guān)系,同時(shí)返回布爾值來(lái)表征對(duì)象之間符合這個(gè)關(guān)系。

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

PostGIS還提供以下功能:

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

  1. 球體長(zhǎng)度運(yùn)算 存儲(chǔ)在普通地理坐標(biāo)系中的集合類型如果不進(jìn)行坐標(biāo)變換是無(wú)法進(jìn)行程度運(yùn)算的,OpenGIS所提供的坐標(biāo)變換使得積累類型的程度計(jì)算變成可能。

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

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

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

    PostGIS發(fā)展展望

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)