空間數據管理問題及解決方案
空間數據特征:空間位置、非結構化、空間關系、分類編碼、海量數據等。
一般的數據庫管理系統難以滿足要求。
為了提高DBMS對空間數據的管理能力,國內外先后出現過:文件與關系數據庫混合管理系統、全關系型空間數據庫管理系統、關系型 數據庫+空間數據引擎、擴展對象關系型數據庫管理系統,以及面向對象空間數據庫管理系統等多種解決方案。
目前國內外比較流行的解決方案是這兩種:
- 關系型數據庫+空間數據引擎
這是一種中間件解決方案,空間數據引擎負責組織空間數據的存儲和讀取,關系型數據庫僅僅是存放空間數據的容器。 - 典型代表:ESRI的ArcSDE 和 MapInfo的SpatialWare
- 優點:訪問速度快,簡單易實現
- 缺點:空間操作和處理與數據庫內核剝離,數據模型復雜,拓展困難,數據共享困難
- 擴展對象關系型數據庫
這是一種新型數據庫解決方案,既然傳統關系型數據庫難以管理非結構化數據,那就開發一種新型數據來實現它,即對象關系型數據庫。 - 典型代表:Oracle 的 Oracle Spatial, IBM 的 DB2 Spatial Extender, Informix 的 Spatial DataBlade
- 優點:空間數據的管理與數據庫融為一體,擴展方便,數據共享易實現
- 缺點:實現難度大,數據壓縮困難,功能和性能與第一種方案尚存在差距
PostgreSQL是目前開源空間信息軟件領域性能最優的數據庫,構建在其上的空間對象擴展模塊PostGIS使其成為一個真正的大型空間數據庫。
從PostgreSQL到PostGIS
PostgreSQL中已經提供了一些空間特性:
- 定義了一些基本的集合實體類型
- 定義了一系列的函數和操作符來實現幾何類型的操作和運算
- 引入空間數據索引
但其提供的空間特性還不能達到要求,主要表現在:
- 缺乏復雜的空間類型
- 沒有提供空間分析
- 沒有提供投影變換功能
這些問題的存在導致費時費力、產品復雜、性能低下,這些原因促成了PostGIS的實施。
在介紹PostgreSQL的部分中我們已經提到過,文件頁(磁盤塊)是物理存儲的最小單位,默認大小是8k,最大可設置為2^15字節。
在PostgreSQL 7.1版本之前,支持的記錄大小最大為8k,空間數據對象往往會超過8k,這一限制導致空間數據的存儲無從談起。
從7.1版本開始,PostgreSQL摒棄了這一限制,PostGIS的實現變為可能。
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像素的片然后再存儲在數據庫中的。
DBMS管理空間數據問題的發展方向
“關系型數據庫+空間數據引擎”技術方案訪問迅速,與GIS聯系緊密,在應用中占有一定優勢。問題是引擎與數據庫內核獨立,難以利用數據庫系統中已有的成熟的管理、訪問技術,在進一步發展上有致命弱點。
“面向對象空間數據庫系統”技術方案從理論上來看,是最適用于空間數據的表達和管理的。但是由于在訪問速度的問題上尚未有重大突破,在一段時間內都無法替代“對象關系型數據庫系統”。
擴展對象關系型數據庫管理系統技術方案盡管在性能上和“關系型數據庫+空間數據引擎”技術方案仍有一定差距,但隨著技術的發展,將是解決這一問題的發展方向。