PostGIS 拓樸類型與函式是用於管理拓樸物件,例如面、邊和節點。
Sandro Santilli 在 2011 年巴黎 PostGIS Day 會議上的簡報,很好地概述了 PostGIS 拓樸及其未來發展方向PostGIS 2.0 拓樸投影片。
Vincent Picavet 在PostGIS 拓樸 PGConf EU 2012中,很好地概述了拓樸的定義、使用方式以及支援它的各種 FOSS4G 工具。
一個基於拓樸的 GIS 資料庫範例是美國人口普查拓樸整合地理編碼和參考系統 (TIGER)資料庫。如果您想嘗試使用 PostGIS 拓樸並需要一些資料,請查看Topology_Load_Tiger。
PostGIS 拓樸模組在 PostGIS 的先前版本中就已存在,但從未成為官方 PostGIS 文件的一部分。在 PostGIS 2.0.0 中,正在進行重大清理工作,以移除其中所有已棄用的函式、修正已知的可用性問題、更好地記錄特性和函式、新增函式,並加強以更符合 SQL-MM 標準。
此專案的詳細資訊可在PostGIS 拓樸 Wiki中找到
與此模組相關的所有函式和表格都安裝在名為topology
的結構描述中。
在 SQL/MM 標準中定義的函式,其前綴為 ST_,而 PostGIS 特有的函式則沒有前綴。
拓樸支援預設從 PostGIS 2.0 開始建立,並且可以在建置時指定 --without-topology 組態選項來停用,如第 2 章,PostGIS 安裝中所述
本節列出 PostGIS 拓樸安裝的 PostgreSQL 資料類型。請注意,我們描述了這些資料類型的轉型行為,這在設計您自己的函式時非常重要。
ValidateTopology
的傳回類型。本節列出 PostGIS 拓樸安裝的 PostgreSQL 網域。網域可以像物件類型一樣使用,作為函式或表格欄的傳回物件。網域與類型之間的區別在於,網域是具有約束條件的現有類型。
本節列出用於建立新的拓樸結構描述、驗證拓樸和管理 TopoGeometry 欄的拓樸函式
schema_name
中名為 table_name
的表格中刪除拓樸幾何欄,並從 topology.layer 表格中取消註冊這些欄。本節討論拓樸建立期間的資料庫統計資料管理。
將元素新增至拓樸會觸發許多資料庫查詢,以尋找將會分割的現有邊、新增節點和更新將與新線條相連的邊。因此,拓樸表格中資料的統計資料保持在最新狀態非常有用。
PostGIS 拓樸填入和編輯函式不會自動更新統計資料,因為在拓樸中的每次變更之後更新統計資料將會過度使用,因此呼叫者有責任負責處理此問題。
![]() |
|
由自動清理程式更新的統計資料對於在自動清理程式完成之前啟動的交易不可見,因此長時間執行的交易需要自行執行 ANALYZE,才能使用更新的統計資料。 |
本節介紹用於建立新拓樸的拓樸函式。
本節介紹用於新增、移動、刪除和分割邊、面和節點的拓樸函式。所有這些函式都由 ISO SQL/MM 定義。
alinestring
定義的隔離邊新增至拓樸,以連接兩個現有的隔離節點 anode
和 anothernode
,並傳回新邊的邊 ID。apoint
幾何作為節點存在,則會擲回錯誤。傳回移動的描述。aface
的一組有序邊緣。本節涵蓋以非標準方式處理拓樸的函數。
本節涵蓋建立新的拓樸幾何圖形的拓樸函數。
topoelementarray
。本節涵蓋編輯現有拓樸幾何圖形的拓樸函數。
topoelementarray
(拓樸元素陣列),其中包含給定 TopoGeometry 的拓樸元素和類型(基本元素)。topoelement
物件,其中包含給定 TopoGeometry 的拓樸 element_id、element_type(基本元素)。本節列出用於檢查拓樸幾何圖形和拓樸基本元素之間關係的拓樸函數
一旦您建立拓樸,並可能關聯了拓樸圖層,您可能需要將它們匯出為基於檔案的格式,以進行備份或傳輸到另一個資料庫。
使用 PostgreSQL 的標準傾印/還原工具是有問題的,因為拓樸由一組表格(基本元素的 4 個,圖層的任意數量)和中繼資料表格(topology.topology 和 topology.layer)中的記錄組成。此外,拓樸識別碼在不同資料庫之間並非唯一,因此在還原時需要變更拓樸的參數。
為了簡化拓樸的匯出/還原,提供了一對可執行檔:pgtopo_export
和 pgtopo_import
。範例用法
pgtopo_export dev_db topo1 | pgtopo_import topo1 | psql staging_db
pgtopo_export
腳本會採用資料庫和拓樸的名稱,並輸出可用於將拓樸(和關聯圖層)匯入新資料庫的傾印檔案。
預設情況下,pgtopo_export
會將傾印檔案寫入標準輸出,以便可以透過管道傳送到 pgtopo_import
或重新導向到檔案(拒絕寫入終端機)。您可以選擇使用 -f
命令列切換指定輸出檔名。
預設情況下,pgtopo_export
會包含針對給定拓樸定義的所有圖層的傾印。這可能比您需要的資料更多,或者可能無法運作(如果您的圖層表格有複雜的依賴性),在這種情況下,您可以使用 --skip-layers
切換要求跳過圖層,並單獨處理這些圖層。
以 --help
(或簡寫 -h
)切換調用 pgtopo_export
將始終列印簡短的用法字串。
傾印檔案格式是 pgtopo_export
目錄的壓縮 tar 封存檔,其中至少包含一個帶有格式版本資訊的 pgtopo_dump_version
檔案。截至版本 1
,目錄包含拓樸基本元素表格(node、edge_data、face、relation)的資料、與其關聯的拓樸和圖層記錄,以及(除非給定 --skip-layers
)以自訂格式呈現的 PostgreSQL 傾印,其中包含回報為給定拓樸圖層的表格,這些資料為 Tab 分隔的 CSV 檔案。
pgtopo_import
腳本會採用 pgtopo_export
格式的拓樸傾印以及要賦予要建立的拓樸的名稱,並輸出重新建構拓樸和關聯圖層的 SQL 腳本。
產生的 SQL 檔案將包含建立具有給定名稱的拓樸、將基本元素資料載入其中、還原和註冊所有拓樸圖層的陳述式,方法是將所有 TopoGeometry 值正確連結到其正確的拓樸。
預設情況下,pgtopo_import
會從標準輸入讀取傾印,以便可以與管道中的 pgtopo_export
一起使用。您可以選擇使用 -f
命令列切換指定輸入檔名。
預設情況下,pgtopo_import
會在輸出 SQL 檔案中包含還原傾印中找到的所有圖層的程式碼。
如果您的目標資料庫已經有與傾印中的表格同名的表格,則這可能是非必要的或無法運作的。在這種情況下,您可以使用 --skip-layers
切換要求跳過圖層,並單獨處理這些圖層(或稍後處理)。
可以使用 --only-layers
切換產生僅載入圖層並將圖層連結到具名拓樸的 SQL。這對於在解決命名衝突後載入圖層,或將圖層連結到不同的拓樸(例如起始拓樸的空間簡化版本)可能很有用。