Cara cepat untuk memuat File Alamat Nasional Geokode Australia (GNAF) dan Batas Administratif Australia yang lengkap ke dalam Postgres, disederhanakan dan siap digunakan sebagai data referensi untuk geocoding, analisis, visualisasi, dan agregasi.
Silakan lihat slide intro (PDF) ini, serta halaman data.gov.au.
Jalankan skrip Python load-gnaf dan bangun database sendiri dalam satu langkah
Tarik database dari Docker Hub dan jalankan dalam sebuah container
Unduh file dump GNAF dan/atau Admin Bdys Postgres & pulihkan di database Postgres 14+ Anda
Gunakan atau unduh File Geoparquet dan Parket di S3 untuk alur kerja data & analitik Anda; baik di AWS atau platform Anda sendiri.
Menjalankan skrip Python membutuhkan waktu 30-120 menit di server Postgres yang dikonfigurasi untuk memanfaatkan RAM yang tersedia.
Anda dapat memproses data versi GDA94 atau GDA2020 - cukup pastikan Anda mengunduh versi yang sama untuk GNAF dan Batas Administratif. Jika Anda tidak tahu apa itu GDA94 atau GDA2020, unduh versi GDA94 (FYI - keduanya memiliki sistem koordinat yang berbeda)
Untuk mendapatkan waktu buka yang baik, Anda perlu mengonfigurasi server Postgres Anda untuk kinerja. Ada panduan bagus di sini, mengingat usianya sudah beberapa tahun dan beberapa parameter memori dapat ditingkatkan jika Anda memiliki RAM.
Postgres 14.x dan lebih tinggi dengan PostGIS 3.2+
Tambahkan direktori bin Postgres ke PATH sistem Anda
Python 3.6+ dengan Psikopg 3.x
Unduh Geoscape GNAF dari data.gov.au (GDA94 atau GDA2020)
Unduh Batas Administratif Geoscape dari data.gov.au ( unduh versi ESRI Shapefile (GDA94 atau GDA2020) )
Buka zip GNAF ke direktori di server Postgres Anda
Unzip Admin Bdys ke direktori lokal
Ubah keamanan pada direktori tersebut untuk memberikan akses baca Postgres
Buat database target (jika diperlukan)
Tambahkan PostGIS ke database (jika diperlukan) dengan menjalankan SQL berikut: CREATE EXTENSION postgis
Periksa argumen yang tersedia dan diperlukan dengan menjalankan load-gnaf.py dengan argumen -h
(lihat contoh baris perintah di bawah)
Jalankan skripnya, kembalilah dalam 30-120 menit dan nikmatilah!
Perilaku gnaf-loader dapat dikontrol dengan menentukan berbagai opsi baris perintah pada skrip. Argumen yang didukung adalah:
--gnaf-tables-path
menentukan jalur ke file PSV GNAF yang diekstraksi. Direktori ini harus dapat diakses oleh server Postgres , dan jalur lokal yang sesuai untuk server ke direktori ini mungkin perlu diatur melalui argumen local-server-dir
--local-server-dir
menentukan jalur lokal di server Postgres yang sesuai dengan gnaf-tables-path
. Jika server berjalan secara lokal, argumen ini dapat dihilangkan.
--admin-bdys-path
menentukan jalur ke file batas admin Shapefile yang diekstraksi. Berbeda dengan gnaf-tables-path
, jalur ini tidak harus dapat diakses oleh server Postgres jarak jauh.
--pghost
nama host untuk server Postgres. Defaultnya adalah variabel lingkungan PGHOST
jika disetel, jika tidak, defaultnya adalah localhost
.
--pgport
nomor port untuk server Postgres. Defaultnya adalah variabel lingkungan PGPORT
jika disetel, jika tidak, 5432
.
--pgdb
nama database untuk server Postgres. Defaultnya adalah variabel lingkungan PGDATABASE
jika disetel, jika tidak geoscape
.
--pguser
nama pengguna untuk mengakses server Postgres. Defaultnya adalah variabel lingkungan PGUSER
jika disetel, jika tidak, postgres
.
--pgpassword
kata sandi untuk mengakses server Postgres. Defaultnya adalah variabel lingkungan PGPASSWORD
jika disetel, jika tidak, password
.
--srid
Mengatur sistem koordinat data masukan. Nilai yang valid adalah 4283
(default: GDA94 lat/long) dan 7844
(GDA2020 lat/long).
--geoscape-version
Nomor versi Geoscape dalam format YYYYMM. Defaultnya adalah tahun ini dan bulan rilis terakhir. misalnya 202408
.
--previous-geoscape-version
Nomor versi rilis Geoscape sebelumnya sebagai YYYYMM; digunakan untuk perbandingan QA. misalnya 202405
.
--raw-gnaf-schema
nama skema untuk menyimpan tabel GNAF mentah. Defaultnya adalah raw_gnaf_<geoscape_version>
.
--raw-admin-schema
nama skema untuk menyimpan tabel batas admin mentah. Defaultnya adalah raw_admin_bdys_<geoscape_version>
.
--gnaf-schema
nama skema tujuan untuk menyimpan tabel GNAF akhir. Defaultnya adalah gnaf_<geoscape_version>
.
--nama skema tujuan --admin-schema
untuk menyimpan tabel batas admin akhir. Defaultnya adalah admin_bdys_<geoscape_version>
.
--previous-gnaf-schema
Skema dengan tabel GNAF versi sebelumnya. Defaultnya adalah gnaf_<previous_geoscape_version>
.
--previous-admin-schema
Skema dengan tabel batas admin versi sebelumnya. Defaultnya adalah admin_bdys_<previous_geoscape_version>
.
--states
memisahkan daftar negara bagian yang akan dimuat, misalnya --states VIC TAS
. Defaultnya memuat semua negara bagian.
--prevacuum
memaksa database dikosongkan setelah tabel dihapus. Defaultnya adalah nonaktif, dan menentukan opsi ini akan memperlambat proses impor.
--raw-fk
membuat kunci utama & kunci asing untuk tabel GNAF mentah. Defaultnya adalah nonaktif, dan akan memperlambat proses impor jika ditentukan. Gunakan opsi ini jika Anda ingin menggunakan tabel GNAF mentah sebagai langkah impor sementara. Perhatikan bahwa tabel yang diproses akhir akan selalu memiliki kumpulan kunci primer dan asing yang sesuai.
--raw-unlogged
membuat tabel GNAF mentah yang tidak dicatat, sehingga mempercepat impor. Defaultnya mati. Hanya tentukan opsi ini jika Anda tidak peduli dengan tabel data mentah setelah impor - tabel tersebut akan hilang jika server mogok!
--max-processes
menentukan jumlah maksimum proses paralel yang akan digunakan untuk memuat data. Setel ini ke jumlah inti di server Postgres dikurangi 2, tetapi batasi menjadi 12 jika 16+ inti - ada manfaat minimal melebihi 12. Defaultnya adalah 4.
--no-boundary-tag
JANGAN memberi tag pada semua alamat dengan beberapa ID batas admin utama untuk membuat peta agregat dan choropleth.
Server Postgres lokal: python load-gnaf.py --gnaf-tables-path="C:tempgeoscape_202408G-NAF" --admin-bdys-path="C:tempgeoscape_202408Administrative Boundaries"
Memuat tabel GNAF ke server Postgres yang berjalan secara lokal. Arsip GNAF telah diekstraksi ke folder C:tempgeoscape_202408G-NAF
, dan batas admin telah diekstraksi ke folder C:tempgeoscape_202408Administrative Boundaries
.
Server Postgres jarak jauh: python load-gnaf.py --gnaf-tables-path="svrsharedgnaf" --local-server-dir="f:sharedgnaf" --admin-bdys-path="c:tempunzippedAdminBounds_ESRI"
Memuat Tabel GNAF yang telah diekstraksi ke folder bersama svrsharedgnaf
. Folder bersama ini sesuai dengan folder f:sharedgnaf
lokal di server Postgres. Batasan admin telah diekstraksi ke folder c:tempunzippedAdminBounds_ESRI
.
Hanya memuat negara bagian yang dipilih: python load-gnaf.py --states VIC TAS NT ...
Hanya memuat data untuk Victoria, Tasmania, dan Northern Territory
Anda dapat memuat Batas Admin tanpa GNAF. Untuk melakukan ini: beri komentar pada langkah 1, 3 dan 4 di def main.
Catatan: Anda tidak dapat memuat GNAF tanpa Admin Bdys karena dependensi diperlukan untuk membagi Melbourne dan untuk memperbaiki locality_pids non-batas pada alamat.
Saat menggunakan data yang dihasilkan dari proses ini - Anda harus mematuhi persyaratan atribusi pada halaman data.gov.au untuk GNAF dan Admin Bdys, sebagai bagian dari persyaratan lisensi data terbuka.
Skrip akan DROP ALL TABLES menggunakan CASCADE dalam skema GNAF dan Admin Bdy dan kemudian membuatnya kembali; artinya Anda akan KEHILANGAN PANDANGAN ANDA jika Anda telah membuatnya! Jika Anda ingin menyimpan data yang ada - Anda harus mengubah nama skema di skrip atau menggunakan database lain
Semua tabel GNAF mentah dapat dibuat UNLOGGED untuk mempercepat pemuatan data. Ini akan membuatnya TIDAK DAPAT DIPULIHKAN jika database Anda rusak. Anda dapat menjalankan skrip ini lagi untuk membuatnya kembali. Jika menurut Anda ini kedengarannya oke - setel tanda unlogged_tables ke True untuk memuat sedikit lebih cepat
Pemberian tag batas (diaktifkan secara default) akan menambah waktu proses 15-60 menit jika Anda memiliki PostGIS 2.2+. Jika Anda memiliki PostGIS 2.1 atau lebih rendah - diperlukan waktu JAM karena tabel batas tidak dapat dioptimalkan!
Meskipun Anda dapat memilih 4 skema mana untuk memuat data, saya belum melakukan QA pada setiap permutasi. Tetap gunakan default jika Anda memiliki pengalaman Postgres terbatas
Jika Anda tidak menjalankan skrip Python di server Postgres, Anda harus memiliki akses ke jalur jaringan ke file GNAF di server database (untuk membuat daftar file yang akan diproses). Alternatifnya adalah memiliki salinan lokal dari file mentah
Skrip sql 'buat tabel' akan menambahkan ekstensi PostGIS ke database dalam skema publik, Anda tidak perlu menambahkannya ke database Anda
Ada opsi untuk MENGVACUUM database di awal setelah menghapus tabel GNAF/Admin Bdy yang ada - ini tidak benar-benar melakukan apa pun di luar pengujian berulang. (Saya terlalu malas untuk mengeluarkannya dari kode karena itu berarti memberi nomor ulang pada semua file SQL dan saya ingin tidur sekarang)
GNAF dan Admin Boundaries siap digunakan di Postgres dalam image di Docker Hub.
Di lingkungan buruh pelabuhan Anda, tarik gambar menggunakan docker pull minus34/gnafloader:latest
Jalankan menggunakan docker run --publish=5433:5432 minus34/gnafloader:latest
Akses Postgres dalam wadah melalui port 5433
. Login default adalah - pengguna: postgres
, kata sandi: password
Catatan: image Docker yang dikompresi adalah 8 Gb, yang tidak terkompresi adalah 25 Gb
PERINGATAN: Kata sandi superuser default postgres tidak aman dan harus diubah menggunakan:
ALTER USER postgres PASSWORD '<something a lot more secure>'
Unduh file dump Postgres dan pulihkan di database Anda.
Harus memakan waktu 15-60 menit.
Postgres 14+ dengan PostGIS 3.0+
Pengetahuan tentang parameter Postgres pg_restore
Unduh file dump GNAF atau file dump GNAF GDA2020 (~2.0Gb)
Unduh file dump Admin Bdys atau file dump Admin Bdys GDA2020 (~2,8Gb)
Edit skrip restore-gnaf-admin-bdys.bat atau .sh di folder file pendukung untuk nama file dump Anda, parameter database dan untuk lokasi pg_restore
Jalankan skripnya, kembalilah dalam 15-60 menit dan nikmatilah!
Versi geoparket dari tabel spasial, serta versi parket dari tabel non-spasial, berada dalam bucket S3 publik untuk digunakan secara langsung dalam aplikasi atau layanan. Mereka juga dapat diunduh menggunakan AWS CLI.
Geometri mempunyai koordinat lintang/bujur WGS84 (SRID/EPSG:4326). Contoh kueri untuk menganalisis data menggunakan Apache Sedona, ekstensi spasial untuk Apache Spark ada di folder spark
.
Filenya ada di sini: s3://minus34.com/opendata/geoscape-202408/geoparquet/
Daftar semua kumpulan data: aws s3 ls s3://minus34.com/opendata/geoscape-202408/geoparquet/
Salin semua kumpulan data: aws s3 sync s3://minus34.com/opendata/geoscape-202408/geoparquet/ <my-local-folder>
Menggabungkan atau dikembangkan menggunakan G-NAF © Geoscape Australia yang dilisensikan oleh Persemakmuran Australia berdasarkan Perjanjian Lisensi Pengguna Akhir Open Geo-coded National Address File (G-NAF).
Digabungkan atau dikembangkan menggunakan Batas Administratif © Geoscape Australia yang dilisensikan oleh Persemakmuran Australia di bawah lisensi Creative Commons Attribution 4.0 International (CC BY 4.0).
GNAF dan Admin Bdys telah disesuaikan untuk menghilangkan beberapa batasan kecil yang diketahui pada data. Yang paling menonjol adalah:
Semua alamat tertaut ke lokasi resmi yang memiliki batas. Sejumlah kecil alamat yang tidak ada dalam GNAF mentah telah diubah locality_pidnya menjadi setara yang dikukuhkan
Daerah telah ditambahkan alamat dan jumlah jalan ke dalamnya
Daerah pinggiran kota-Lokalitas telah diratakan menjadi satu lapisan lokalitas yang berkesinambungan - Australia Selatan Ratusan telah dihapus dan distrik-distrik ACT telah ditambahkan di mana tidak ada lokalitas yang dikukuhkan
Lokalitas Melbourne, VIC telah dipecah menjadi lokalitas Melbourne, 3000 dan Melbourne 3004 (PID lokalitas baru adalah loc9901d119afda_1
& loc9901d119afda_2
). Perpecahan terjadi di Sungai Yarra (berdasarkan kode pos di alamat Melbourne)
Lapisan batas kode pos telah dibuat menggunakan kode pos di tabel alamat. Meskipun ini sangat mirip dengan batas kode pos resmi Geoscape, ada beberapa ratus alamat yang menggunakan kode pos yang salah. Jangan perlakukan data ini sebagai data otoritatif