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

Ответить
glax2020
Активный участник
Сообщения: 167
Зарегистрирован: 19 ноя 2012, 15:59
Репутация: 6

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

Сообщение glax2020 » 24 окт 2016, 15:44

Всех приветствую.

У меня вопрос на понимания смысла отрицательных 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
Последний раз редактировалось glax2020 28 окт 2016, 10:54, всего редактировалось 1 раз.

Zverik
Активный участник
Сообщения: 146
Зарегистрирован: 11 сен 2011, 14:11
Статьи: 2
Репутация: 90
Откуда: Москва
Контактная информация:

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

Сообщение Zverik » 24 окт 2016, 16:24

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

glax2020
Активный участник
Сообщения: 167
Зарегистрирован: 19 ноя 2012, 15:59
Репутация: 6

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

Сообщение glax2020 » 24 окт 2016, 16:40

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

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

Спасибо.

glax2020
Активный участник
Сообщения: 167
Зарегистрирован: 19 ноя 2012, 15:59
Репутация: 6

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

Сообщение glax2020 » 24 окт 2016, 20:40

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")

glax2020
Активный участник
Сообщения: 167
Зарегистрирован: 19 ноя 2012, 15:59
Репутация: 6

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

Сообщение glax2020 » 24 окт 2016, 20:47

(delete)

glax2020
Активный участник
Сообщения: 167
Зарегистрирован: 19 ноя 2012, 15:59
Репутация: 6

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

Сообщение glax2020 » 24 окт 2016, 22:37

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

Zverik
Активный участник
Сообщения: 146
Зарегистрирован: 11 сен 2011, 14:11
Статьи: 2
Репутация: 90
Откуда: Москва
Контактная информация:

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

Сообщение Zverik » 25 окт 2016, 11:16

gis=> select count(1) from planet_osm_point where osm_id < 0;

count
-------
0

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

glax2020
Активный участник
Сообщения: 167
Зарегистрирован: 19 ноя 2012, 15:59
Репутация: 6

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

Сообщение glax2020 » 25 окт 2016, 13:18

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 (там у меня каких то библиотек не хватало).

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

glax2020
Активный участник
Сообщения: 167
Зарегистрирован: 19 ноя 2012, 15:59
Репутация: 6

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

Сообщение glax2020 » 25 окт 2016, 15:18

Установил: Распространяемый пакет Visual C++ для Visual Studio 2015

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

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

Ответить

Вернуться в «PostGIS/PostgreSQL»