Osm to postgresql windows

Installation

Osm2pgsql works on Linux, Windows, macOS, and other systems. We recommend you always use the latest released version, currently 1.4.1.

Installing on Linux

There are packages of osm2pgsql available for many different Linux distributions. Some of them are quite old, though, and have known bugs. If the current release is not available for your distribution, consider installing the current release from source.

Installing on Ubuntu

For Ubuntu installation is usually as simple as

Installing on Debian

For Debian installation is usually as simple as

If you are using Debian Stable, we recommend using the packages from backports. Debian maintainers are really good at keeping these up-to-date.

Installing on Fedora

Fedora has packages of osm2pgsql available. Install with

Installing on openSUSE

First add the “Geo” package repository (adapt URL to the openSUSE version you use):

Then install osm2pgsql:

Installing on Arch Linux

Build the osm2pgsql-git package from the AUR. (Download the tarball and compile/install with makepkg , or use an AUR helper such as yaourt .)

Installing from Source / Git

If you can’t use the packaged version of osm2pgsql for your distribution, you can always install from source.

  • To install the latest release, download the latest release as tar.gz or zip file and unpack it.
  • To install a version from git, get it with git clone https://github.com/openstreetmap/osm2pgsql .

See the Building section in the README.md for a list of dependencies and build instructions.

Installing on Windows

Using prebuild binaries

You can download prebuild binaries. Unpack the ZIP file and you can immediately use osm2pgsql.

Compiling from source

For native Windows compilation you need a C++11-compatible compiler. Visual Studio 2017 & 2015 are known to work. Follow the usual steps for compiling CMake projects.

Installing on macOS

Osm2pgsql is available on Homebrew. Install with

Installing on FreeBSD

Osm2pgsql is available in FreeBSD Ports. Install with:

Upgrading an Existing Installation

Usually you can upgrade an existing installation of osm2pgsql to a new version without worries. But sometimes the database format or something like it changes and you have to re-import the OSM data, create a new index or so. Please read the release information carefully. There is also an appendix in the manual with upgrading information.

Last change: 14 January 2021 | Imprint/Contact

Установка и настройка генерации тайлов на основе OSM данных под Windows

Дисклеймер

Недавно по работе возникла задача генерации тайлов на основе OSM данных. Поискал, прочитал несколько статей, но везде фигурировали *nix-системы, а у меня был в наличии сервер под управлением Windows. В конце-концов, более-менее внятный туториал нашёлся, но он слегка устарел и не везде подробен, посему пришлось повозиться. После удачного завершения подумал, что мой опыт будет полезен.

Кого заинтересовал, прошу под кат.

Вводные

1. Установка и настройка PostgreSQL

Дистрибутив можно взять с офсайта. Установка достаточно тривиальна, однако, есть пара моментов.

Во-первых, возможно, следует изменить директорию, где хранится БД (может потребоваться до терабайта, в случае использования OSM данных для всей планеты). По умолчанию (для версии 9.4) это C:\Program Files\PostgreSQL\9.4\data

Во-вторых, возможно, следует изменить локаль кластера. В моём случае на Russian, Russia . При установке у вас также спросят пароль для сервера PostgreSQL, он ещё понадобится, запомните его.

После установки самого PostgreSQL, запустится StackBuilder, мастер установки расширений для БД. Нужно выбрать два расширения: Spatial Extensions -> PostGIS и Database Drivers -> JDBC. Все настройки при установке по-умолчанию. В процессе установки PostGIS будет запрос на создание системной переменной и ещё пара вопросов, соглашайтесь. После этого нужно перезапустить службу PostgreSQL.

Читайте также:  Установка python windows path

Далее добавьте bin директорию PostgreSQL в PATH . После добавления нужно выйти из системы и войти заново (logoff-login), чтобы настройки применились.

Проверяем корректность установки, понадобится вспомнить пароль, который вы вводили на этапе установки. Находим в программах pgAdmin III и запускаем. В списке серверов будет единственный localhost:5432 , подключаемся. Если не удаётся, скорее всего, служба не запущена.

Создаём шаблон для базы геоданных:

Добавляем два расширения в шаблон: postgis и postgis_topology . Отключаемся от этой базы.

Создаём базу данных gis на основе шаблона template_postgis_20 :

Берём патч для PostGIS GiST отсюда. Патчим из командной строки:

База данных готова.

2. Установка и настройка Osm2pgsql

Можно взять последний релиз с гитхаба и собрать самому, а можно взять готовый артефакт отсюда.

Скачиваем, распаковываем, переименовываем для удобства в osm2pgsql . Добавляем эту директорию в переменную PATH . Logoff-login. Проверяем, что всё работает:

