PostGIS教程一:PostGIS介紹
一、什麼是空間資料庫
PostGIS是一個空間資料庫,Oracle Spatial和SQL Server(2008和之後版本)也是空間資料庫。
但是這意味著什麼?是什麼使普通資料庫變成空間資料庫?
簡短的答案是...
空間資料庫像儲存和操作資料庫中其他任何物件一樣去儲存和操作空間物件。
下面簡短介紹了空間資料庫的發展,然後回顧了將空間資料與資料庫關聯起來的三個方面:資料型別、索引和函式
- 空間資料型別用於指定圖形為點
- 多維度空間索引被用於進行空間操作的高效處理
- 空間函式構建於SQL語言中,用於空間屬性和空間關係的查詢
空間資料型別、空間索引和空間函式組合在一起,提供了靈活的結構用於優化效能和分析。
1.1、開端
在傳統的第一代地理資訊系統(GIS)實現中,所有的空間資料都儲存在平面檔案中,需要專門的GIS軟體來解釋和操作這些資料。
這些第一代管理系統旨在滿足使用者的需求,其中所有所需的資料都在使用者的組織領域中。
它們是專為處理空間資料
第二代空間系統將一些資料儲存在關係資料庫(RDBMS)中(通常是“屬性”或非空間部分),但仍然缺乏直接整合所具有的靈活性。
真正的空間資料庫誕生於人們開始把空間特徵當作第一級資料庫物件的時候。
空間資料庫將空間資料和物件關係資料庫(Object Relational database)完全整合在一起。實現從以GIS為中心向以資料庫為中心的轉變。
說明:空間資料庫管理系統也可用於地理資訊以外的應用。例如,空間資料庫用於管理與人體解剖、大規模積體電路、分子結構和電磁場等相關的資料。
1.2、空間資料型別
普通資料庫擁有字串(string)、數值(number)和日期(date)這些資料型別,空間資料庫添加了額外的資料型別(空間資料型別)以用於表達地理特徵(geographic features)。
這些空間資料型別抽象並封裝了諸如邊界(boundary)和維度(dimension)等空間結構。
在許多方面,空間資料型別可以簡單的理解為形狀(shape)
空間資料型別按型別層次結構組織。每個子型別繼承其父型別的結構(屬性)和行為(方法或函式)。
1.3、空間索引和邊界框(bounding box)
普通資料庫提供“訪問方法(access methods)”——通常稱為索引-indexes —— 以允許對資料子集進行快速、隨機地訪問。
標準的資料型別(number、string、date)的索引通常是用B-tree索引(B樹索引),B樹索引使用自然排序順序(natural sort order)對資料進行分割槽,以便將資料放入分層樹中。
數字、字串和日期的自然排序順序很容易確定 —— 每個值都小於、大於或等於其他值。
但是由於多邊形(Polygon)可以重疊,可以相互包含,並且可以排列在二維(或更多維數)空間中,因此無法使用B樹索引有效地索引它們。
真正的空間資料庫提供了一個“空間索引(spatial index)”,它回答了“哪些物件在這個特定的邊界框內?”這個問題。
邊界框(bounding box)是平行於座標軸且包含給定要素(feature)的最小的矩形。
使用邊界框是為了判斷”A被包含B中嗎?"這個問題,對於多邊形,計算非常密集而艱難,但在矩形的情況下,計算速度非常快。
即使是最複雜的多邊形和線串(linestring)也可以用一個簡單的邊界框來表示。
索引必須快速執行才能起到理想的作用。因此,空間索引不像B樹索引那樣提供精確的結果,而是提供近似的結果。
"多邊形內部包含哪些線段“將由空間索引解釋為”這個多邊形邊界框內部包含哪些線段邊界框?“
各種資料庫實際實現的空間索引差異很大,最常見的實現是R-tree(在PostGIS中使用),但在其他空間資料庫中也有基於四叉樹(Quadtrees)的實現和基於網格的索引(grid-based indexes)的實現。
1.4、空間函式
關於查詢的資料操作,普通資料庫提供的函式包括連線字串、對字串執行雜湊操作、對數值進行數學運算以及從日期中提取資訊。
空間資料庫為分析幾何元件、確定空間關係和操作幾何圖形提供了一套完整的函式,這些空間函式可以作為任何空間專案的元件。
空間函式中的大部分可以被歸納為以下五類:
- 轉換 —— 在geometry和外部資料格式之間進行轉換的函式
- 管理 —— 管理關於空間表和PostGIS組織的資訊的函式
- 檢索 —— 檢索幾何圖形的屬性和測量的函式
- 比較 —— 在空間關係上比較兩種幾何圖形的函式
- 生成 —— 基於其他幾何圖形生成新圖形的函式
函式列表可能非常長,但是OGC SFSQL定義了一組通用函式,並由PostGIS實現(並實現了其他有用的函式)。
二、PostGIS是什麼?
PostGIS通過向PostgreSQL新增對空間型別、索引和函式的支援,將PostgreSQL資料庫管理系統轉換為空間資料庫。
因為它是建立在PostgreSQL之上的,所以PostGIS自動繼承了重要的"企業級"特性以及開放原始碼標準。
2.1、什麼是PostgreSQL呢?
PostgreSQL是一個強大的物件關係資料庫管理系統(ORDBMS)。
它是在BSD風格的許可下發布的,因此是自由和開放原始碼的軟體。
和許多其他開源程式一樣,PostgreSQL不是由任何一家公司控制的,而是有一個由眾多開發人員和公司組成的全球社群來開發它。
PostgreSQL從一開始就考慮到型別擴充套件 —— 能夠在執行時新增新的資料型別、函式和訪問方法的能力。
正因為如此,PostGIS擴充套件可以由單獨的開發團隊開發,但仍然可以非常緊密地整合到核心PostgreSQL資料庫中。
2.1.1、為什麼選擇PostgreSQL?
熟悉開源資料庫的人提出的一個常見問題是:“為什麼PostGIS不是基於MySQL構建的?”
PostgreSQL的特點:
- 被證明的預設情況下的可靠性和事務完整性(ACID)
- 嚴謹地支援SQL標準(完整SQL92)
- 可插拔的型別擴充套件和功能擴充套件
- 面向社群的發展模式(開源)
- 不限制列大小(可用元組)以支援大型GIS物件
- 通用索引結構(Generic Index Structure - GIST)允許R-Tree索引
- 易於新增自定義功能
這些因素結合在一起,PostgreSQL提供了一條非常簡單的開發路徑來新增新的空間型別。
在專有的世界中,只有Illustra(現在的 Infomix Universal Server)允許這麼容易的擴充套件。
這並不是巧合,Illustra是80年代以來對原始PostgreSQL程式碼庫的專有改造。
因為將型別新增到PostgreSQL的開發路徑非常簡單,所以使用PostgreSQL是正確的。
當MySQL在版本4.1中釋出基本空間型別時,PostGIS團隊查看了它們的程式碼,這堅定了最初使用PostgreSQL的決定。
因為MySQL空間物件必須作為一種特殊情況被強行新增在字串型別的頂部,所以MySQL程式碼分散在整個程式碼庫中。
PostGIS 0.1的開發花費了不到一個月的時間,但做一個“MyGIS" 0.1可能需要更長的時間,可能永遠也不會成功。
2.2、為什麼不是Shapefiles?
自GIS軟體被首次編寫以來,Shapefile(和其他檔案格式)一直是空間資料的儲存和互動的標準方式。
但是,這些“平面”檔案有以下缺點:
- 檔案需要特殊的軟體才能讀寫 —— SQL是對隨機資料訪問和分析的抽象。如果沒有這種抽象,你將需要自己編寫所有的訪問和分析資料的程式碼
- 併發使用者可能導致損壞資料 —— 雖然可以編寫額外的程式碼以確保對同一檔案的多次寫入不會損壞資料,但當你解決了問題並同時解決了相關效能問題時,你已經編寫了資料庫系統的較好部分。那為什麼不直接使用標準資料庫呢?
- 複雜的問題需要複雜的軟體來回答 —— 複雜而有趣的問題(空間連線、聚合等)可以在資料庫中使用一行SQL程式碼來表達,但是在對檔案進行程式設計時,需要數百行專門的程式碼來解決。
大多數PostGIS使用者都在安裝多個應用程式訪問資料,因此,使用標準的SQL訪問方法可以簡化部署和開發。
有些使用者正在處理大型資料集,如果使用檔案儲存,它們可能被分成多個檔案;但在資料庫中,它們可以儲存為單個大的二維表中。
總之,對多個使用者的支援,複雜的即時查詢和對於大型資料集的高效能表現,是空間資料庫與檔案系統的不同之處。
2.3、PostGIS簡史
2001年5月,Refractions Research 釋出了第一版PostGIS。PostGIS 0.1具有物件、索引和一些函式。結果是PostGIS 0.1是一個適合儲存和檢索的資料庫,但不適合分析。
隨著函式數量的增加,相關標準化組織的需求變得明確。開放地理空間聯盟(OGC)的“Simple Features for SQL”(SFSQL)規範提供了函式命名和要求的指導性原則。
在接下來的幾年中,PostGIS函式的數量有所增加,但其功能仍然有限。許多有趣的函式(如ST_Intersects()、ST_Buffer()、ST_Union())都很難編寫,從頭開始寫這些函式花費了幾年時間。
幸運的是,第二個專案”Geometry Engine, Open Source“ (GEOS)出現了,GEOS庫為實現SFSQL規範提供了必要的演算法。通過結合GEOS,PostGIS在0.8版中提供了對SFSQL的完整支援。
隨著PostGIS資料容量的增長,另一個問題浮出水面:用於儲存幾何圖形的描述被證明效率相對較低。對於像點和短線這樣的小物件,表示中的元資料佔據了多達300%的開銷。處於效能方面的考慮,有必要對描述進行縮減。通過縮減元資料頭和所需的維度,大大減少了開銷。在PostGIS 1.0中,這種新的、更快的、輕量級的描述成為了預設的描述。
PostGIS最新的更新致力於提高對於標準的遵從性,增加了對ISO SQL/MM標準中制定的基於曲線的幾何圖形和函式簽名的支援。
因為繼續注重效能,PostGIS 1.4大大提高了幾何圖形測試例程的速度。
2.4、誰使用PostGIS?
有關案例研究的完整列表,請參閱PostGIS案例研究頁面。
2.4.1、法國國家地理研究所
法國國家地理研究所(Institut Geographique National, France —— IGN)是法國的國家制圖機構,利用PostGIS儲存該國的高解析度地形圖“BDUni"。
“BDUni"有1億多個要素,由100多名專業工作人員維護,他們每天核實觀察的結果並向資料庫新增新的地圖。
IGN安裝使用資料庫事務系統來確保更新過程中的一致性,並使用熱備用系統(warm standby system)在系統故障時保持正常執行。
2.4.2、GlobeXplorer
GlobeXplorer是一家基於Web提供全球衛星和航空影象千兆位元組線上訪問的服務商。
GlobeXplorer使用PostGIS管理與影象目錄相關的元資料,因此,影象查詢首先搜尋PostGIS目錄以查詢相關影象的位置,然後從儲存中提取影象並將其返回給客戶端。
在構建他們的系統時,GlobeXplorer嘗試了其他的空間資料庫,但是由於PostGIS所提供的價格和效能的巨大優勢,最終選擇了PostGIS。
2.5、什麼應用程式支援PostGIS?
PostGIS已經成為了一個廣泛使用的空間資料庫,支援使用它儲存和檢索資料的第三方程式的數量也在增加。
支援PostGIS的程式包括伺服器端和桌面端的開源軟體和專有軟體。
下表列出了一些使用PostGIS的軟體: