Imposm — импортер данных OpenStreetMap. Он читает файлы PBF и импортирует данные в PostgreSQL/PostGIS. Он также может автоматически обновлять базу данных с учетом последних изменений OSM.
Он предназначен для создания баз данных, оптимизированных для рендеринга (т. е. создания тайлов или для сервисов WMS).
Imposm >=3 написан на Go и представляет собой полную переработку предыдущей реализации Python. Конфигурации/сопоставления и файлы кэша несовместимы с Imposm 2, но имеют схожую архитектуру.
Разработку Imposm спонсирует компания Omniscale.
Imposm находится в производственном использовании авторов. Он активно поддерживается с упором на устранение будущих несовместимостей с такими зависимостями, как PostGIS. Однако возможности для поддержки конечных пользователей отсутствуют, и никакие новые функции не будут разрабатываться за пределами существующего объема.
Высокая производительность
Поддержка различий
Пользовательские схемы баз данных
Обобщенная геометрия
Высокая производительность: Параллельно с нуля. Он распределяет синтаксический анализ и обработку по всем доступным ядрам ЦП.
Пользовательские схемы базы данных. Создает таблицы для разных типов данных. Это упрощает стилизацию и повышает производительность рендеринга в WMS или сервисах плиток.
Унификация значений. Например, все логические значения 1
, on
, true
и yes
становятся TRUE
.
Фильтрация по тегам и значениям: импортируйте только те данные, которые вы собираетесь визуализировать/использовать.
Эффективный кеш узлов: необходимо хранить все узлы для построения путей и отношений. Imposm использует файловую базу данных «ключ-значение» для кэширования этих данных.
Обобщенные таблицы: автоматически создаются таблицы с более низким пространственным разрешением, идеально подходящие для визуализации крупных дорожных сетей в низком разрешении.
Ограничить полигонами: Ограничьте импортируемую геометрию полигонами из GeoJSON для импорта городов/штатов/стран.
Простое развертывание: один двоичный файл, зависящий только во время выполнения от общих библиотек (GEOS и LevelDB).
Автоматические обновления OSM: включает фоновую службу ( imposm run
), которая автоматически загружает и импортирует последние изменения OSM.
Отношения маршрутов: импортируйте все типы отношений, включая маршруты.
Поддержка пространства имен таблиц (схема PostgreSQL)
Imposm полностью использует все доступные ядра процессора.
Imposm использует массовые вставки в PostgreSQL с помощью COPY FROM
Imposm использует эффективные промежуточные кэши для снижения нагрузки ввода-вывода при построении путей и отношений.
Импорт в режиме сравнения на сервер Hetzner AX102 (AMD Ryzen 9 7950X3D, 256 ГБ ОЗУ и хранилище NVMe) планетарного PBF объемом 78 ГБ (29 января 2024 г.) с обобщенными таблицами, пространственными индексами и т. д. занимает около 7:30 часов. Это для импорта, который готов к ежеминутным обновлениям. Режим без различий работает еще быстрее.
Рекомендуется, чтобы объем памяти сервера примерно в два раза превышал размер импортируемого фрагмента PBF. Например: у вас должно быть 192 ГБ ОЗУ или больше для текущего (2024 г.) файла планеты размером 78 ГБ, 8 ГБ для регионального извлечения размером 4 ГБ и т. д. Импорт с вращающихся дисков займет значительно больше времени и не рекомендуется.
Бинарные выпуски доступны на GitHub.
Эти сборки предназначены для 64-битной версии Linux x86 и не требуют дополнительных зависимостей. Загрузите, разархивируйте и запустите imposm
. Двоичные файлы совместимы с Debian 10 и другими дистрибутивами 2022 года или новее. Вы можете выполнить сборку из исходного кода, если вам нужна поддержка старых дистрибутивов.
Есть некоторые зависимости:
Вам нужен Го. Рекомендуется версия 1.17 или выше.
Другие зависимости — libleveldb и libgeos. Imposm тестировался с последними версиями этих библиотек, но вы можете добиться успеха и с более старыми версиями. Рекомендуется GEOS >=3.2, поскольку он стал намного более устойчивым при обработке недопустимой геометрии.
Самый быстрый способ установить Imposm — позвонить:
go install github.com/omniscale/imposm3/cmd/imposm@latest
Это позволит загрузить, скомпилировать и установить Imposm в ~/go/bin/imposm
. Вы можете изменить местоположение, установив среду GOBIN
.
Рекомендуемый способ установки:
git clone https://github.com/omniscale/imposm3.git cd imposm3 make build
make build
встроит Imposm в ваш локальный путь и добавит информацию о версии в ваш двоичный файл.
Вы также можете напрямую использовать go для сборки или установки imposm с помощью go build ./cmd/imposm
. Однако это не приведет к установке информации о версии.
Go компилируется в статические двоичные файлы, поэтому Imposm не имеет никаких зависимостей от Go во время выполнения. Просто скопируйте двоичный файл imposm
на свой сервер для развертывания. Однако перечисленные выше библиотеки C/C++ по-прежнему необходимы.
См. также packaging.sh
для получения инструкций по сборке бинарных пакетов для Linux.
Для повышения производительности следует использовать LevelDB > 1.21. Вы по-прежнему можете выполнять сборку с поддержкой версии 1.21 с помощью go build -tags="ldbpre121"
или LEVELDB_PRE_121=1 make build
.
imposm
имеет несколько подкоманд. Используйте imposm import
для базового импорта.
Для простого импорта:
imposm import -connection postgis://user:password@host/database -mapping mapping.json -read /path/to/osm.pbf -write
Вам нужен файл JSON с сопоставлением целевой базы данных. См. example-mapping.json
чтобы получить представление о возможностях сопоставления.
Imposm создает все новые таблицы внутри схемы таблицы import
. Итак, у вас будет import.osm_roads
и т. д. Вы можете изменить таблицы на public
схему:
imposm import -connection postgis://user:passwd@host/database -mapping mapping.json -deployproduction
Вы можете записать некоторые параметры в файл конфигурации JSON:
{ "cachedir": "/var/local/imposm", "mapping": "mapping.json", "connection": "postgis://user:password@localhost:port/database" }
Чтобы использовать эту конфигурацию:
imposm import -config config.json [args...]
Дополнительные параметры см.:
imposm import -help
Примечание. Поддержка TLS/SSL отключена по умолчанию из-за отсутствия поддержки повторного согласования в реализации TLS Go. Вы можете повторно включить шифрование, установив для переменной среды PGSSLMODE
или для параметра подключения sslmode
значение require
verify-full
, например: -connect postgis://host/dbname?sslmode=require
. Вам нужно будет отключить поддержку повторного согласования на вашем сервере, чтобы предотвратить ошибки подключения при более крупном импорте. Вы можете сделать это, установив для ssl_renegotiation_limit
значение 0 в конфигурации вашего сервера PostgreSQL.
Последнюю версию документации можно найти здесь: http://imposm.org/docs/imposm3/latest/.
В группах Google есть список рассылки для всех вопросов. Вы можете подписаться, отправив электронное письмо по адресу: [email protected]
Для получения коммерческой поддержки обращайтесь в Omniscale.
Исходный код доступен по адресу: https://github.com/omniscale/imposm3/.
Вы можете сообщить о любых проблемах по адресу: https://github.com/omniscale/imposm3/issues.
Imposm выпускается с открытым исходным кодом по лицензии Apache 2.0. См. ЛИЦЕНЗИЯ.
Все зависимости, включенные в исходный код, выпускаются под лицензией BSD. См. LICENSE.dep.
Все зависимости, включенные в бинарные выпуски, выпускаются под лицензией BSD, за исключением пакета GEOS. Пакет GEOS выпущен как LGPL3 и подключается динамически. См. LICENSE.bin.
Чтобы запустить все модульные тесты:
make test-unit
Существуют системные тесты, которые импортируют и обновляют данные OSM и проверяют содержимое базы данных. Вам понадобится osmosis
для создания тестовых файлов PBF. Существует Makefile, который при необходимости создает все тестовые файлы, а затем запускает сам тест.
make test
Вызовите make test-system
чтобы пропустить модульные тесты.
ВНИМАНИЕ: он использует вашу локальную базу данных PostgreSQL (схемы imposm_test_import
, imposm_test_production
и imposm_test_backup
). Измените базу данных с помощью стандартных переменных среды PGDATABASE
, PGHOST
и т. д.