Должна вывестись справка. Берём последний default.style из репозитория на гитхабе.

Всё готово для импорта OSM данных.

Карта планеты в сжатом виде весит

40 Гб. Для примера можно взять карту Москвы, например, отсюда. Скачиваем.

Для импорта выполняем в командной строке:

Параметр -s , т.е. slim — режим, при котором временные данные хранятся в БД. Это замедляет процесс, увеличивает использование диска, но уменьшает использование оперативной памяти.

Если всё правильно, будет запрос пароля и начнётся импорт дампа в БД. В первых строчках будут всякие предупреждения, не пугайтесь, всё в порядке. После завершения импорта будет выведено что-то вроде:

Геоданные в базе.

3. Установка Python’а 2.x

Скачиваем дистрибутив x86 (потому что бинарники Mapnik для Windows есть только x86) отсюда. Ставим, настройки по-умолчанию, кроме одного: стоит отметить «Добавить python.exe в PATH», или сделать это ручками после установки. Logoff-login.

Проверяем правильность установки:

4. Установка и настройка Mapnik’а

Опять-таки есть два варианта: или собирать самому из исходников с гитхаба, или взять готовые бинарники здесь. Ищем Windows 32 bit Package , скачиваем, распаковываем в C:\mapnik-v2.2.0 .

У них есть довольно подробный мануал по установке в вики. Вкратце: добавить lib и bin директории мапника в PATH , это раз. Создать новую системную переменную PYTHONPATH и присвоить ей путь до C:\mapnik-v2.2.0\python\2.7\site-packages , это два. Поставить этот vcredist, это три. Logoff-login.

Проверяем правильность установки:
Возможные ошибки разобраны в вики. Но помимио этого стоит попробовать перенести пути до lib и bin в начало PATH .

И генерим тестовые тайлы:

Идём на гитхаб, находим библиотеку PROJ.4, находим бинарники: Prebuilt Win32 executables, DLL including NAD27 grid shift files . Скачиваем, распаковываем ( c:\proj ). В PATH добавляем путь до bin , в новую переменную PROJ_LIB путь до nad . Logoff-login.

Скачиваем скрипты для генерации тайлов из официального svn-репозитория, кладём в c:\mapnik .

Далее, для работы скрипта нужны береговые линии и всякое такое. Для этого есть скрипт get-coastlines.sh , однако он написан на баше и под Windows работать не будет. Но он довольно простой и короткий, поэтому просто повторим все действия ручками.

Скачиваем:

  • Раз
  • Два
  • Три
  • Четыре
  • Пять

Распаковываем все архивы в директорию в c:\mapnik\world_boundaries .

Последние приготовления. Идём в mapnik\inc , файл settings.xml.inc.template переименовываем в settings.xml.inc .

Файл fontset-settings.xml.inc.template в fontset-settings.xml.inc .

Файл datasource-settings.xml.inc.template в datasource-settings.xml.inc и правим его:

Немного поправим скрипт generate_tiles.py :
Блок на строке 193:
заменяем на

Указываем границы в которых будет производиться генерация тайлов (географические координаты прямоугольника):

На строке 213 перед
пишем (в нашем случае Москвы)

Указываем пути и запускаем генерацию тайлов:

Процесс должен пойти.
Займёт от нескольких минут до недель (в случае всего мира и не самой мощной машины).

Форумы GIS-Lab.info

Геоинформационные системы (ГИС) и Дистанционное зондирование Земли

Догрузка карт osm в одну базу Postgresql

Догрузка карт osm в одну базу Postgresql

Сообщение Михаил Ильин » 05 окт 2012, 13:58

Добрый день!
Не подскажете как загрузить карту России и Казахстана в одну базу PostgreSQL\PostGIS:
Загрузил карту России из файла RU.osm.pbf, затем в эту же базу хочу подгрузить карту Казахстана:
osm2pgsql/osm2pgsql —slim -a —exclude-invalid-polygon —host localhost —port 5432 -d menfismap -r pbf -C 3000M -S osm2pgsql/default.style KZ.osm.pbf

failed: ERROR: duplicate key value violates unique constraint «planet_osm_nodes_pkey»
DETAIL: Key (id)=(36725955) already exists.
CONTEXT: COPY planet_osm_nodes, line 2228: «36725955 532316674 528392196 \N»

Читайте также:  Работа с windows core

osm2pgsql SVN version 0.81.0 (64bit id space)

Re: Догрузка карт osm в одну базу Postgresql

Сообщение Aleksandr Dezhin » 05 окт 2012, 14:26

Re: Догрузка карт osm в одну базу Postgresql

