Una forma rápida de cargar el Archivo de direcciones nacionales geocodificadas de Australia (GNAF) completo y los límites administrativos australianos en Postgres, simplificado y listo para usar como datos de referencia para geocodificación, análisis, visualización y agregación.
Eche un vistazo a estas diapositivas de introducción (PDF), así como a la página data.gov.au.
Ejecute el script Python load-gnaf y cree la base de datos usted mismo en un solo paso
Extraiga la base de datos de Docker Hub y ejecútela en un contenedor
Descargue los archivos de volcado de GNAF y/o Admin Bdys Postgres y restáurelos en su base de datos Postgres 14+
Utilice o descargue Geoparquet y Parquet Files en S3 para sus flujos de trabajo de datos y análisis; ya sea en AWS o en su propia plataforma.
La ejecución del script Python tarda entre 30 y 120 minutos en un servidor Postgres configurado para aprovechar la RAM disponible.
Puede procesar la versión GDA94 o GDA2020 de los datos; solo asegúrese de descargar la misma versión tanto para GNAF como para los límites administrativos. Si no sabe qué es GDA94 o GDA2020, descargue las versiones de GDA94 (para su información, son sistemas de coordenadas diferentes)
Para obtener un buen tiempo de carga, necesitará configurar su servidor Postgres para el rendimiento. Hay una buena guía aquí, teniendo en cuenta que tiene algunos años y que algunos de los parámetros de la memoria se pueden reforzar si tiene RAM.
Postgres 14.x y superior con PostGIS 3.2+
Agregue el directorio bin de Postgres a la RUTA de su sistema
Python 3.6+ con Psycopg 3.x
Descargue Geoscape GNAF desde data.gov.au (GDA94 o GDA2020)
Descargue los límites administrativos de Geoscape desde data.gov.au ( descargue la versión ESRI Shapefile (GDA94 o GDA2020) )
Descomprima GNAF en un directorio en su servidor Postgres
Descomprima Admin Bdys en un directorio local
Modifique la seguridad en esos directorios para otorgar acceso de lectura a Postgres
Cree la base de datos de destino (si es necesario)
Agregue PostGIS a la base de datos (si es necesario) ejecutando el siguiente SQL: CREATE EXTENSION postgis
Verifique los argumentos disponibles y requeridos ejecutando load-gnaf.py con el argumento -h
(consulte los ejemplos de línea de comando a continuación)
Ejecute el guión, vuelva en 30-120 minutos y ¡disfrútelo!
El comportamiento de gnaf-loader se puede controlar especificando varias opciones de línea de comando en el script. Los argumentos apoyados son:
--gnaf-tables-path
especifica la ruta a los archivos GNAF PSV extraídos. El servidor Postgres debe poder acceder a este directorio y es posible que sea necesario establecer la ruta local correspondiente para el servidor a este directorio a través del argumento local-server-dir
--local-server-dir
especifica la ruta local en el servidor Postgres correspondiente a gnaf-tables-path
. Si el servidor se ejecuta localmente, este argumento se puede omitir.
--admin-bdys-path
especifica la ruta a los archivos de límites de administración de Shapefile extraídos. A diferencia de gnaf-tables-path
, esta ruta no necesariamente tiene que ser accesible para el servidor Postgres remoto.
--pghost
el nombre de host del servidor Postgres. El valor predeterminado es la variable de entorno PGHOST
si está configurado; de lo contrario, el valor predeterminado es localhost
.
--pgport
el número de puerto para el servidor Postgres. El valor predeterminado es la variable de entorno PGPORT
si está configurada; de lo contrario, 5432
.
--pgdb
el nombre de la base de datos para el servidor Postgres. El valor predeterminado es la variable de entorno PGDATABASE
si está configurada; de lo contrario, geoscape
.
--pguser
el nombre de usuario para acceder al servidor Postgres. El valor predeterminado es la variable de entorno PGUSER
si está configurada; de lo contrario, postgres
.
--pgpassword
contraseña para acceder al servidor Postgres. El valor predeterminado es la variable de entorno PGPASSWORD
si está configurada; de lo contrario, password
.
--srid
Establece el sistema de coordenadas de los datos de entrada. Los valores válidos son 4283
(el valor predeterminado: GDA94 lat/long) y 7844
(GDA2020 lat/long).
--geoscape-version
Número de versión de Geoscape en formato AAAAMM. El valor predeterminado es el año actual y el último mes de lanzamiento. por ejemplo, 202408
.
--previous-geoscape-version
Número de versión anterior de Geoscape como AAAAMM; utilizado para la comparación de control de calidad. por ejemplo, 202405
.
--raw-gnaf-schema
nombre del esquema para almacenar tablas GNAF sin procesar. El valor predeterminado es raw_gnaf_<geoscape_version>
.
--raw-admin-schema
nombre del esquema para almacenar tablas de límites de administración sin formato. El valor predeterminado es raw_admin_bdys_<geoscape_version>
.
--gnaf-schema
nombre del esquema de destino para almacenar las tablas GNAF finales. El valor predeterminado es gnaf_<geoscape_version>
.
--admin-schema
nombre del esquema de destino para almacenar las tablas de límites de administración finales. El valor predeterminado es admin_bdys_<geoscape_version>
.
--previous-gnaf-schema
Esquema con la versión anterior de las tablas GNAF. El valor predeterminado es gnaf_<previous_geoscape_version>
.
--previous-admin-schema
Esquema con la versión anterior de las tablas de límites de administración. El valor predeterminado es admin_bdys_<previous_geoscape_version>
.
--states
lista de estados separados por espacios para cargar, por ejemplo --states VIC TAS
. El valor predeterminado es cargar todos los estados.
--prevacuum
obliga a vaciar la base de datos después de eliminar tablas. El valor predeterminado está desactivado y especificar esta opción ralentizará el proceso de importación.
--raw-fk
crea claves primarias y externas para las tablas GNAF sin formato. El valor predeterminado está desactivado y ralentizará el proceso de importación si se especifica. Utilice esta opción si tiene la intención de utilizar las tablas GNAF sin procesar como algo más que un paso de importación temporal. Tenga en cuenta que las tablas finales procesadas siempre tendrán configuradas las claves primarias y externas adecuadas.
--raw-unlogged
crea tablas GNAF sin procesar no registradas, lo que acelera la importación. El valor predeterminado es apagado. Especifique esta opción sólo si no le importan las tablas de datos sin procesar después de la importación; ¡se perderán si el servidor falla!
--max-processes
especifica el número máximo de procesos paralelos que se utilizarán para la carga de datos. Establezca esto en la cantidad de núcleos en el servidor Postgres menos 2, pero limítelo a 12 si tiene más de 16 núcleos; hay un beneficio mínimo más allá de 12. El valor predeterminado es 4.
--no-boundary-tag
NO etiquete todas las direcciones con algunos de los ID de límites de administrador clave para crear agregados y mapas de coropletas.
Servidor Postgres local: python load-gnaf.py --gnaf-tables-path="C:tempgeoscape_202408G-NAF" --admin-bdys-path="C:tempgeoscape_202408Administrative Boundaries"
Carga las tablas GNAF en un servidor Postgres que se ejecuta localmente. Los archivos GNAF se extrajeron a la carpeta C:tempgeoscape_202408G-NAF
y los límites administrativos se extrajeron a la carpeta C:tempgeoscape_202408Administrative Boundaries
.
Servidor Postgres remoto: python load-gnaf.py --gnaf-tables-path="svrsharedgnaf" --local-server-dir="f:sharedgnaf" --admin-bdys-path="c:tempunzippedAdminBounds_ESRI"
Carga el Tablas GNAF que se han extraído a la carpeta compartida svrsharedgnaf
. Esta carpeta compartida corresponde a la carpeta local f:sharedgnaf
en el servidor Postgres. Los límites de administración se han extraído a la carpeta c:tempunzippedAdminBounds_ESRI
.
Cargando solo los estados seleccionados: python load-gnaf.py --states VIC TAS NT ...
Carga solo los datos de Victoria, Tasmania y Territorio del Norte
Puede cargar los límites de administración sin GNAF. Para hacer esto: comente los pasos 1, 3 y 4 en def main.
Nota: no puede cargar GNAF sin Admin Bdys debido a las dependencias necesarias para dividir Melbourne y corregir locality_pids no límite en las direcciones.
Al utilizar los datos resultantes de este proceso, deberá cumplir con los requisitos de atribución en las páginas data.gov.au para GNAF y Admin Bdys, como parte de los requisitos de licencia de datos abiertos.
Los scripts ELIMINARÁN TODAS LAS TABLAS usando CASCADE en los esquemas GNAF y Admin Bdy y luego las recrearán; ¡Lo que significa que PERDERÁS TUS VISTAS si has creado alguna! Si desea conservar los datos existentes, deberá cambiar los nombres de los esquemas en el script o utilizar una base de datos diferente.
Todas las tablas GNAF sin procesar se pueden crear SIN REGISTRAR para acelerar la carga de datos. Esto los hará IRRECUPERABLES si su base de datos está dañada. Puede ejecutar estos scripts nuevamente para recrearlos. Si cree que esto suena bien, configure el indicador unlogged_tables en True para una carga un poco más rápida.
El etiquetado de límites (activado de forma predeterminada) agregará entre 15 y 60 minutos al proceso si tiene PostGIS 2.2+. Si tiene PostGIS 2.1 o inferior, puede llevar HORAS ya que las tablas de límites no se pueden optimizar.
Si bien puede elegir en qué 4 esquemas cargar los datos, no he realizado un control de calidad de todas las permutaciones. Quédese con los valores predeterminados si tiene experiencia limitada en Postgres
Si no está ejecutando el script Python en el servidor Postgres, necesitará tener acceso a una ruta de red a los archivos GNAF en el servidor de la base de datos (para crear la lista de archivos para procesar). La alternativa es tener una copia local de los archivos sin formato.
El script SQL 'crear tablas' agregará la extensión PostGIS a la base de datos en el esquema público, no es necesario agregarla a su base de datos.
Hay una opción para VACÍAR la base de datos al inicio después de eliminar las tablas GNAF/Admin Bdy existentes; esto realmente no hace nada más allá de las pruebas repetidas. (Me dio pereza sacarlo del código porque significaba volver a numerar todos los archivos SQL y me gustaría irme a la cama ahora)
GNAF y los límites de administración están listos para usar en Postgres en una imagen en Docker Hub.
En su entorno acoplable, extraiga la imagen usando docker pull minus34/gnafloader:latest
Ejecute usando docker run --publish=5433:5432 minus34/gnafloader:latest
Acceda a Postgres en el contenedor a través del puerto 5433
. El inicio de sesión predeterminado es: usuario: postgres
, contraseña: password
Nota: la imagen de Docker comprimida es de 8 Gb, la imagen sin comprimir es de 25 Gb
ADVERTENCIA: La contraseña de superusuario predeterminada de Postgres no es segura y debe cambiarse mediante:
ALTER USER postgres PASSWORD '<something a lot more secure>'
Descargue archivos de volcado de Postgres y restáurelos en su base de datos.
Debería tardar entre 15 y 60 minutos.
Postgres 14+ con PostGIS 3.0+
Conocimiento de los parámetros pg_restore de Postgres
Descargue el archivo de volcado de GNAF o el archivo de volcado de GNAF GDA2020 (~2,0 Gb)
Descargue el archivo de volcado de Admin Bdys o el archivo de volcado de Admin Bdys GDA2020 (~2,8 Gb)
Edite el script recovery-gnaf-admin-bdys.bat o .sh en la carpeta de archivos de soporte para los nombres de los archivos de volcado, los parámetros de la base de datos y la ubicación de pg_restore.
Ejecute el guión, vuelva en 15 a 60 minutos y ¡disfrútelo!
Las versiones Geoparquet de las tablas espaciales, así como las versiones parquet de las tablas no espaciales, se encuentran en un depósito S3 público para su uso directamente en una aplicación o servicio. También se pueden descargar mediante la CLI de AWS.
Las geometrías tienen coordenadas de latitud/longitud WGS84 (SRID/EPSG:4326). Una consulta de ejemplo para analizar los datos utilizando Apache Sedona, la extensión espacial de Apache Spark se encuentra en la carpeta spark
.
Los archivos están aquí: s3://minus34.com/opendata/geoscape-202408/geoparquet/
Enumere todos los conjuntos de datos: aws s3 ls s3://minus34.com/opendata/geoscape-202408/geoparquet/
Copie todos los conjuntos de datos: aws s3 sync s3://minus34.com/opendata/geoscape-202408/geoparquet/ <my-local-folder>
Incorpora o se desarrolla utilizando G-NAF © Geoscape Australia con licencia de la Commonwealth de Australia según el Acuerdo de licencia de usuario final del Archivo de direcciones nacional con codificación geográfica abierta (G-NAF).
Incorpora o desarrolla utilizando Límites Administrativos © Geoscape Australia con licencia de la Commonwealth de Australia bajo licencia Creative Commons Attribution 4.0 International (CC BY 4.0).
GNAF y Admin Bdys se han personalizado para eliminar algunas de las limitaciones menores conocidas con los datos. Los más notables son:
Todas las direcciones enlazan con una localidad publicada que tiene un límite. A esa pequeña cantidad de direcciones que no están en GNAF sin formato se les ha cambiado su locality_pid a un equivalente publicado
A las localidades se les han agregado direcciones y recuentos de calles.
Los bdys de suburbios y localidades se han aplanado en una única capa continua de localidades: en el sur de Australia se han eliminado cientos y se han agregado distritos ACT donde no hay localidades publicadas.
La localidad de Melbourne, VIC se ha dividido en localidades de Melbourne, 3000 y Melbourne 3004 (los PID de la nueva localidad son loc9901d119afda_1
y loc9901d119afda_2
). La división ocurre en el río Yarra (según los códigos postales de las direcciones de Melbourne)
Se ha creado una capa de límites de códigos postales utilizando los códigos postales en las tablas de direcciones. Si bien esto emula fielmente los límites del código postal oficial de Geoscape, hay varios cientos de direcciones que se encuentran en el código postal incorrecto bdy. No trate estos datos como autorizados.