一種將完整的澳洲地理編碼國家地址文件 (GNAF) 和澳洲行政邊界加載到 Postgres 中的快速方法,經過簡化,可用作地理編碼、分析、視覺化和聚合的參考資料。
請參閱這些介紹投影片 (PDF) 以及 data.gov.au 頁面。
執行 load-gnaf Python 腳本並一步建立資料庫
從 Docker Hub 拉取資料庫並在容器中運行
下載 GNAF 和/或 Admin Bdys Postgres 轉儲檔案並將其還原到 Postgres 14+ 資料庫中
在 S3 中使用或下載 Geoparquet 和 Parquet 檔案以用於您的資料和分析工作流程;在 AWS 或您自己的平台中。
在配置為利用可用 RAM 的 Postgres 伺服器上執行 Python 腳本需要 30-120 分鐘。
您可以處理 GDA94 或 GDA2020 版本的資料 - 只需確保為 GNAF 和管理邊界下載相同的版本。如果您不知道 GDA94 或 GDA2020 是什麼,請下載 GDA94 版本(僅供參考 - 它們是不同的座標系)
為了獲得良好的載入時間,您需要配置 Postgres 伺服器以提高效能。這裡有一個很好的指南,指出它已經有幾年了,如果你有 RAM,一些記憶體參數可以增強。
Postgres 14.x 及更高版本和 PostGIS 3.2+
將 Postgres bin 目錄加入系統 PATH
Python 3.6+ 與 Psycopg 3.x
從 data.gov.au 下載 Geoscape GNAF(GDA94 或 GDA2020)
從 data.gov.au 下載 Geoscape 行政邊界(下載 ESRI Shapefile(GDA94 或 GDA2020)版本)
將 GNAF 解壓縮到 Postgres 伺服器上的目錄
將 Admin Bdys 解壓縮到本地目錄
更改這些目錄的安全性以授予 Postgres 讀取權限
建立目標資料庫(如果需要)
透過執行以下 SQL 將 PostGIS 新增至資料庫(如果需要): CREATE EXTENSION postgis
透過使用-h
參數執行 load-gnaf.py 檢查可用且必要的參數(請參閱下面的命令列範例)
運行腳本,30-120 分鐘後返回並享受!
gnaf-loader 的行為可以透過為腳本指定各種命令列選項來控制。支援的參數有:
--gnaf-tables-path
指定提取的 GNAF PSV 檔案的路徑。該目錄必須可由 Postgres 伺服器訪問,且伺服器到該目錄的相應本地路徑可能需要透過local-server-dir
參數設置
--local-server-dir
指定gnaf-tables-path
對應的 Postgres 伺服器上的本機路徑。如果伺服器在本機上運行,則可以省略此參數。
--admin-bdys-path
指定提取的 Shapefile 管理邊界文件的路徑。與gnaf-tables-path
不同,遠端 Postgres 伺服器不一定可以存取此路徑。
--pghost
Postgres 伺服器的主機名稱。如果設置,則預設為PGHOST
環境變量,否則預設為localhost
。
--pgport
Postgres 伺服器的連接埠號碼。如果設置,則預設為PGPORT
環境變量,否則為5432
。
--pgdb
Postgres 伺服器的資料庫名稱。如果設置,則預設為PGDATABASE
環境變量,否則為geoscape
。
--pguser
存取 Postgres 伺服器的使用者名稱。如果設置,則預設為PGUSER
環境變量,否則為postgres
。
--pgpassword
用於存取 Postgres 伺服器的密碼。如果設置,則預設為PGPASSWORD
環境變量,否則預設password
。
--srid
設定輸入資料的座標系。有效值為4283
(預設值:GDA94 緯度/經度)和7844
(GDA2020 緯度/經度)。
--geoscape-version
Geoscape 版本號,格式為 YYYYMM。預設為當前年份和最後發布月份。例如202408
。
--previous-geoscape-version
以前的 Geoscape 發行版本號碼為 YYYYMM;用於 QA 比較。例如202405
。
raw_gnaf_
--raw-gnaf-schema
用來儲存原始 GNAF 表的模式名稱。
raw_admin_bdys_
--raw-admin-schema
用來儲存原始管理邊界表的模式名稱。
gnaf_
--gnaf-schema
用來儲存最終 GNAF 表的目標模式名稱。
--admin-schema
admin_bdys_
儲存最終管理邊界表的目標模式名稱。
--previous-gnaf-schema
包含先前版本的gnaf_
表的架構。
admin_bdys_
--previous-admin-schema
包含先前版本的管理邊界表的架構。
--states
以空格分隔要載入的狀態列表,例如--states VIC TAS
。預設載入所有狀態。
--prevacuum
強制在刪除表後清理資料庫。預設為關閉,指定此選項將減慢匯入過程。
--raw-fk
為原始 GNAF 表建立主鍵和外鍵。預設為關閉,如果指定,將減慢導入過程。如果您打算將原始 GNAF 表格用作臨時匯入步驟,請使用此選項。請注意,最終處理的表將始終具有適當的主鍵和外鍵集。
--raw-unlogged
建立未記錄的原始 GNAF 表,從而加快導入速度。預設為關閉。僅當您不關心匯入後的原始資料表時才指定此選項 - 如果伺服器崩潰,它們將丟失!
--max-processes
指定用於資料載入的最大平行進程數。將其設定為 Postgres 伺服器上的核心數減 2,但如果有 16 個以上核心,則限制為 12 - 超過 12 的好處很小。
--no-boundary-tag
不要使用一些用於建立聚合和分區統計圖的關鍵管理邊界 ID 來標記所有位址。
本地 Postgres 伺服器: python load-gnaf.py --gnaf-tables-path="C:tempgeoscape_202408G-NAF" --admin-bdys-path="C:tempgeoscape_202408Administrative Boundaries"
將 GNAF 表格載入到本機運作的 Postgre 伺服器。 GNAF 存檔已提取至資料夾C:tempgeoscape_202408G-NAF
,管理邊界已提取至C:tempgeoscape_202408Administrative Boundaries
資料夾。
遠端 Postgres 伺服器: python load-gnaf.py --gnaf-tables-path="svrsharedgnaf" --local-server-dir="f:sharedgnaf" --admin-bdys-path="c:tempunzippedAdminBounds_ESRI"
載入已提取到共享資料夾svrsharedgnaf
GNAF 表。此共用資料夾對應於 Postgres 伺服器上的本機f:sharedgnaf
資料夾。管理邊界已提取到c:tempunzippedAdminBounds_ESRI
資料夾中。
僅載入選定的州: python load-gnaf.py --states VIC TAS NT ...
僅載入維多利亞州、塔斯馬尼亞州和北領地的數據
您可以在沒有 GNAF 的情況下載入管理邊界。為此:註解掉 def main 中的步驟 1、3 和 4。
注意:由於分割墨爾本和修復地址上的非邊界 locality_pids 所需的依賴關係,您無法在沒有 Admin Bdys 的情況下載入 GNAF。
使用此過程中產生的資料時,您需要遵守 data.gov.au 頁面上 GNAF 和 Admin Bdys 的歸屬要求,作為開放資料許可要求的一部分。
該腳本將在 GNAF 和 Admin Bdy 模式中使用 CASCADE 刪除所有表,然後重新建立它們;這意味著如果您創建了任何觀點,您將失去您的觀點!如果您想保留現有資料 - 您需要更改腳本中的架構名稱或使用不同的資料庫
所有原始 GNAF 表都可以建立為 UNLOGGED 以加快資料載入速度。如果您的資料庫損壞,這將使它們無法恢復。您可以再次執行這些腳本來重新建立它們。如果您認為這聽起來不錯 - 將 unlogged_tables 標誌設為 True 以獲得稍快的加載速度
如果您有 PostGIS 2.2+,邊界標記(預設啟用)將使流程增加 15-60 分鐘。如果您有 PostGIS 2.1 或更低版本 - 可能需要幾個小時,因為邊界表無法最佳化!
雖然您可以選擇將資料載入到哪 4 個模式,但我並沒有對每個排列進行 QA。如果您的 Postgres 經驗有限,請堅持使用預設值
如果您不在 Postgres 伺服器上執行 Python 腳本,則需要有權存取資料庫伺服器上 GNAF 檔案的網路路徑(以建立要處理的檔案清單)。另一種方法是擁有原始文件的本機副本
「建立表格」sql 腳本會將 PostGIS 擴充功能加入到公共模式中的資料庫中,您不需要將其新增至資料庫中
在刪除現有 GNAF/Admin Bdy 表後,可以選擇在開始時對資料庫進行 VACUUM - 除了重複測試之外,這實際上並沒有做任何事情。 (我懶得把它從程式碼中刪除,因為這意味著對所有 SQL 檔案重新編號,我現在想睡覺了)
GNAF 和管理邊界已準備好在 Docker Hub 上的映像中的 Postgres 中使用。
在您的 docker 環境中使用docker pull minus34/gnafloader:latest
拉取映像
使用docker run --publish=5433:5432 minus34/gnafloader:latest
運行
透過連接埠5433
存取容器中的 Postgres。預設登入名稱是 - 使用者: postgres
,密碼: password
注意:壓縮後的 Docker 映像為 8Gb,未壓縮為 25Gb
警告:預設的 postgres 超級使用者密碼不安全,應使用以下命令變更:
ALTER USER postgres PASSWORD '
下載 Postgres 轉儲檔案並將其還原到資料庫中。
應該需要 15-60 分鐘。
Postgres 14+ 與 PostGIS 3.0+
Postgres pg_restore 參數的知識
下載 GNAF 轉儲檔案或 GNAF GDA2020 轉儲檔案 (~2.0Gb)
下載 Admin Bdys 轉儲檔案或 Admin Bdys GDA2020 轉儲檔案 (~2.8Gb)
編輯supporting-files資料夾中的restore-gnaf-admin-bdys.bat或.sh腳本,取得轉儲檔案名稱、資料庫參數以及pg_restore的位置
運行腳本,15-60 分鐘後返回並享受!
空間表的 Geoparquet 版本以及非空間表的 Parquet 版本位於公共 S3 儲存桶中,可直接在應用程式或服務中使用。也可以使用 AWS CLI 下載它們。
幾何圖形具有 WGS84 緯度/經度座標 (SRID/EPSG:4326)。使用 Apache Sedona 分析資料的範例查詢,Apache Spark 的空間擴充位於spark
資料夾中。
檔案位於: s3://minus34.com/opendata/geoscape-202408/geoparquet/
列出所有資料集: aws s3 ls s3://minus34.com/opendata/geoscape-202408/geoparquet/
複製所有資料集: aws s3 sync s3://minus34.com/opendata/geoscape-202408/geoparquet/
使用 G-NAF 合併或開發 © Geoscape Australia 已根據開放地理編碼國家地址文件 (G-NAF) 最終用戶許可協議獲得澳大利亞聯邦許可。
使用行政邊界合併或開發 © Geoscape Australia 經澳洲聯邦根據 Creative Commons Attribution 4.0 International 許可證 (CC BY 4.0) 許可。
GNAF 和 Admin Bdys 已經過定制,消除了數據的一些已知的次要限制。最值得注意的是:
所有地址都連結到一個有邊界的憲報地點。那些不在原始 GNAF 中的少量地址已將其 locality_pid 更改為憲報公佈的等效地址
地點已新增地址和街道計數
郊區-地方 bdy 已被扁平化為一個連續的地方層 - 南澳大利亞州 刪除了數百個地方,並在沒有憲報公佈的地方的地方添加了 ACT 地區
維多利亞州墨爾本地區已分為 Melbourne、3000 和 Melbourne 3004 地區(新地區 PID 為loc9901d119afda_1
和loc9901d119afda_2
)。分流發生在亞拉河(基於墨爾本地址中的郵政編碼)
已使用地址表中的郵遞區號建立郵遞區號邊界圖層。雖然這與官方 Geoscape 郵遞區號邊界非常相似,但有數百個地址的郵遞區號 bdy 是錯誤的。請勿將此數據視為權威數據