Сообщение Михаил Ильин » 07 окт 2012, 13:36

Re: Догрузка карт osm в одну базу Postgresql

Сообщение denny123 » 18 фев 2013, 08:55

osm2pgsql -m -s -W -d geoserver rayony_centry.osm
.
Reading in file: rayony_centry.osm
Processing: Node(50k) Way(0k) Relation(0)insert_node failed: ERROR: duplicate key value violates unique constraint «planet_osm_nodes_pkey»
(7)
Arguments were: 2147483647, 787135879, 319991308, (null),
Error occurred, cleaning up

Файл содержит 26 отношений(районы области) и все. База пустая(без таблиц planet_. ).

Re: Догрузка карт osm в одну базу Postgresql

Сообщение Alex_SHA » 11 июн 2013, 15:24

У меня подобная проблема. не знаю как решить.

C:\Program Files\HOTOSM\bin>osm2pgsql RU-PER.osm.bz2 -H localhost -d osm -p osm
-U postgres -P 5432 -W -S default.style -C 512 -s -l
osm2pgsql SVN version 0.69-21289M

Using projection SRS 4326 (Latlong)
Setting up table: osm_point
Setting up table: osm_line
Setting up table: osm_polygon
Setting up table: osm_roads
Mid: pgsql, scale=10000000, cache=512MB, maxblocks=65537*8192
Setting up table: osm_nodes
*** WARNING: intarray contrib module not installed
*** The resulting database will not be usable for applying diffs.
Setting up table: osm_ways
Setting up table: osm_rels

!! You are running this on 32bit system, so at most
!! 3GB of RAM can be used. If you encounter unexpected
!! exceptions during import, you should try running in slim
!! mode using parameter -s.

Reading in file: RU-PER.osm.bz2
Processing: Node(3750k) Way(85k) Relation(0k)COPY_END for COPY osm_nodes FROM ST
DIN;
failed: ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности
«osm_nodes_pkey»
DETAIL: Ключ «(id)=(2147483647)» уже существует.
CONTEXT: COPY osm_nodes, строка 3599746: «2147483647 583142904 56835881
2 \N»

Error occurred, cleaning up

Re: Догрузка карт osm в одну базу Postgresql

Сообщение Alex_SHA » 13 июн 2013, 16:35

У меня был не последний osm2pgsql, последняя сборка HOTOSM трехлетней давности. Этот баг пофиксен в новых версиях.

Импорт OpenStreetMap. От бинарного исходника к таблице в БД в несколько шагов

Обычно, когда кто-то говорит про OSM, то в голове всплывает какой-нибудь из веб-сервисов, или приложение вроде Maps.me, основанные на данных OSM. На самом деле проект OSM — это в первую очередь данные, всё остальное по сути частные случаи их использования. Сервисы предоставляют обычно только часть информации, отрисованной по своим правилам.

Исходно OSM — это набор точек, связей между точками, и тегов к ним. Исходники сообщества имеют два формата. Первоначально XML использовался как приоритетный способ распространения данных, но, файл Planet.osm в несжатом виде уже перевалил за терабайт, и я не вижу смысла использования его для относительно объёмной информации. PBF имеет большое преимущество — он бинарный и файл всей земли имеет размер около 50Гб (сжатый XML порядка 80 Гб).

Речь пойдет об импорте данных OSM из «родного» формата с помощью инструмента Osmosis.

Также нам понадобится PostgreSql с расширением Postgis, в который мы и будем импортировать OSM данные.

Как результат — возможность получения в своей БД информации по объектам с перечисленными здесь тегами.

Подготовка БД.

Вначале создаем БД в Postgresql, название особого значения не имеет.

Далее добавим необходимые для дальнейшей работы расширения.

Расширение Postgis «подключает» к БД собственно модуль по работе с геоданными (напомню, необходимо установить сам Postgis). Расширение hstore предназначено для работы с наборами ключ/значение, т.к. много информации будет содержаться в OSM-тегах.

Скачиваем Osmosis. Вкратце, это ПО для самых разнообразных операций с OSM данными. Имеется неплохая документация по работе с командной строкой. Исходники на Java. Ниже мы будем использовать командную строку. Я также использовал Osmosis как Java библиотеку, исходный код (есть на GitHub) мне показался достаточно понятным, а API несложное в использовании.

Теперь готовим базу данных для импорта. Необходимые таблицы и функции можно создать с помощью скриптов, которые находятся в папке osmosis/script. Помимо основного скрипта, выполним SQL код, который создаст поле для хранения геометрии линий. Это связано с тем, что OSM данные скорее представлены как связи точек, чем как набор геометрических фигур.

Импорт OSM данных в БД

