전체 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+ 포함)
시스템 PATH에 Postgres bin 디렉터리를 추가합니다.
Python 3.6+(Psycopg 3.x 포함)
data.gov.au에서 Geoscape GNAF를 다운로드하세요(GDA94 또는 GDA2020)
data.gov.au에서 Geoscape Administrative Boundaries를 다운로드하세요( ESRI Shapefile(GDA94 또는 GDA2020) 버전을 다운로드하세요 )
Postgres 서버의 디렉터리에 GNAF 압축을 푼다.
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
YYYYMM 형식의 Geoscape 버전 번호입니다. 기본값은 현재 연도와 마지막 릴리스 월입니다. 예: 202408
.
--previous-geoscape-version
이전 Geoscape 릴리스 버전 번호는 YYYYMM입니다. QA 비교에 사용됩니다. 예: 202405
.
--raw-gnaf-schema
원시 GNAF 테이블을 저장할 스키마 이름. 기본값은 raw_gnaf_
입니다.
--raw-admin-schema
원시 관리 경계 테이블을 저장할 스키마 이름. 기본값은 raw_admin_bdys_
입니다.
--gnaf-schema
최종 GNAF 테이블을 저장할 대상 스키마 이름. 기본값은 gnaf_
입니다.
--admin-schema
최종 관리 경계 테이블을 저장할 대상 스키마 이름. 기본값은 admin_bdys_
입니다.
--previous-gnaf-schema
이전 버전의 GNAF 테이블이 포함된 스키마. 기본값은 gnaf_
입니다.
--previous-admin-schema
이전 버전의 관리 경계 테이블이 포함된 스키마. 기본값은 admin_bdys_
입니다.
--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"
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"
공유 폴더 svrsharedgnaf
에 추출된 GNAF 테이블. 이 공유 폴더는 Postgres 서버의 로컬 f:sharedgnaf
폴더에 해당합니다. 관리 경계가 c:tempunzippedAdminBounds_ESRI
폴더로 추출되었습니다.
선택한 주만 로드: python load-gnaf.py --states VIC TAS NT ...
빅토리아, 태즈메이니아 및 노던 테리토리에 대한 데이터만 로드합니다.
GNAF 없이 관리 경계를 로드할 수 있습니다. 이렇게 하려면 def main에서 1, 3, 4단계를 주석 처리하세요.
참고: Melbourne을 분할하고 주소의 경계가 아닌 locality_pids를 수정하는 데 필요한 종속성으로 인해 Admin Bdys 없이 GNAF를 로드할 수 없습니다.
이 프로세스의 결과 데이터를 사용할 때 공개 데이터 라이선스 요구 사항의 일부로 GNAF 및 Admin Bdys에 대한 data.gov.au 페이지의 귀속 요구 사항을 준수해야 합니다.
스크립트는 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분 정도 소요됩니다.
PostGIS 3.0+가 포함된 Postgres 14+
Postgres pg_restore 매개변수에 대한 지식
GNAF 덤프 파일 또는 GNAF GDA2020 덤프 파일(~2.0Gb)을 다운로드합니다.
Admin Bdys 덤프 파일 또는 Admin Bdys GDA2020 덤프 파일(~2.8Gb)을 다운로드합니다.
덤프 파일 이름, 데이터베이스 매개변수 및 pg_restore 위치에 대해 support-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/
G-NAF(Open Geo-coded National Address File) 최종 사용자 라이선스 계약에 따라 호주 연방의 라이선스를 받은 G-NAF © Geoscape Australia를 사용하여 통합하거나 개발했습니다.
Creative Commons Attribution 4.0 국제 라이센스(CC BY 4.0)에 따라 호주 연방에서 라이센스를 받은 Administrative Boundaries © Geoscape Australia를 사용하여 통합하거나 개발했습니다.
GNAF 및 Admin Bdys는 데이터에 대해 알려진 사소한 제한 사항 중 일부를 제거하도록 사용자 정의되었습니다. 가장 주목할만한 것은 다음과 같습니다:
모든 주소는 경계가 있는 공보 지역에 연결됩니다. 원시 GNAF에 없는 소수의 주소는 해당 locality_pid가 공보로 변경되었습니다.
지역에는 주소와 거리 수가 추가되었습니다.
교외-지방 bdy는 하나의 연속된 지방 계층으로 통합되었습니다. - South Australian Hundreds가 제거되고 관보된 지방이 없는 곳에 ACT 지구가 추가되었습니다.
Melbourne, VIC 지역은 Melbourne, 3000 및 Melbourne 3004 지역으로 분할되었습니다(새 지역 PID는 loc9901d119afda_1
& loc9901d119afda_2
입니다). 분할은 야라강(멜버른 주소의 우편번호 기준)에서 발생합니다.
주소 테이블의 우편번호를 사용하여 우편번호 경계 레이어가 생성되었습니다. 이는 공식 Geoscape 우편번호 경계를 밀접하게 에뮬레이션하는 반면, 잘못된 우편번호 bdy에 있는 주소가 수백 개 있습니다. 이 데이터를 신뢰할 수 있는 데이터로 취급하지 마세요.