一种将完整的澳大利亚地理编码国家地址文件 (GNAF) 和澳大利亚行政边界加载到 Postgres 中的快速方法,经过简化,可用作地理编码、分析、可视化和聚合的参考数据。
查看这些介绍幻灯片 (PDF) 以及 data.gov.au 页面。
在配置为利用可用 RAM 的 Postgres 服务器上运行 Python 脚本需要 30-120 分钟。
您可以处理 GDA94 或 GDA2020 版本的数据 - 只需确保为 GNAF 和管理边界下载相同的版本即可。如果您不知道 GDA94 或 GDA2020 是什么,请下载 GDA94 版本(仅供参考 - 它们是不同的坐标系)
为了获得良好的加载时间,您需要配置 Postgres 服务器以提高性能。这里有一个很好的指南,指出它已经有几年了,如果你有 RAM,一些内存参数可以增强。
CREATE EXTENSION postgis
-h
参数运行 load-gnaf.py 检查可用和必需的参数(请参阅下面的命令行示例)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
Geoscape 版本号,格式为 YYYYMM。默认为当前年份和最后发布月份。例如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 来标记所有地址。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
文件夹。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。
使用此过程中生成的数据时,您需要遵守 data.gov.au 页面上 GNAF 和 Admin Bdys 的归属要求,作为开放数据许可要求的一部分。
GNAF 和管理边界已准备好在 Docker Hub 上的映像中的 Postgres 中使用。
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 分钟。
空间表的 Geoparquet 版本以及非空间表的 Parquet 版本位于公共 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/
使用 G-NAF 合并或开发 © Geoscape Australia 已根据开放地理编码国家地址文件 (G-NAF) 最终用户许可协议获得澳大利亚联邦许可。
使用管理边界合并或开发 © Geoscape Australia 经澳大利亚联邦根据 Creative Commons Attribution 4.0 International 许可证 (CC BY 4.0) 许可。
GNAF 和 Admin Bdys 已经过定制,消除了数据的一些已知的次要限制。最值得注意的是:
loc9901d119afda_1
和loc9901d119afda_2
)。分流发生在亚拉河(基于墨尔本地址中的邮政编码)