Как мы рисовали road shields на карте
В начале 20-го века на главных дорогах общего пользования начали появляться таблички (далее shield) с номерами. Отображение их на карте не является обязательным атрибутом, но является важным с точки зрения удобства использования. Людям, которые видят таблички в реальности, проще сориентироваться на местности. Также это придает карте «местный колорит». Стоит отметить, что одна и та же дорога может иметь несколько табличек одновременно. Это связано с тем, что дорожные маршруты могут накладываться друг на друга.
В OsmAnd мы решили нарисовать максимально приближенные к реальности shield, используя данные OpenStreetMap.
OpenStreetMap и общие обозначения
В OSM нет общепринятого и распространённого способа описания road shields. Маршруты дорог описываются с помощью relation («отношений») типа route=road. Но, во-первых, они хорошо сделаны только для стран с развитой инфраструктурой и/или с сильным местным OSM комьюнити. Во-вторых, они как правило не содержат информации о цвете и форме shield. Поэтому наряду с данными OSM мы пользовались различными открытыми источниками, в том числе википедией и сайтом sites.google.com/site/roadnumberingsystems/home/countries.
Основная идея использования доступной в OSM информации состоит в том, что мы берём road relation и в зависимости от тега network назначаем цвет и форму shield, цвет номера (ref). На всякий случай ограничиваем область применения каким-то регионом или страной. Но это работает только для ограниченного набора стран. Также часто использовался подход, состоящий в разборе ref (номера дороги) и выделении из него префикса или какой-то последовательности внутри.
На основании этого и страны, содержащей дорогу, делается вывод о характеристиках road shield. Третий метод: некоторые страны имеют систему обозначения номеров дорог по диапазонам номеров. Например: от 0 до 99 — региональная дорога, синий shield с белым текстом; 100–499 — национальная дорога, зеленый shield с желтым текстом и т.п. Иногда использовался комбинированный подход. Также при создании карты OsmAnd туда записывается информация о приоритетах shields в зависимости от системы обозначения номеров дорог конкретных стран.
В OSM wiki существует тег ref: colour, который используется в мире всего около 5000 раз. Чаще всего он встречается в Испании — одной из немногих стран, где не работает ни один из вышеприведённых методов определения параметров shield. В таком случае цвет фона берётся напрямую из этого тега.
США
В США ситуация обстоит следующим образом. Road relations картографированы очень хорошо, но определять характеристики shields приходится иначе: существуют US Interstate highways, US State highways, secondary highways, territorial highways, state highways, county highways, которые в основном различаются по количеству разделителей (двоеточий) в значении тега network.
Ситуация осложняется тем, что практически каждый штат использует свои собственные shields для state highways. Принимая во внимание огромное их количество, мы решили рисовать эти shields упрощённо.
Примеры Road shield с разных штатов: Северная Дакота, Айдахо, Миннесота, Флорида.
Многие дороги имеют модификаторы: spur, truck, business, alternate и т.п. В OsmAnd они отображаются выше самого shield в небольшом прямоугольнике — так же, как и на реально существующих знаках.
Канада
В Канаде каждый штат использует свою систему обозначений номеров дорог. Исключение составляют Transcanada Highways, для которых в OSM не принято однозначного метода тегирования. Проблему удалось решить полностью лишь добавив проверку названия дороги на содержание текста «transcanada» в разных вариациях
Европа
Страны Европы в большинстве своём не используют фигурных shield как, например, в США. Вместо этого широко используются прямоугольные таблички. Исключение составляют Венгрия, Румыния, Нидерланды (stadsroutes, городские дороги), автомагистрали Германии, Греции и Италии. Тип дороги обозначается цветом фона, а также цветом текста.
Европейские автомобильные маршруты имеют префикс E и от одной до трёх белых цифр на зеленом прямоугольном фоне. Эти маршруты в какой-то степени аналогичны межрегиональным маршрутам США (Interstate Highways). Признаком такого маршрута в OSM является отношение route=road и тег network=e-road. В процессе обработки данных выяснилось, что отношения некоторых из этих маршрутов не содержат тег network=e-road, что было устранено.
Другие страны
Существуют страны (Ливан, Монголия) где оказалось проблематично установить, каких же цветов и форм в реальности должны быть shields. Похоже что в этих странах road shields не используются вообще.
Израиль, Южная Корея, Саудовская Аравия и некоторые другие страны используют shields, которые больше нигде не используются.
Основной картостиль на openstreetmap.org, mapnik, не использует данные из road relations. Этот факт вместе с историческими причинами привёл к тому, что как правило на всех участниках этих отношений проставлен тег ref. В то же время значительная часть дорог не входит в road relations и значение тега ref является единственным источником данных. Следовательно, мы не можем отбросить тег ref и полагаться только на road relations. Вместо этого мы, при отсутствии соответствующего road relation, преобразуем тег ref к тому внутреннему представлению данных, которое используется для хранения тегов, полученных из road relations. Это даёт возможность упростить код стиля карты.
На момент опубликования статьи OsmAnd поддерживает road shields практически во всём мире. Исключение составляет часть Африки и часть Центральной Америки.