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

Отрицательные OSM_ID и OpenStreetMap RELATION?

Добавлено: 24 окт 2016, 15:44
glax2020
Всех приветствую.

У меня вопрос на понимания смысла отрицательных OSM_ID.
Zverik писал(а):Вы уже почти сами со всем разобрались. Положительные osm_id — это линии, отрицательные — это отношения (с противоположным знаком). Мультиполигоны разбиты на несколько полигонов с одинаковыми osm_id, их может понадобиться склеить (ST_Collect / ST_Union).

...

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

Таблицы _nodes, _ways и другие нужны для настройки регулярных обновлений, для простой работы они ни к чему.

...
Но как тогда осмыслить следующее?

Обнаружил следующую непотную ситуацию: Скачал в инете некий OSM Сингапура.

И мы имеем:

SELECT * from planet_osm_point where osm_id = -2037352375

выборка есть

SELECT id, lat, lon, tags FROM planet_osm_nodes where id=-2037352375

выборка есть

SELECT * FROM planet_osm_rels where id=2037352375

выборки нет

SELECT * FROM planet_osm_rels where id=-2037352375

выборки нет (тоже с отрицательным знаком)

https://www.openstreetmap.org/node/2037352375

ссылка работает

https://www.openstreetmap.org/node/-2037352375

ссылка не работает (тоже с отрицательным знаком)


https://www.openstreetmap.org/relation/2037352375

ссылка не работает

https://www.openstreetmap.org/relation/-2037352375

ссылка не работает (тоже с отрицательным знаком)

Какие от из этого примера можно сделать выводы?

Здесь я не разобрался.

Отрицательный OSM_ID у node оказывается есть NODE ID - но уже положительный:

1) Как отличить отрицательные OSM_ID (planet_osm_point, planet_osm_line, planet_osm_polygon) когда они реально значат соответствующие NODE ID и WAY ID, а не RELATION ID?

2) И если это NODE ID, то почему в planet_osm_point для него отрицательное OSM ID?

С ув. Александр


Материал перенесен из соседней темы:
viewtopic.php?f=32&t=21618

Re: Отрицательные OSM_ID и OpenStreetMap RELATION?

Добавлено: 24 окт 2016, 16:24
Zverik
В моей базе данных отрицательных id у точек нет. Разработчики osm2pgsql не знают. Вероятно, ты использовал 32-битный osm2pgsql, а номера точек давно перевалили за 4,2 миллиарда.

Re: Отрицательные OSM_ID и OpenStreetMap RELATION?

Добавлено: 24 окт 2016, 16:40
glax2020
Zverik писал(а):В моей базе данных отрицательных id у точек нет. Разработчики osm2pgsql не знают. Вероятно, ты использовал 32-битный osm2pgsql, а номера точек давно перевалили за 4,2 миллиарда.
да это так, использовал 32 битный osm2pgsql.

перезагружу с помощью 64 - osm2pgsql, вероятно в этом было дело.

Спасибо.

Re: Отрицательные OSM_ID и OpenStreetMap RELATION?

Добавлено: 24 окт 2016, 20:40
glax2020
Zverik писал(а):В моей базе данных отрицательных id у точек нет. Разработчики osm2pgsql не знают. Вероятно, ты использовал 32-битный osm2pgsql, а номера точек давно перевалили за 4,2 миллиарда.
Идею проверил, но мне кажется: не удачно.

Перегрузил как:

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

set OSM2PGSQL_PATH=C:\gdal\osm2pgsql\x64
set Path=%OSM2PGSQL_PATH%;%Path%
"%OSM2PGSQL_PATH%\osm2pgsql.exe" -H localhost -P 5435 -d pbf_singapore_new -U postgres -S "%OSM2PGSQL_PATH%\default.style" -C 512 --slim --hstore --cache-strategy sparse  "c:\temp\osm_root\dat___singapore_new.osm.pbf"
Мне не удалось использовать предложенный Вами osm2pgsql bit-64 https://ci.appveyor.com/project/openstr ... /artifacts -- он просто не запустился в Институте (64 Windows 7) -- каких то библиотек не хватает (дома у меня работал), но мне кажется это не важным, так как я использовал osm2pgsql bit-64 из http://gis.stackexchange.com/questions/ ... -osm2pgsql.

В результате, как было так и осталось:

