วิธีที่รวดเร็วในการโหลดไฟล์ Geocoded National Address File ของออสเตรเลีย (GNAF) และ Australian Administrative Boundaries ลงใน Postgres ที่เรียบง่ายและพร้อมใช้เป็นข้อมูลอ้างอิงสำหรับการเข้ารหัสทางภูมิศาสตร์ การวิเคราะห์ การสร้างภาพ และการรวมกลุ่ม
ดูสไลด์แนะนำ (PDF) เหล่านี้ รวมถึงหน้า data.gov.au
รันสคริปต์ load-gnaf Python และสร้างฐานข้อมูลด้วยตัวเองในขั้นตอนเดียว
ดึงฐานข้อมูลจาก Docker Hub และรันในคอนเทนเนอร์
ดาวน์โหลดไฟล์ดัมพ์ GNAF และ/หรือ Admin Bdys Postgres และกู้คืนในฐานข้อมูล Postgres 14+ ของคุณ
ใช้หรือดาวน์โหลดไฟล์ Geoparquet และ Parquet ใน S3 สำหรับเวิร์กโฟลว์ข้อมูลและการวิเคราะห์ของคุณ ทั้งใน AWS หรือแพลตฟอร์มของคุณเอง
การเรียกใช้สคริปต์ Python จะใช้เวลา 30-120 นาทีบนเซิร์ฟเวอร์ Postgres ที่กำหนดค่าให้ใช้ประโยชน์จาก RAM ที่มีอยู่
คุณสามารถประมวลผลข้อมูลเวอร์ชัน GDA94 หรือ GDA2020 ได้ เพียงตรวจสอบให้แน่ใจว่าคุณดาวน์โหลดเวอร์ชันเดียวกันสำหรับทั้ง GNAF และ Administrative Boundaries หากคุณไม่ทราบว่า GDA94 หรือ GDA2020 คืออะไร ให้ดาวน์โหลดเวอร์ชัน GDA94 (โปรดทราบ - เป็นระบบพิกัดที่แตกต่างกัน)
เพื่อให้โหลดได้เร็ว คุณจะต้องกำหนดค่าเซิร์ฟเวอร์ Postgres ให้มีประสิทธิภาพ มีคำแนะนำที่ดีอยู่ที่นี่ โดยสังเกตว่ามันมีอายุไม่กี่ปีแล้ว และพารามิเตอร์หน่วยความจำบางตัวอาจเพิ่มขึ้นได้หากคุณมี RAM
Postgres 14.x และสูงกว่าด้วย PostGIS 3.2+
เพิ่มไดเร็กทอรี Postgres bin ให้กับ PATH ระบบของคุณ
Python 3.6+ พร้อม Psycopg 3.x
ดาวน์โหลด Geoscape GNAF จาก data.gov.au (GDA94 หรือ GDA2020)
ดาวน์โหลด Geoscape Administrative Boundaries จาก data.gov.au ( ดาวน์โหลดเวอร์ชัน ESRI Shapefile (GDA94 หรือ GDA2020) )
คลายซิป GNAF ไปยังไดเร็กทอรีบนเซิร์ฟเวอร์ Postgres ของคุณ
คลายซิป Admin Bdys ไปยังไดเร็กทอรีในเครื่อง
แก้ไขการรักษาความปลอดภัยในไดเร็กทอรีเหล่านั้นเพื่อให้สิทธิ์การเข้าถึงการอ่านแก่ Postgres
สร้างฐานข้อมูลเป้าหมาย (ถ้าจำเป็น)
เพิ่ม PostGIS ลงในฐานข้อมูล (หากจำเป็น) โดยการรัน SQL ต่อไปนี้: CREATE EXTENSION postgis
ตรวจสอบอาร์กิวเมนต์ที่มีอยู่และจำเป็นโดยการรัน load-gnaf.py ด้วยอาร์กิวเมนต์ -h
(ดูตัวอย่างบรรทัดคำสั่งด้านล่าง)
รันสคริปต์ กลับมาอีกครั้งใน 30-120 นาที แล้วสนุกได้เลย!
พฤติกรรมของ gnaf-loader สามารถควบคุมได้โดยการระบุตัวเลือกบรรทัดคำสั่งต่างๆ ให้กับสคริปต์ อาร์กิวเมนต์ที่รองรับคือ:
--gnaf-tables-path
ระบุเส้นทางไปยังไฟล์ GNAF PSV ที่แตกออกมา ไดเรกทอรีนี้จะต้องสามารถเข้าถึงได้โดยเซิร์ฟเวอร์ Postgres และอาจต้องตั้งค่าเส้นทางในเครื่องที่เกี่ยวข้องสำหรับเซิร์ฟเวอร์ไปยังไดเรกทอรีนี้ผ่านอาร์กิวเมนต์ local-server-dir
--local-server-dir
ระบุเส้นทางท้องถิ่นบนเซิร์ฟเวอร์ Postgres ที่สอดคล้องกับ gnaf-tables-path
หากเซิร์ฟเวอร์กำลังทำงานอยู่ในเครื่อง สามารถละเว้นอาร์กิวเมนต์นี้ได้
--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 lat/long) และ 7844
(GDA2020 lat/long)
--geoscape-version
หมายเลขเวอร์ชัน Geoscape ในรูปแบบ YYYYMM ค่าเริ่มต้นเป็นปีปัจจุบันและเดือนที่วางจำหน่ายล่าสุด เช่น 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
Schema พร้อมด้วยตาราง GNAF เวอร์ชันก่อนหน้า ค่าเริ่มต้นคือ gnaf_<previous_geoscape_version>
--previous-admin-schema
Schema พร้อมด้วยตารางขอบเขตผู้ดูแลระบบเวอร์ชันก่อนหน้า ค่าเริ่มต้นคือ admin_bdys_<previous_geoscape_version>
--states
ช่องว่างที่คั่นรายการของรัฐที่จะโหลด เช่น --states VIC TAS
ค่าเริ่มต้นคือการโหลดทุกสถานะ
--prevacuum
บังคับให้ฐานข้อมูลถูกดูดฝุ่นหลังจากวางตาราง มีค่าเริ่มต้นเป็นปิด และการระบุตัวเลือกนี้จะทำให้กระบวนการนำเข้าช้าลง
--raw-fk
สร้างทั้งคีย์หลักและคีย์ต่างประเทศสำหรับตาราง GNAF แบบดิบ มีค่าเริ่มต้นเป็นปิด และจะทำให้กระบวนการนำเข้าช้าลงหากระบุไว้ ใช้ตัวเลือกนี้หากคุณต้องการใช้ตาราง GNAF แบบดิบเป็นอย่างอื่นนอกเหนือจากขั้นตอนการนำเข้าชั่วคราว โปรดทราบว่าตารางที่ประมวลผลขั้นสุดท้ายจะมีการตั้งค่าคีย์หลักและคีย์นอกที่เหมาะสมเสมอ
--raw-unlogged
สร้างตาราง GNAF ดิบที่ไม่ได้บันทึก ซึ่งจะช่วยเร่งการนำเข้า ค่าเริ่มต้นเป็นปิด ระบุตัวเลือกนี้เฉพาะในกรณีที่คุณไม่สนใจตารางข้อมูลดิบหลังจากการนำเข้า ตารางเหล่านั้นจะหายไปหากเซิร์ฟเวอร์ขัดข้อง!
--max-processes
ระบุจำนวนสูงสุดของกระบวนการแบบขนานที่จะใช้สำหรับการโหลดข้อมูล ตั้งค่านี้เป็นจำนวนคอร์บนเซิร์ฟเวอร์ Postgres ลบ 2 แต่จำกัดไว้ที่ 12 ถ้า 16+ คอร์ - มีประโยชน์น้อยที่สุดเกินกว่า 12 ค่าเริ่มต้นเป็น 4
--no-boundary-tag
อย่าติดแท็กที่อยู่ทั้งหมดด้วย ID ขอบเขตผู้ดูแลระบบที่สำคัญบางส่วนสำหรับการสร้างการรวมและแผนที่ choropleth
เซิร์ฟเวอร์ Postgres ในเครื่อง: python load-gnaf.py --gnaf-tables-path="C:tempgeoscape_202408G-NAF" --admin-bdys-path="C:tempgeoscape_202408Administrative Boundaries"
โหลดตาราง GNAF ไปยังเซิร์ฟเวอร์ Postgres ที่ทำงานภายในเครื่อง ไฟล์เก็บถาวร 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"
โหลด ตาราง GNAF ที่ถูกแยกไปยังโฟลเดอร์แชร์ svrsharedgnaf
โฟลเดอร์ที่ใช้ร่วมกันนี้สอดคล้องกับโฟลเดอร์ f:sharedgnaf
ในเครื่องบนเซิร์ฟเวอร์ Postgres ขอบเขตของผู้ดูแลระบบได้รับการแยกไปยังโฟลเดอร์ c:tempunzippedAdminBounds_ESRI
กำลังโหลดเฉพาะรัฐที่เลือก: python load-gnaf.py --states VIC TAS NT ...
โหลดเฉพาะข้อมูลสำหรับวิกตอเรีย แทสเมเนีย และนอร์เทิร์นเทร์ริทอรี
คุณสามารถโหลดขอบเขตของผู้ดูแลระบบได้โดยไม่ต้องใช้ GNAF เมื่อต้องการทำสิ่งนี้: แสดงความคิดเห็นขั้นตอนที่ 1, 3 และ 4 ใน def main
หมายเหตุ: คุณไม่สามารถโหลด GNAF ได้หากไม่มี Admin Bdys เนื่องจากการพึ่งพาที่จำเป็นในการแบ่งเมลเบิร์นและแก้ไข locality_pids ที่ไม่มีขอบเขตในที่อยู่
เมื่อใช้ข้อมูลที่เป็นผลมาจากกระบวนการนี้ คุณจะต้องปฏิบัติตามข้อกำหนดการระบุแหล่งที่มาในหน้า data.gov.au สำหรับ GNAF และ Admin Bdys ซึ่งเป็นส่วนหนึ่งของข้อกำหนดสิทธิ์การใช้งานข้อมูลแบบเปิด
สคริปต์จะปล่อยตารางทั้งหมดโดยใช้ CASCADE ในสคีมา GNAF และ Admin Bdy จากนั้นสร้างขึ้นใหม่ หมายความว่าคุณจะสูญเสียมุมมองของคุณหากคุณสร้างมันขึ้นมา! หากคุณต้องการเก็บข้อมูลที่มีอยู่ คุณจะต้องเปลี่ยนชื่อสคีมาในสคริปต์หรือใช้ฐานข้อมูลอื่น
สามารถสร้างตาราง GNAF แบบดิบทั้งหมดได้ โดยไม่ได้บันทึก เพื่อเพิ่มความเร็วในการโหลดข้อมูล ซึ่งจะทำให้ไม่สามารถกู้คืนได้หากฐานข้อมูลของคุณเสียหาย คุณสามารถเรียกใช้สคริปต์เหล่านี้อีกครั้งเพื่อสร้างใหม่ได้ หากคุณคิดว่าฟังดูโอเค ให้ตั้งค่าสถานะ unlogged_tables เป็น True เพื่อให้โหลดเร็วขึ้นเล็กน้อย
การแท็กขอบเขต (เปิดโดยค่าเริ่มต้น) จะเพิ่มเวลา 15-60 นาทีในกระบวนการ หากคุณมี PostGIS 2.2+ หากคุณมี PostGIS 2.1 หรือต่ำกว่า - อาจใช้เวลา HOURS เนื่องจากไม่สามารถปรับตารางขอบเขตให้เหมาะสมได้!
แม้ว่าคุณสามารถเลือกสคีมา 4 รายการที่จะโหลดข้อมูลลงไปได้ แต่ฉันก็ไม่ได้เปลี่ยนรูปแบบทุกครั้ง ยึดตามค่าเริ่มต้นหากคุณมีประสบการณ์ Postgres ที่จำกัด
หากคุณไม่ได้เรียกใช้สคริปต์ Python บนเซิร์ฟเวอร์ Postgres คุณจะต้องมีสิทธิ์เข้าถึงเส้นทางเครือข่ายไปยังไฟล์ GNAF บนเซิร์ฟเวอร์ฐานข้อมูล (เพื่อสร้างรายการไฟล์ที่จะประมวลผล) ทางเลือกอื่นคือการมีสำเนาไฟล์ดิบในเครื่อง
สคริปต์ sql 'สร้างตาราง' จะเพิ่มส่วนขยาย PostGIS ให้กับฐานข้อมูลในสคีมาสาธารณะ คุณไม่จำเป็นต้องเพิ่มลงในฐานข้อมูลของคุณ
มีตัวเลือกในการ VACUUM ฐานข้อมูลตั้งแต่เริ่มต้นหลังจากทิ้งตาราง GNAF/Admin Bdy ที่มีอยู่ ซึ่งไม่ได้ทำอะไรเลยนอกจากการทดสอบซ้ำ (ฉันขี้เกียจเกินไปที่จะเอามันออกจากโค้ดเพราะมันหมายถึงการเรียงลำดับไฟล์ SQL ทั้งหมดใหม่และฉันอยากจะเข้านอนแล้ว)
GNAF และขอบเขตผู้ดูแลระบบพร้อมใช้งานใน Postgres ในรูปภาพบน Docker Hub แล้ว
ในสภาพแวดล้อมนักเทียบท่าของคุณให้ดึงอิมเมจโดยใช้ docker pull minus34/gnafloader:latest
รันโดยใช้ docker run --publish=5433:5432 minus34/gnafloader:latest
เข้าถึง Postgres ในคอนเทนเนอร์ผ่านพอร์ต 5433
การเข้าสู่ระบบเริ่มต้นคือ - ผู้ใช้: postgres
รหัสผ่าน: password
หมายเหตุ: อิมเมจ Docker ที่บีบอัดคือ 8Gb, ที่ไม่บีบอัดคือ 25Gb
คำเตือน: รหัสผ่านผู้ใช้ขั้นสูงของ 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)
แก้ไขสคริปต์ Restore-gnaf-admin-bdys.bat หรือ .sh ในโฟลเดอร์ support-files สำหรับชื่อไฟล์ดัมพ์ พารามิเตอร์ฐานข้อมูล และตำแหน่งของ pg_restore
รันสคริปต์ กลับมาอีกครั้งใน 15-60 นาทีแล้วสนุกได้เลย!
ตารางเชิงพื้นที่เวอร์ชัน Geoparquet รวมถึงตารางที่ไม่ใช่เชิงพื้นที่เวอร์ชันปาร์เก้ อยู่ในบัคเก็ต 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/ <my-local-folder>
รวมหรือพัฒนาโดยใช้ G-NAF © Geoscape Australia ซึ่งได้รับอนุญาตจากเครือจักรภพแห่งออสเตรเลียภายใต้ข้อตกลงสิทธิ์การใช้งานสำหรับผู้ใช้ปลายทาง Open Geo-coded National Address File (G-NAF)
รวมหรือพัฒนาโดยใช้ขอบเขตการบริหาร © Geoscape Australia ได้รับอนุญาตจากเครือจักรภพออสเตรเลียภายใต้ใบอนุญาต Creative Commons Attribution 4.0 International (CC BY 4.0)
GNAF และ Admin Bdys ได้รับการปรับแต่งเพื่อลบข้อจำกัดเล็กๆ น้อยๆ ที่ทราบบางประการเกี่ยวกับข้อมูล สิ่งที่น่าสังเกตมากที่สุดคือ:
ที่อยู่ทั้งหมดเชื่อมโยงกับท้องที่ที่มีขอบเขต ที่อยู่จำนวนเล็กน้อยที่ไม่ได้อยู่ใน GNAF แบบดิบได้เปลี่ยน locality_pid ให้เทียบเท่ากับราชกิจจานุเบกษา
ท้องที่ต่างๆ ได้เพิ่มที่อยู่และจำนวนถนนเข้าไปแล้ว
พื้นที่ชานเมืองและบริเวณต่างๆ ถูกทำให้ราบเป็นชั้นๆ ของพื้นที่ต่อเนื่องเพียงชั้นเดียว - พื้นที่หลายร้อยแห่งของออสเตรเลียใต้ได้ถูกลบออก และเขต ACT ได้ถูกเพิ่มเข้ามาโดยไม่มีพื้นที่ในราชกิจจานุเบกษา
ท้องที่ของเมลเบิร์น, VIC ได้ถูกแบ่งออกเป็นท้องที่ของเมลเบิร์น, 3000 และเมลเบิร์น 3004 (PID ของท้องที่ใหม่คือ loc9901d119afda_1
& loc9901d119afda_2
) การแยกเกิดขึ้นที่แม่น้ำยาร์รา (ตามรหัสไปรษณีย์ในที่อยู่เมลเบิร์น)
มีการสร้างชั้นขอบเขตของรหัสไปรษณีย์โดยใช้รหัสไปรษณีย์ในตารางที่อยู่ แม้ว่าการดำเนินการนี้จะเลียนแบบขอบเขตรหัสไปรษณีย์อย่างเป็นทางการของ Geoscape อย่างใกล้ชิด แต่ก็มีที่อยู่หลายร้อยรายการที่อยู่ในรหัสไปรษณีย์ที่ไม่ถูกต้อง อย่าถือว่าข้อมูลนี้เป็นข้อมูลที่เชื่อถือได้