趙 瑩,胡暢達,王國宇
(1.黑龍江第一測繪工程院,黑龍江 哈爾濱150025;2.黑龍江省國土空間規劃研究院,黑龍江 哈爾濱150025)
關于GIS的組成,可以研究四個方面:硬件系統、軟件系統、空間數據和操作人員。空間數據在GIS的構成中起著重要作用,因此擁有一個良好的數據庫是GIS成功的關鍵。數據庫的功能主要體現在數據的存儲和管理上。在GIS中,用戶獲取的空間數據來自空間數據庫,因為地理信息系統具有空間分析能力。在對數據進行空間分析之后,將結果存儲在空間數據庫中。因此,空間數據庫在存儲空間數據方面也發揮著核心作用。空間數據庫是地理信息系統的核心,是地理信息系統發展的技術支柱。
空間數據的管理已經通過某個階段從文檔演變為數據庫。起初是初級式的管理模式,這種管理模式比較好理解,因為它是一一對應的形式,空間數據文件提供空間分析功能,屬性數據文件提供屬性處理功能。然后是混合管理模式,其中屬性數據由屬性數據庫管理。與傳統的數據庫管理系統不同,某些數據庫管理系統具有一層空間數據庫引擎,即SDE。在空間數據的存儲和管理中,出現了優于傳統數據庫管理系統的擴展管理模式,因此ArcGIS具有許多傳統數據庫中沒有的功能。
在傳統數據庫系統的基礎之上,改進了空間數據存儲和管理的一些功能,形成了一體化的管理模式。空間數據的管理經歷了從文件到數據庫的發展過程,使得空間數據庫不斷完善和創新。
空間數據庫可分為關系型和非關系型。關系,其實就是一個表。在組織數據的時候,所利用的模型是關系數據模型。所謂關系數據模型就是二維表格模型,例如“一對一”“一對多”“多對多”。關系數據模型是將數據的邏輯結構歸因為滿足某些條件的二維表的元素。這種數據庫的數據存儲在磁盤上比較安全,因其建立在關系模型上,比較容易理解。但是,建在關系模型上就要遵循某些原則,因此不節省存儲空間。非關系型空間數據庫因存儲在內存上,所以效率高,但是不安全。
關系型空間數據庫主要用于存儲空間數據,關系型空間數據庫加上了一層數據引擎,可以大大地提高用戶的查詢檢索速度,并且可以和特定的GIS平臺緊密結合。但是,擴展SQL很困難,并且很難共享數據并與數據進行互操作。除了與數據庫引擎結合的關系型數據庫之外,還有一個擴展的對象關系數據庫。擴展對象關系型數據庫支持抽象的數據類型和操作,主要的代表有Oracle的Oracle spatial和PostgreSQL的PostGIS等等。該模型將空間數據類型和相關功能集成到數據庫管理系統的內核之中,允許用戶以擴展的SQL語言執行操作。這樣,可以克服一般的空間數據庫的不足。
本文主要探討關系型空間數據庫,并且以Oracle spatial、PostGIS、MySqL GIS三種常見的空間數據庫為例,對這三種常見的空間數據庫進行比較。不同的空間數據庫雖然出自于不同的軟件公司,并且有各自的優缺點,但是都有著相似的目標,就是更好地滿足用戶對于空間數據管理和使用的需要。
為了順應地理信息系統數據的需求發展起來的Oracle spatial是一個管理模塊,這個模塊是甲骨文公司提供的,用來管理空間數據,它是Oracle數據庫強大的核心功能,提供了一系列快速查詢和檢索空間數據的功能。它由幾何數據類型、空間索引機制、操作函數和管理工具組成。與傳統的空間數據庫功能一樣,可以查詢、存儲、管理數據。可以存儲和檢索簡單的點、線和面空間元素。Oracle spatial是一個引入了對象-關系數據模型的數據庫,因此它是一個關系型空間數據庫。在給定的應用領域中,實體和實體之間的連接集構成關系數據庫。關系,就是一個表,因此空間數據就可以存儲在關系表中,每個表格都包含了行和列,其中,列用來表示數據種類,行用來表示數據實體。因此,在創建一個關系型空間數據庫時,可以進一步約束行和列。Oracle spatial定義了一種字段類型SDO-GEOMETRY(可以自定義),也可以單獨存儲在表中的某一列中。因此,Oracle spatial在管理空間數據時可以依賴屬性字段,空間屬性字段可以作為空間表區別于其他表的標志。同一層的空間對象存儲在同一個關系表中,空間數據和屬性數據可以同時存儲,實現了一體化存儲。
在查詢方面,Oracle spatial的查詢性能優異,因為Oracle spatial的空間數據庫引擎中具有空間索引功能,這極大地提高了用戶對于某個問題的查詢效率。空間索引用于提高空間數據的查詢效率,可以看成是普通樹查詢的演化。在建立空間數據庫的索引時,Oracle spatial提供了兩種選擇,用戶可以根據自己的需要選擇索引方案,這些方案基于線性四叉樹和參照樹。如果使用四叉樹索引來查詢空間數據,當空間對象分布不均勻時,會因為不均衡而使得查詢的速度變慢,因此,通常選擇基于參照樹的索引方案。空間索引的建立,一般在外部建立好了關系表后就可以建立了。Oracle是可擴展的,Oracle spatial是利用Oracle的可擴展性,將查詢處理的接口和空間索引的創建與引擎緊密結合在一起。
無論是矢量數據還是柵格數據,Oracle spatial都能存儲。矢量數據包括點、線串、多邊形、弧段、弧段多邊形、復合多邊形、圓形等。以控制點數據存儲為例,首先建立一個表,用來存儲控制點數據,向此表中添加空間數據。最后,將控制點數據依次就行入庫,入庫時可以使用第三方工具。
Oracle spatial為空間查詢和空間分析提供了一系列功能。因為,雖然添加空間數據庫引擎使得數據管理的效率大大提高。但是,當數據量特別大的時候,就必須依賴空間索引來查詢空間數據。而依賴索引的函數可以快速縮小計算的范圍,然后通過空間分析函數計算出想要的結果。
作為Oracle數據庫的一個組成部件,Oracle spatial可以執行操作,例如索引、存儲和分析Oracle數據庫中的空間數據。在管理空間數據時,Oracle spatial依賴于元數據表,空間屬性字段和空間索引,并在此基礎上提供了一些函數,這些函數具有查詢和分析功能。使用Oracle spatial來管理空間數據,這些被管理的數據更容易實現共享,具有低成本、低風險的優點。在使用方面,操作起來特別簡單,與標準SQL操作類似。這樣可以統一管理空間數據和屬性數據,為空間數據的管理帶來了極大的便利。
PostGIS是一個強大的對象-關系型數據庫管理系統。它由加利福尼亞大學伯克利分校領導開發,功能強大,特性豐富并且性能穩定。PostgreSQL具備一些空間功能:定義了一些基本的集合實體類型,對于幾何類型的操作和運算定義了一些函數和操作符,并引入了空間數據索引。然而,PostgreSQL缺乏復雜的空間類型,不能提供空間分析功能,也不能提供投影變換等功能,因此提供的空間特性還不能達到要求。這些問題導致產品復雜、性能低下,PostGIS所添加的存儲管理空間數據的能力是PostgreSQL所不具備的,可以說PostGIS是PostgreSQL的擴展,可以執行空間索引并提供空間操作功能。PostgreSQL缺乏復雜的空間類型,無法提供空間分析和投影變換等功能。
開發PostGIS的公司最開始研究PostgreSQL的空間數據庫。但是,PostgreSQL的功能是有限的,所提供的空間數據類型、空間數據功能遠遠不能滿足地理信息系統的技術需求。也就是PostgreSQL的這些缺陷與不足,促使了Post-GIS的產生。簡而言之,PostGIS增加了對PostgreSQL數據庫管理系統升級到空間數據庫的一些功能的支持。PostgreSQL有著自由和開放的源代碼,因為PostGIS是建立在PostgreSQL之上的,所以自動繼承了PostgreSQL的開放性源代碼標準。PostGIS這樣一個插件,讓PostgreSQL不斷地發展壯大,變成了一個強大的空間數據庫,讓PostgreSQL具有了地理信息系統特有的函數。
無論是什么類型的空間數據,PostGIS都支持,幾乎包含了所有類型。例如:點、線、多邊形、多點、多線、多多邊形。也支持所有的數據存儲和構造方法。PostGIS提供的空間分析函數有簡單的也有復雜的,例如Distance。還提供了對于元數據的支持,也提供了相應的支持函數。PostGIS提供的空間操作符可以用于空間數據的操作,例如Union和Difference。兩個相互重疊的多邊形,通過Union的操作,形成一個新的多邊形。PostGIS提供的二元謂詞,可以用來監測空間對象之間的空間關系,對于關系的表示,用布爾數值來表示。
除了固有的特性之外,PostGIS還有許多額外的功能。例如,可以將數據庫中的坐標從一個坐標系變換到另一個坐標系中。提供的坐標變換使得積累類型的程度計算成為可能,可以對球體的長度進行計算。執行所有數據操作的函數稱為集聚函數,PostGIS提供了空間集聚函數,比如Sum函數用來求解數據總和,Average函數用來求取某一屬性列的數據平均值,空間集聚函數不同的就是,它的操作對象是空間數據。PostGIS具有一種新的數據類型片,并且可以控制片的大小,因而可以實現快速的訪問,可以存儲大的柵格數據。對于圖片的存儲,也是先將要存儲的相片按照一定的像素數值進行切分,再存儲到相應的數據庫中。
隨著技術的不斷進步,各行業與地理信息的聯系不斷加深,在地理信息系統的組成中,地理空間數據是重要的組成部分。如果建立的空間數據庫在存儲和管理空間數據方面是高效率的,那么地理信息系統的技術便實現了。一般大型商業數據庫成本都很高,并且有著許多的限制性問題。PostgreSQL具有豐富的數據類型,數據安全并且開源免費,并結合了PostGIS空間數據引擎擴展,特別適合管理地理空間數據。
MySqL由瑞典公司開發,也是一個關系型空間數據庫管理系統,是Oracle的產品。它在關系型空間數據庫管理系統中非常流行,具有體積小、速度快、總體的成本低等優點。最重要的是MySQL具有開放源碼的特點,即源代碼公開,意味著不需要用戶支付額外的費用,這大大降低了其總體擁有成本。就是因為具有開放源碼這一特點,任何人都可以在許可下下載并根據需要達到的目的對其進行修改,因此MySQL特別受開發人員的歡迎,很多開發人員都選擇了MySQL作為網站的數據庫。MySQL支持多種操作系統,可以用多種編程語言進行系統的編寫,例如C語言、C++語言、Java等,同時使用多種編譯器進行測試,保證了源代碼的可移植性,即所編寫的代碼可以在多個系統中運行。因此,用戶可以選擇已編程的客戶機程序,或根據自己的需要編寫自己的客戶端程序。
MySQL具有三種應用架構,分別為單點(Single)、復制(Replication)和集群(Cluster)。其中,單點架構適合小規模應用,復制架構適合中小規模應用,集群架構適合大規模應用。
對于數據的存儲,因關系數據是存儲在表中的,而不是同時存儲在一起。這樣的存儲方式,靈活性很強,同時也提高了速度。MySqL還使用了結構化查詢語言SQL,以這種最常用的語言訪問數據庫。
如果要將MySQL與其他關系型空間數據庫進行比較的話,首先考慮的應該是相對來說比較重要的性能、特性、認證條件和約束條件、價格等等方面。MySQL對于大多數的個人用戶來說是免費的,簡單易用,性能很高的同時相對簡單,與其他的更大的系統比較起來,MySQL的復雜程度較低。在性能方面,多個用戶可以同時使用同一個數據庫,一個服務器可以承載許多個客戶端。MySQL的運行速度更是優于其他數據庫。
除了體積小、速度快、總體擁有成本低之外,MySQL還有很多其他的優點。完全的多線程編程是MySQL的關鍵所在,使用戶操作起來特別靈活。支持大型數據庫,可以運行大量記錄。MySQL作為一個開源代碼的數據庫,在實際的工作中,可以根據不同的應用進行相應的更改。具有強大的空間查詢功能,MySQL支持查詢的運算符和函數,并且可以在同一查詢中混用來自不同數據庫的表,從而使查詢變得快捷和方便。與Oracle相比,MySQL屬于中小型數據庫,市場占有率沒有Oracle高,但是在價格方面,MySQL的價格要優惠于Oracle。
對于以上三種數據庫的簡單比較,可以知道,Oracle spatial適用于大型企業,而MySQL和PostGIS適用于中小型企業。PostGIS最大的特點就是其源代碼公開,降低了用戶的使用成本。MySQL是完全免費的。所以,在管理數據時,用戶應根據自己的需要進行選擇,可以根據自己要達到的目的入手,揚長避短。不同的數據庫有著各自的特點,沒有絕對的優勢和劣勢。要相信,隨著技術的不斷進步和提高,不同的數據庫在管理和查詢方面一定會不斷完善,向著更加高級的方向發展。