Являются ли идентификаторы OSM уникальными для всех типов объектов?

13

Являются ли идентификаторы OSM уникальными для всех типов объектов?

Имеется в виду, может ли идентификатор пути встречаться как идентификатор отношения или идентификатор узла как идентификатор пути?

wutzebaer
источник

Ответы:

16

Osm_id уникален только внутри типа объекта. Это легко проверить с помощью следующих ссылок

http://www.openstreetmap.org/way/40000000

http://www.openstreetmap.org/node/40000000

Текущая статистика OSM показывает эти цифры:

Number of nodes     2412050198
Number of ways      241029453
Number of relations 2658037

Все старые узлы уже удалены, и, как правило, новые идентификаторы узлов намного больше, чем новые пути и идентификаторы отношений. Из-за этого все чаще встречаются одинаковые osm_ids из небольшого фрагмента, но это все же может произойти, и пользователь не должен доверять, что osm_ids универсально уникальны.

user30184
источник
Хм, но, кажется, этот идентификатор доступен только как отношение?
wutzebaer
Потому что примеры плохие. Тем не менее, идентификатор просто уникален в типе элемента.
Scai
хорошо, откуда ты это знаешь? я не смог найти ни одного примера в моем файле osm, ни документации об этом
wutzebaer
2
Я отредактировал свой ответ и исправил примеры, чтобы показать реальный пример пути / узла, который существует сегодня, и объяснил, почему такие случаи довольно редко встречаются в небольших экстрактах osm. Окончательная документация - схема ruby ​​on rails. Wiki.openstreetmap.org/wiki/Rails_port/Database_schema.
user30184
11

Каждый объект OSM следует этой схеме кодирования по порядку.

  1. Тип объекта (узел / путь / отношение)
  2. Я бы
  3. Версия объекта

так что если тип отличается, то два или более объектов могут иметь одинаковый идентификатор, и они будут ссылаться на разные объекты. Но если type и id одинаковы, а version отличается, то он представляет разные версии одного и того же объекта. В osm api версия является необязательной, и если она не указана, возвращается самая высокая версия.

neogeomat
источник
6
Лучше сказать, что по первым трем можно идентифицировать уникальный объект osm. Я полагаю, что редактирование тегов создает новую версию.
user30184
1
Добавление членов к путям и отношениям также создает новую версию, но перемещение узлов (даже образуя их прямую линию) не создает новую версию пути .
AndreJ
2
Да, редактирование тегов создает новую версию, и эта часть выполняется API OSM. Что касается базы данных, теги также являются частью уникального идентификатора. Но мы используем только API, поэтому первые три дают уникальный объект.
Неогеомат
Не могли бы вы привести пример, когда идентификатор используется для двух типов объектов одновременно? Я не смог найти ... Или есть документация по этому поводу?
wutzebaer
Пример приведен в другом ответе
пошан