imposm3

imposm3 (инструмент импорта OSM->PostgreSQL+PostGIS) на нашем форуме незаслуженно обойден вниманием.

Вторая версия imposm была написана на Python и не позволяла делать апдейты базы, что сразу ограничивало область применения.

imposm3 переписан на Go. Декларируется возможность обновления базы (сам я не проверял).

Чем интересна программа:

  1. Скорость импорта значительно выше чем у osm2pgsql.
  2. Импорт diff несоизмеримо быстрее, чем у osm2pgsql.

Это стало возможным благодаря тому, что сырые точки, линии и отношения хранятся на диске во встроенной базе данных LevelDB, а объекты вставляются в БД группами (bulk insert).

  1. Настраиваемое количество таблиц.
  2. Автоматическая генерализация в отдельные таблицы, идеально для рендеринга.
  3. Продуманные таблицы relation для рендеринга маршрутов, associatedStreet, границ и т.д. Теги на геометрию можно брать как с линий, так и с отношений.
  4. Импорт происходит в схему import. После того как вы убедитесь, что всё прошло гладко - новые таблицы запускаются в схему public (т.е. в production) одной транзакцией. Т.е. базу можно переимпортировать в онлайне.

Оверхед из-за дублирования некоторых геометрий с лихвой компенсируется компактными таблицами, которые хранят исключительно те теги, которые для них настроены, и быстрой выборкой. Опциональный hstore.

Немногочисленные дискуссии imposm vs osm2pgsql можно свести к краткому итогу:

  • osm2pgsql это довольно низкоуровневый импорт, он универсальнее и лучше подходит для общего анализа данных ОСМ. Традиции - наше всё.
  • imposm/imposm3 заточен под рендеры и ГИС.

Исходники
https://github.com/omniscale/imposm3

Документация (не поленитесь почитать, там всего несколько страниц)
https://imposm.org/docs/imposm3/latest/mapping.html

ИМО конфигурировать удобнее в YML, хотя изначальная поддержка JSON тоже осталась.

Форк для Windows x64 (конфигурацию брать в исходниках, ключи запуска в документации)
https://github.com/gaspardle/imposm3/releases

По моим тестам размер базы + закешированных данных для будущего обновления примерно в 2-3 раза меньше osm2pgsql с настройкми по-умолчанию, что актуально при использовании дисков SSD. Это при том что во время импорта создаются дополнительные генерализованные таблицы. Думаю основная разница набегает именно из-за хранения сырых данных в базе LevelDB, а не PostgreSQL. Более точное соотношение возможно определить только сделав полностью идентичные конфигурации.

(added)
нашел записи, в среднем место на диске

  • osm2pgsql = размер pbf x29.5
  • imposm3 = размер pbf x 9.8

А удалось что-то импортнуть, а то у меня в своё время что-то не вышло.

Да, линуксовая версия импортирует нормально.
Порт под виндовс нашел пару дней назад - запустил в консоли, посмотрел опции, с реальными данными не испытывал.

Отличный инструмент, сам его использую. Так же он используется в https://openmaptiles.org/, они его форкнули, чтобы добавить таймстемпы в объекты для ререндеринга векторных тайлов, но вроде как эта опция уже вошла и в основной проект.