SELECT * from planet_osm_point where osm_id = -2037352375

Выбор как был так и есть - а это согласно нашей логике, как бы не должно случиться

SELECT * from planet_osm_point where osm_id = 2037352375

А здесь выбора нет, а именно здесь мы его и ожидаем, так как объект это "нормальный" Node, c "нормальным - положительным" OpenStreetMap ID = 2037352375,

а почему получился в planet_osm_point при загрузке отрицательный OSM_ID непонятно ? ....

---

проверку делаю аккуратно для вновь загруженной "pbf_singapore_new" (предыдущая версия хранится как "pbf_singapore")

Re: Отрицательные OSM_ID и OpenStreetMap RELATION?

Добавлено: 24 окт 2016, 20:47
glax2020
(delete)

Re: Отрицательные OSM_ID и OpenStreetMap RELATION?

Добавлено: 24 окт 2016, 22:37
glax2020
Zverik писал(а):Zverik писал(а):
Положительные osm_id — это линии, отрицательные — это отношения (с противоположным знаком). Мультиполигоны разбиты на несколько полигонов с одинаковыми osm_id, их может понадобиться склеить (ST_Collect / ST_Union).
Кажется логика понятна:

1) У planet_osm_point может быть или положительное или отрицательное OSM ID, в любом случае ссылка есть на Node и она в любом случае положительная, ссылок на Relation по OSM_ID у planet_osm_point - нет.

2 - 3) для planet_osm_line и planet_osm_polygon работает Ваше правило: "Положительные osm_id — это линии, отрицательные — это отношения (с противоположным знаком)."

Я взял Ульяновскую область:

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

select count(*) from planet_osm_point, planet_osm_nodes where 
      (planet_osm_point.osm_id < 0) and (planet_osm_nodes.id = planet_osm_point.osm_id);

27344

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

select count(*) from planet_osm_point, planet_osm_nodes where 
      (planet_osm_point.osm_id > 0) and (planet_osm_nodes.id = planet_osm_point.osm_id);
8687

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

select count(*) from planet_osm_point, planet_osm_rels where 
      planet_osm_rels.id = planet_osm_point.osm_id;
0

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

select count(*) from planet_osm_line, planet_osm_ways where 
      (planet_osm_line.osm_id < 0) and (planet_osm_ways.id = planet_osm_line.osm_id);
0

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

select count(*) from planet_osm_polygon, planet_osm_ways where 
      (planet_osm_polygon.osm_id < 0) and (planet_osm_ways.id = planet_osm_polygon.osm_id);
0

Re: Отрицательные OSM_ID и OpenStreetMap RELATION?

Добавлено: 25 окт 2016, 11:16
Zverik
gis=> select count(1) from planet_osm_point where osm_id < 0;

count
-------
0

У меня загружена и ежеминутно обновляется западная часть РФ и кусок Финляндии, дамп в pbf 660 мегабайт. Я всё ещё думаю, что проблема в сборке osm2pgsql.

Re: Отрицательные OSM_ID и OpenStreetMap RELATION?

Добавлено: 25 окт 2016, 13:18
glax2020
Zverik писал(а):gis=> select count(1) from planet_osm_point where osm_id < 0;

count
-------
0

У меня загружена и ежеминутно обновляется западная часть РФ и кусок Финляндии, дамп в pbf 660 мегабайт. Я всё ещё думаю, что проблема в сборке osm2pgsql.
Вы совершенно правы.

Загрузил с помощью Вашего osm2pgsql (та же Ульяновская область - сегодняшняя версия):

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

select count(*) from planet_osm_point, planet_osm_nodes where 
      (planet_osm_point.osm_id > 0) and (planet_osm_nodes.id = planet_osm_point.osm_id);
36021

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

select count(*) from planet_osm_point where 
      (planet_osm_point.osm_id < 0);
0

---

Сейчас займусь настройкой Вашей версии osm2pgsql, чтобы она работала на 64 Windows 7 (там у меня каких то библиотек не хватало).

Большое спасибо!

Re: Отрицательные OSM_ID и OpenStreetMap RELATION?

Добавлено: 25 окт 2016, 15:18
glax2020
Установил: Распространяемый пакет Visual C++ для Visual Studio 2015

https://www.microsoft.com/ru-ru/downloa ... x?id=48145

Программа заработала на Windows 7. Все замечательно.