本章記錄了 PostGIS 原始碼壓縮檔和原始碼儲存庫 extras 資料夾中找到的功能。這些功能不一定會與 PostGIS 二進位發行版本一起封裝,但通常是基於 PL/pgSQL 或可以照常執行的標準 Shell 指令碼。
這是 PAGC 標準化工具 的分支(此部分的原始程式碼是 PAGC PostgreSQL 地址標準化工具)。
地址標準化工具是一種單行地址解析器,它會接收輸入地址,並根據儲存在表格和輔助 lex 和 gaz 表格中的一組規則將其正規化。
該程式碼被建置到一個名為 address_standardizer
的單一 PostgreSQL 擴充函式庫中,可以使用 CREATE EXTENSION address_standardizer;
安裝。除了 address_standardizer 擴充功能之外,還建置了一個名為 address_standardizer_data_us
的範例資料擴充功能,其中包含美國資料的 gaz、lex 和規則表格。此擴充功能可以使用以下方式安裝:CREATE EXTENSION address_standardizer_data_us;
此擴充功能的程式碼可在 PostGIS extensions/address_standardizer
中找到,目前是獨立的。
如需安裝說明,請參閱:第 2.3 節,「安裝與使用地址標準化工具」。
解析器從右向左運作,首先查看郵遞區號、州/省、城市等巨型元素,然後查看微型元素以判斷我們處理的是門牌號碼街道、交叉路口還是地標。它目前不尋找國家/地區代碼或名稱,但未來可能會引入。
根據以下假設為美國或加拿大:郵遞區號為美國或加拿大,州/省為美國或加拿大,否則為美國
這些是使用 Perl 相容的正規表示式辨識的。這些正規表示式目前位於 parseaddress-api.c 中,如果需要,相對容易進行變更。
這些是使用 Perl 相容的正規表示式辨識的。這些正規表示式目前位於 parseaddress-api.c 中,但未來可能會移至 include 中,以方便維護。
本節列出地址標準化工具擴充功能安裝的 PostgreSQL 資料類型。請注意,我們會描述這些資料類型的類型轉換行為,這在設計您自己的函式時非常重要。
standardize_address
函式的傳回類型。本節列出 address_standardizer 用於正規化地址的 PostgreSQL 表格格式。請注意,這些表格的名稱不需要與此處參考的名稱相同。例如,您可以為每個國家/地區或自訂地理編碼器設定不同的 lex、gaz 和規則表格。這些表格的名稱會傳遞到地址標準化工具函式中。
封裝的擴充功能 address_standardizer_data_us
包含用於正規化美國地址的資料。
一個基於 plpgsql 的地理編碼器,用於處理美國人口普查局發布的 TIGER(拓撲整合地理編碼和參考系統)/線和主地址資料庫匯出。
地理編碼器有四個元件:資料載入器函式、地址正規化工具、地址地理編碼器和反向地理編碼器。
儘管它是專門為美國設計的,但許多概念和函式都適用,並且可以調整以用於其他國家/地區的地址和道路網路。
指令碼會建置一個名為 tiger
的結構描述,以容納所有與 tiger 相關的函式、可重複使用的查閱資料(例如道路類型字首、字尾、州、用於管理資料載入的各種控制表格,以及所有 tiger 載入表格繼承的骨架基本表格)。
還會建立另一個名為 tiger_data
的結構描述,其中包含每個州的普查資料,載入器會從普查網站下載這些資料並載入到資料庫中。在目前模型中,每組州表格都以州代碼作為字首,例如 ma_addr
、ma_edges
等,並加上限制,以強制只使用該州資料。每個表格都繼承自 tiger 結構描述
中 addr
、faces
、edges
等表格。
所有地理編碼函式都只參考基本表格,因此資料結構描述不需要稱為 tiger_data
,而且資料不能進一步分割到其他結構描述中 – 例如,每個州使用不同的結構描述,只要所有表格都繼承自 tiger
結構描述中的表格即可。
如需有關如何在資料庫中啟用擴充功能以及使用它載入資料的說明,請參閱 第 2.4.1 節,「Tiger 地理編碼器啟用您的 PostGIS 資料庫」。
![]() |
|
如果您使用的是 tiger 地理編碼器 (tiger_2010),您可以使用 extras/tiger 中隨附的 upgrade_geocoder.bat / .sh 指令碼來升級指令碼。 |
![]() |
|
PostGIS 2.2.0 版本的新增功能是支援 Tiger 2015 資料,並將地址標準化工具納入 PostGIS 中。 PostGIS 2.1.0 版本的新增功能是,如果您執行的是 PostgreSQL 9.1+,則能夠使用 PostgreSQL 擴充模型安裝 tiger 地理編碼器。如需詳細資訊,請參閱 第 2.4.1 節,「Tiger 地理編碼器啟用您的 PostGIS 資料庫」。 |
Pagc_Normalize_Address 函式可作為內建 Normalize_Address 的替代函式。如需編譯和安裝說明,請參閱 第 2.3 節,「安裝與使用地址標準化工具」。
設計
此專案的目標是建置一個功能齊全的地理編碼器,可以處理任意美國地址字串,並使用正規化的 TIGER 普查資料,產生一個點幾何和評等,反映給定地址的位置和位置可能性。評等數字越高,結果越差。
PostGIS 2.0.0 中引入的 reverse_geocode
函式可用於推導 GPS 位置的街道地址和交叉路口。
對於任何熟悉 PostGIS 的使用者來說,地理編碼器應該很容易安裝和使用,並且應該很容易在 PostGIS 支援的所有平台上安裝和使用。
它應該足夠穩健,即使存在格式和拼寫錯誤也能正常運作。
它應該足夠可擴充,可以在最少的程式碼變更下,與未來的資料更新或替代資料來源一起使用。
![]() |
|
必須將 |
tiger_data
。county_all
、state_all
或州代碼開頭,後接 county
或 state
的表格。tiger_data
。normalized_address
(addy) 和評等。評等越低,比對的可能性越高。結果會先依最低評等排序。您可以選擇傳入最大結果,預設為 10。使用 Tiger 資料(edges、faces、addr)、PostgreSQL 模糊字串比對 (soundex、levenshtein)。tiger_data
模式中。每個州的腳本將以單獨的記錄返回。tiger_data
模式中。最新版本支援 Tiger 2010 的結構性變更,並載入人口普查區塊、區塊群組和區塊表。norm_addy
類型,該類型具有標準化的道路後綴、前綴和類型,以及被分成獨立欄位的街道、街道名稱等。此函數僅使用 tiger_geocoder 套件中的查詢數據即可運作(無需 tiger 人口普查數據)。norm_addy
類型,該類型具有標準化的道路後綴、前綴和類型,以及被分成獨立欄位的街道、街道名稱等。此函數僅使用 tiger_geocoder 套件中的查詢數據即可運作(無需 tiger 人口普查數據)。需要 address_standardizer 擴充功能。norm_addy
複合類型物件,返回其美觀列印表示。通常與 normalize_address 結合使用。還有一些其他的 PostGIS 開源地理編碼器,與 tiger 地理編碼器不同的是,它們具有多國地理編碼支援的優勢。
Nominatim 使用 OpenStreetMap 地名錄格式數據。它需要 osm2pgsql 來載入數據,以及 PostgreSQL 8.4+ 和 PostGIS 1.5+ 才能運作。它被封裝為網路服務介面,並且看起來像是被設計為以網路服務的方式呼叫。與 tiger 地理編碼器一樣,它同時具有地理編碼器和反向地理編碼器元件。從文檔來看,尚不清楚它是否具有像 tiger 地理編碼器那樣的純 SQL 介面,或者是否大部分邏輯是在網路介面中實現的。
GIS Graphy 也使用 PostGIS,並且與 Nominatim 一樣使用 OpenStreetMap (OSM) 數據。它帶有一個載入器來載入 OSM 數據,並且與 Nominatim 類似,它不僅可以對美國進行地理編碼。與 Nominatim 非常相似,它作為網路服務運行,並依賴於 Java 1.5、Servlet 應用程式和 Solr。GisGraphy 是跨平台的,並且還具有反向地理編碼器以及其他一些不錯的功能。