Я хочу вытащить из OSM файла(ов) только дороги, по которым могут ездить автомобили. Буду писать для этого программу.
Хотел бы у сообщества уточнить все условия, которые могут мне понадобиться.
Я уже понял, что файл OSM состоит из трех частей: nodes, ways и relations.
С nodes понятно. С ways вроде как тоже. То что я ищу это ways у которых есть тэг с ключем highway. Я правильно понимаю или мне могут еще какие-то теги понадобиться?
Так же мне нужны названия этих дорог (улиц, трасс…). Откуда согласно стандарту их нужно брать?
Вот у меня перед глазами файл RU-TY.osm (Тува). Возможно не самый лучший образец, но благодаря этому файлу у меня появился ряд вопросов.
Тут есть ways у которых сразу определено название. Вот пример:
<way id="34882725" version="8" timestamp="2010-12-14T16:51:11Z" uid="365883" user="morganvenable" changeset="6659995">
<nd ref="409084354"/>
<nd ref="409084605"/>
<nd ref="409084607"/>
<nd ref="867606796"/>
<nd ref="409084362"/>
<nd ref="409084366"/>
<nd ref="409084376"/>
<nd ref="409084356"/>
<nd ref="1038352332"/>
<nd ref="869107035"/>
<nd ref="409085198"/>
<tag k="addr:postcode" v="667000"/>
<tag k="cladr:code" v="17000001000008200"/>
<tag k="cladr:name" v="Ленина"/>
<tag k="cladr:suffix" v="Улица"/>
<tag k="highway" v="tertiary"/>
<tag k="name" v="улица Ленина"/>
<tag k="name:en" v="Lenin street"/>
<tag k="name:ru" v="улица Ленина"/>
</way>
И эта улица корректно отображается на карте. Но но большенсво ways описывающих улицы не содержат тега с названием.
Так же в файле много relations, которые вроде как призваны объеденить в себе ways и дать название этой улицы, например:
<relation id="1575716" version="1" timestamp="2011-05-07T04:02:51Z" uid="180462" user="Dennis Apter" changeset="8070396">
<member type="relation" ref="1568614" role="is_in"/>
<member type="way" ref="31718655" role="street"/>
<member type="way" ref="31718973" role="street"/>
<member type="way" ref="31718982" role="street"/>
<tag k="address:a6" v="Гранитная улица"/>
<tag k="address:type" v="a6"/>
<tag k="name" v="Гранитная улица"/>
<tag k="type" v="address"/>
</relation>
Но way’ев с такими id в файле нет. Судя по всему это какой-то косяк и это какие-то мертвые relations. Потому как в данном городе куча неназванных улиц (судя по отрендеренной карте), а в данном файле куча таких вот мертвых relations с (отсутствующими на карте) названиями улиц.
Но все это я вот к чему. Так откуда же брать названия улиц? Что является стандартом? Или если описание улицы укладывается в один way то название может быть там, а если улица состоит из нескольских way’ев, то искать её название нужно в соответвующем relations?
Потом, как видно в последнем листинге role=“street”. А какие еще role могут мне понадобиться? Для чего нужны relatedStreet и associatedStreet?