Страница 1 из 1

Догрузка карт 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"

osm2pgsql SVN version 0.81.0 (64bit id space)

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

Добавлено: 05 окт 2012, 14:26
Aleksandr Dezhin
Нужно предварительно объединить дампы при помощи osmosis:

Код: Выделить всё

$ osmosis/bin/osmosis --read-pbf RU.osm.pbf --read-pbf KZ.osm.pbf --merge --write-pbf local.osm.pbf
И только после этого загружать

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

Добавлено: 07 окт 2012, 13:36
Михаил Ильин
Спасибо! Все получилось.

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

Добавлено: 18 фев 2013, 08:55
denny123
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

Добавлено: 11 июн 2013, 15:24
Alex_SHA
У меня подобная проблема... не знаю как решить.

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

C:\Program Files\HOTOSM\bin>


Помогите пожалуйста

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

Добавлено: 13 июн 2013, 16:35
Alex_SHA
У меня был не последний osm2pgsql, последняя сборка HOTOSM трехлетней давности. Этот баг пофиксен в новых версиях.

Правильная строка для конвертации:
C:\Program Files\HOTOSM\bin>osm2pgsql moscow.osm -H localhost -d osm -U postgres -P 5432 -W -S default.style -C 512 --hstore --cache-strategy sparse

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

Добавлено: 06 июл 2013, 11:37
snaker
Та же самая ошибка. И возможности объединять файлы перед загрузкой нет :(
Версия osm2pgsql — osm2pgsql SVN version 0.83.0 (64bit id space), собирал из https://github.com/openstreetmap/osm2pgsql
Загружаю карту Москвы, потом пытаюсь подгрузить область (с ключом -а).
Вываливается на

Код: Выделить всё

failed: ERROR:  duplicate key value violates unique constraint "planet_osm_nodes_pkey"
Чего делать-то?

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

Добавлено: 20 фев 2017, 13:52
Recky
Используйте Osmconvert

Для загрузки нового региона без ошибок дубликатов есть 2 варианта:

1) Объединить новые регионы со старыми (уже загруженными) в один pbf файл:

Код: Выделить всё

osmconvert new_region.pbf --out-o5m | osmconvert.exe - already_loaded_map.pbf -o=map_with_new_region.pbf
затем загрузить новый объединенный файл в базу:

Код: Выделить всё

osm2pgsql --create ... map_with_new_region.pbf
Однако этот способ перезаписывает все данные в базе и может занять длительное время.

2) И второй способ: вычесть из нового файла региона данные уже содержащиеся в базе:

Код: Выделить всё

osmconvert new_region.pbf -o=new_region.o5m
osmconvert already_loaded_map.pbf -o=already_loaded_map.o5m
osmconvert new_region.o5m --subtract already_loaded_map.o5m -o=new_region_cleaned.o5m
osmconvert new_region_cleaned.o5m -o=new_region_cleaned.pbf
Затем загрузить очищенный файл в базу PostgreSQL используя:

Код: Выделить всё

osm2pgsql --append ...  new_region_cleaned.pbf
без ошибок дубликатов.

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

Добавлено: 20 фев 2017, 15:01
freeExec
Recky писал(а):Используйте Osmconvert
1) Объединить новые регионы со старыми (уже загруженными) в один pbf файл:

Код: Выделить всё

osmconvert new_region.pbf --out-o5m | osmconvert.exe - already_loaded_map.pbf -o=map_with_new_region.pbf
Какой-то извращённый вариант, так же вот наглядней:

Код: Выделить всё

osmconvert already_loaded_map.pbf new_region.pbf -o=map_with_new_region.pbf
Если же преследуется цель частых обновлений, то куда логичней загружать их в базу с опцией --slim, тогда в базе остаются сырые данные OSM и база сама разберётся где новое, где старое.