完全なジオコーディングされたオーストラリア国別住所ファイル (GNAF) とオーストラリアの行政境界を Postgres にロードする簡単な方法。簡素化され、ジオコーディング、分析、視覚化、集計の参照データとしてすぐに使用できます。
これらの紹介スライド (PDF) と data.gov.au ページをご覧ください。
load-gnaf Python スクリプトを実行し、1 ステップでデータベースを自分で構築します。
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 Administrative Boundaries をダウンロードします ( 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
抽出されたシェープファイル管理境界ファイルへのパスを指定します。 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
YYYYMM 形式の Geoscape バージョン番号。デフォルトは今年と最後のリリース月です。例: 202408
。
--previous-geoscape-version
以前の Geoscape リリースのバージョン番号 (YYYYMM)。 QAの比較に使用されます。例: 202405
。
--raw-gnaf-schema
生の GNAF テーブルを保存するスキーマ名。デフォルトはraw_gnaf_<geoscape_version>
です。
--raw-admin-schema
未処理の管理境界テーブルを保存するスキーマ名。デフォルトはraw_admin_bdys_<geoscape_version>
です。
--gnaf-schema
最終的な GNAF テーブルを保存する宛先スキーマ名。デフォルトはgnaf_<geoscape_version>
です。
--admin-schema
最終的な管理境界テーブルを保存する宛先スキーマ名。デフォルトはadmin_bdys_<geoscape_version>
です。
--previous-gnaf-schema
以前のバージョンの GNAF テーブルが含まれるスキーマ。デフォルトはgnaf_<previous_geoscape_version>
です。
--previous-admin-schema
以前のバージョンの管理境界テーブルが含まれるスキーマ。デフォルトはadmin_bdys_<previous_geoscape_version>
です。
--states
ロードする状態のスペース区切りのリスト (例: --states VIC TAS
。デフォルトでは、すべての状態がロードされます。
--prevacuum
テーブルを削除した後にデータベースを強制的にバキュームします。デフォルトはオフで、このオプションを指定するとインポート プロセスが遅くなります。
--raw-fk
生の GNAF テーブルの主キーと外部キーの両方を作成します。デフォルトはオフで、指定するとインポートプロセスが遅くなります。生の GNAF テーブルを一時的なインポート手順以上の目的で利用する場合は、このオプションを使用します。最終的に処理されたテーブルには常に適切な主キーと外部キーが設定されていることに注意してください。
--raw-unlogged
ログのない生の GNAF テーブルを作成し、インポートを高速化します。デフォルトはオフです。インポート後の生データ テーブルを気にしない場合にのみ、このオプションを指定してください。サーバーがクラッシュすると、生データ テーブルは失われます。
--max-processes
データのロードに使用する並列プロセスの最大数を指定します。これを Postgres サーバー上のコア数から 2 を引いた数に設定しますが、16 コア以上の場合は 12 に制限します。12 を超えると最小限の利点があります。デフォルトは 4 です。
--no-boundary-tag
集計およびコロプレス マップを作成するために、すべてのアドレスに主要な管理境界 ID の一部をタグ付けしないでください。
ローカル Postgres サーバー: python load-gnaf.py --gnaf-tables-path="C:tempgeoscape_202408G-NAF" --admin-bdys-path="C:tempgeoscape_202408Administrative Boundaries"
ローカルで実行されている Postgres サーバーに GNAF テーブルをロードします。 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 をロードできません。
このプロセスから得られたデータを使用する場合、オープン データ ライセンス要件の一部として、GNAF および Admin Bdys の data.gov.au ページの帰属要件に従う必要があります。
スクリプトは、GNAF スキーマと Admin Bdy スキーマで CASCADE を使用してすべてのテーブルを削除し、それらを再作成します。つまり、ビューを作成した場合はビューが失われます。既存のデータを保持したい場合は、スクリプト内のスキーマ名を変更するか、別のデータベースを使用する必要があります。
すべての生の GNAF テーブルをログなしで作成して、データのロードを高速化できます。これにより、データベースが破損した場合は回復不能になります。これらのスクリプトを再度実行して再作成できます。これで問題ないと思われる場合は、ロードを少し速くするために 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 イメージは 8 GB、非圧縮の場合は 25 GB
警告: デフォルトの postgres スーパーユーザー パスワードは安全ではないため、次を使用して変更する必要があります。
ALTER USER postgres PASSWORD '<something a lot more secure>'
Postgres ダンプ ファイルをダウンロードし、データベースに復元します。
15 ~ 60 分かかります。
Postgres 14 以降と PostGIS 3.0 以降
Postgres の pg_restore パラメータに関する知識
GNAF ダンプ ファイルまたは GNAF GDA2020 ダンプ ファイル (約 2.0Gb) をダウンロードします。
Admin Bdys ダンプ ファイルまたは Admin Bdys GDA2020 ダンプ ファイル (~2.8Gb) をダウンロードします。
ダンプ ファイル名、データベース パラメーター、および pg_restore の場所に合わせて、supporting-files フォルダー内のrestore-gnaf-admin-bdys.batまたは.shスクリプトを編集します。
スクリプトを実行し、15 ~ 60 分後に戻ってきて楽しんでください。
Geoparquet バージョンの空間テーブルと非空間テーブルの Parquet バージョンは、アプリケーションまたはサービスで直接使用できるようにパブリック S3 バケット内にあります。 AWS CLI を使用してダウンロードすることもできます。
ジオメトリには WGS84 緯度/経度座標 (SRID/EPSG:4326) があります。 Apache Spark の空間拡張機能である Apache Sedona を使用してデータを分析するためのサンプル クエリは、 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/ <my-local-folder>
Open Geo-coded National Address File (G-NAF) エンド ユーザー ライセンス契約に基づいて、オーストラリア連邦によってライセンス供与された G-NAF © Geoscape Australia を使用して組み込まれているか、開発されています。
管理境界を組み込むか、またはそれを使用して開発されています © Geoscape Australia は、クリエイティブ コモンズ表示 4.0 国際ライセンス (CC BY 4.0) に基づいてオーストラリア連邦によってライセンスされています。
GNAF と Admin Bdys は、データに関する既知の軽微な制限の一部を削除するようにカスタマイズされています。最も注目すべきものは次のとおりです。
すべての住所は、境界を持つ官報の地域にリンクされています。生の GNAF に含まれていない少数のアドレスでは、locality_pid が官報に記載された同等のものに変更されています。
地域には住所と番地が追加されました
郊外地域の境界は、地域の単一の連続レイヤーに平坦化されました - 南オーストラリア州の百は削除され、官報に掲載されている地域がない場合は ACT 地区が追加されました
VIC 州メルボルンの地域は、メルボルン 3000 地域とメルボルン 3004 地域に分割されました (新しい地域 PID はloc9901d119afda_1
およびloc9901d119afda_2
です)。分岐はヤラ川で発生します (メルボルンの住所の郵便番号に基づく)
郵便番号境界レイヤーは、住所テーブルの郵便番号を使用して作成されています。これは Geoscape の公式郵便番号境界を厳密にエミュレートしていますが、数百の住所が間違った郵便番号 bdy に含まれています。このデータを信頼できるものとして扱わないでください