Быстрый способ загрузить полный геокодированный файл национальных адресов Австралии (GNAF) и административных границ Австралии в Postgres, упрощенный и готовый к использованию в качестве справочных данных для геокодирования, анализа, визуализации и агрегирования.
Взгляните на эти вступительные слайды (PDF), а также на страницу data.gov.au.
Запустите скрипт Python load-gnaf и создайте базу данных самостоятельно за один шаг.
Извлеките базу данных из Docker Hub и запустите ее в контейнере.
Загрузите файлы дампа GNAF и/или Admin Bdys Postgres и восстановите их в базе данных Postgres 14+.
Используйте или загрузите файлы Geoparquet и Parquet в S3 для рабочих процессов обработки данных и аналитики; либо в AWS, либо на вашей собственной платформе.
Запуск сценария Python занимает 30–120 минут на сервере Postgres, настроенном на использование доступной оперативной памяти.
Вы можете обрабатывать версию данных GDA94 или GDA2020 — просто убедитесь, что вы загружаете одну и ту же версию как для GNAF, так и для административных границ. Если вы не знаете, что такое GDA94 или GDA2020, загрузите версии GDA94 (к вашему сведению — это разные системы координат).
Чтобы обеспечить хорошее время загрузки, вам необходимо настроить сервер Postgres на производительность. Здесь есть хорошее руководство, в котором отмечается, что ему уже несколько лет, и некоторые параметры памяти можно улучшить, если у вас есть ОЗУ.
Postgres 14.x и выше с PostGIS 3.2+
Добавьте каталог bin Postgres в PATH вашей системы.
Python 3.6+ с Psycopg 3.x
Загрузите Geoscape GNAF с сайта data.gov.au (GDA94 или GDA2020).
Загрузите административные границы Geoscape с сайта data.gov.au ( загрузите версию шейп-файла ESRI (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) и 7844
(широта/долгота GDA2020).
--geoscape-version
Номер версии Geoscape в формате ГГГГММ. По умолчанию текущий год и последний месяц выпуска. например 202408
.
--previous-geoscape-version
Номер предыдущей версии выпуска Geoscape в формате ГГГГММ; используется для сравнения качества. например 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
Схема с предыдущей версией таблиц GNAF. По умолчанию — gnaf_<previous_geoscape_version>
.
--previous-admin-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
НЕ помечайте все адреса некоторыми ключевыми идентификаторами границ администратора для создания агрегатов и картографических карт.
Локальный сервер 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 или более ранней версии, это может занять ЧАСЫ, поскольку граничные таблицы невозможно оптимизировать!
Хотя вы можете выбрать, в какие 4 схемы загружать данные, я не проверял каждую перестановку. Придерживайтесь значений по умолчанию, если у вас ограниченный опыт работы с Postgres.
Если вы не запускаете сценарий Python на сервере Postgres, вам потребуется доступ к сетевому пути к файлам GNAF на сервере базы данных (чтобы создать список файлов для обработки). Альтернативой является наличие локальной копии необработанных файлов.
SQL-скрипт «создать таблицы» добавит расширение PostGIS в базу данных в общедоступной схеме, вам не нужно добавлять его в свою базу данных.
Существует возможность ОЧИСТИТЬ базу данных в начале после удаления существующих таблиц 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 — 8 ГБ, несжатый — 25 ГБ.
ВНИМАНИЕ: Пароль суперпользователя 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,0 ГБ).
Загрузите файл дампа Admin Bdys или файл дампа Admin Bdys GDA2020 (~ 2,8 ГБ).
Отредактируйте сценарий восстановления-gnaf-admin-bdys.bat или .sh в папке вспомогательных файлов, указав имена файлов дампа, параметры базы данных и местоположение pg_restore.
Запустите скрипт, вернитесь через 15-60 минут и наслаждайтесь!
Геопаркетные версии пространственных таблиц, а также паркетные версии непространственных таблиц находятся в общедоступной корзине 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, лицензированного Австралийским Союзом в соответствии с Лицензионным соглашением с конечным пользователем открытого файла геокодированных национальных адресов (G-NAF).
Включено или разработано с использованием административных границ © Geoscape Australia, лицензировано Австралийским Союзом по международной лицензии Creative Commons Attribution 4.0 (CC BY 4.0).
GNAF и Admin Bdys были настроены так, чтобы устранить некоторые известные незначительные ограничения с данными. Наиболее примечательными являются:
Все адреса связаны с опубликованным в официальном бюллетене населенным пунктом, имеющим границу. Для того небольшого количества адресов, которых нет в необработанном GNAF, их locality_pid был изменен на опубликованный эквивалент.
К населенным пунктам добавлены адреса и количество улиц.
bdys пригородов и населенных пунктов были объединены в один непрерывный слой населенных пунктов: удалены сотни южно-австралийских сотен и добавлены районы ACT, где нет населенных пунктов, опубликованных в официальной печати.
Населенный пункт Мельбурн, штат Виктория, разделен на населенные пункты Мельбурн, 3000 и Мельбурн 3004 (новые PID населенных пунктов: loc9901d119afda_1
и loc9901d119afda_2
). Раскол происходит на реке Ярра (судя по почтовым индексам в адресах Мельбурна).
Слой границ почтовых индексов был создан с использованием почтовых индексов из адресных таблиц. Хотя это точно имитирует границы официального почтового индекса Geoscape, существует несколько сотен адресов с неправильным почтовым индексом. Не считайте эти данные авторитетными.