Ну и теперь почти всё готово. Даже можно запускать импорт. Нужно решить, что будем брать в качестве исходника. А именно нужно выбрать формат и источник. Первоначально OSM сообщество использовало (и использует) XML формат. Но, объем данных растет и растет, так что текстовый формат постепенно вытесняется. Использовать PBF несколько удобней. Центральный источник planet.openstreetmap.org содержит данные по всему земному шару. Одним файлом можно скачать всю базу знаний проекта, которая уже перевалила за 40 гигабайт в бинарном виде. В тех случаях, когда я хотел оттуда вырезать кусок данных, то, как правило, оставлял ноутбук работать всю ночь, обеспечивая его более чем 100Гб свободного места на SSD для временных файлов.

Читайте также:  Cxarchive как открыть windows

В нашем случае мы можем начать с использования выгрузок от участников сообщества. Есть ресурсы, которые дают возможность загрузить данные только по определенному региону. Например, download.geofabrik.de. Возьмем Воронежскую область. Там она включена в файл, содержащий данные по всему центральному федеральному округу. Можно загрузить central-fed-district-latest.osm.pbf, а нужный «кусок» потом вырезать в отдельный файл или фильтровать по координатам при импорте в БД. Я бы предложил первый вариант:

Тут всё просто. Читаем PBF файл, результаты чтения фильтруем по прямоугольнику координат, и результаты после фильтрации записываем в выходной файл. Фильтровать по координатам можно более точно, используя не прямоугольник, а полигон, координаты которого находятся в отдельном файле.

Полученный файл voronezh.osm.pbf далее импортируем в БД. Для подключения создаем properties файл с параметрами доступа к базе данных:

Ну и сам импорт:

Импортированные данные

Теперь можно уже начать изучение того, что у нас есть в БД. Первая мысль о том, что там набор фигур, однако это не совсем так. Как я уже говорил, основной элемент – точка. Всё остальное создается путем создания связей (отношений) между точками. Углубляться пока не будем, тем более что руки уже чешутся создать свою «плоскую» таблицу с какими-нибудь данными. Что ж, для линий и точек уже всё готово, нужно только создать таблицу с необходимыми полями, и вставить туда нужные записи. А какие поля у нас есть? Тут в помощь вики. Для примера, возьмем пару ключ/значение power=line. Выберем список полей, которые будем использовать, например: name, voltage, operator, cables. Получается, мы хотим выбрать линии, которые обязательно имеют свойство power=line, вместе с полями name, voltage, operator, cables. Создаем таблицу:

И сам запрос для заполнения нашей новой таблицы:

Готово, имеем таблицу с линиями электропередач, где у некоторых линий даже заполнена часть полей! Ну что ж, таблица это конечно интересно, но визуализировать данные для просмотра геометрии тоже бы неплохо. Быстрей всего сделать это с помощью QGIS, не считая того что эту мощную ГИС сначала надо установить. Там мы уже добавляем Postgis слой, в качестве подложки используем любую карту (можно использовать OpenLayers плагин). Настроили, смотрим:

Ура! Даже весьма похоже на правду, подумал я, смотря в окно на ЛЭП.

С точками ситуация практически та же самая, разве что надо использовать таблицу nodes. КДПВ как раз содержит данные по подстанциям. А как быть с полигонами? Полигоны состоят также из линий (замкнутых). Вроде бы можно просто замкнуть линии и наслаждаться результатом, но так не получится. Есть множество подводных камней. Полигоны могут состоять из нескольких замкнутых линий.

Например, на озере может находиться остров. Поэтому получим «дырку» в полигоне. Еще пришлось узнать о значении слова «эксклав» (к моему стыду, знал только про «анклав»). Также полигоны группируются. Например, лес может состоять из нескольких «кусков». Который мы должны представлять как один объект. В довершении всего мы должны отсекать незамкнутые полигоны, если часть данных вышла за пределы карты. Эти, и еще некоторые другие проблемы я решил в SQL скрипте, который благополучно отложил на полку после того как он заработал. На GitHub был найден проект osmosis-multypolygon. Скрепя сердце, я решил что использование данного решения более лучший вариант, нежели мой набор скриптов, написанный на коленке за пару дней. Делаем так, как сказано в README, а именно выполняем список скриптов, и у нас появляется таблица multipolygons, которая заполняется инструкцией из assemble.sql. После того как мы заполнили таблицу с полигонами, можно придумать что мы хотим получить. Давайте выберем территории парков?

Cмотрим в вики, и пишем скрипт:

Ну, скажу честно, тут уже об актуальности данных можно поспорить. Но это уже тема для отдельного разговора.

Оцените статью