Як ми малювали 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.
image

Ситуація ускладнюється тим, що практично кожен штат використовує свої власні shields для state highways. Беручи до уваги величезну їх кількість, ми вирішили малювати ці shields спрощено.
imageimageimageimage
Приклади Road shield з різних штатів: Північна Дакота, Айдахо, Міннесота, Флорида.

Багато дороги мають модифікатори: spur, truck, business, alternate і т. п. В OsmAnd вони відображаються вище самого shield в невеликому прямокутнику — так само, як і на реально існуючих знаках.


Канада

У Канаді кожен штат використовує свою систему позначень номерів доріг. Виняток становлять Transcanada Highways, для яких в OSM не прийнято однозначної методу тегів. Проблему вдалося вирішити повністю лише додавши перевірку назви дороги на зміст тексту «transcanada» в різних варіаціях



Європа



Країни Європи в більшості своїй не використовують фігурних shield як, наприклад, в США. Замість цього широко використовуються прямокутні таблички. Виняток становлять Угорщина, Румунія, Нідерланди (stadsroutes, міські дороги, автомагістралі Німеччини, Греції та Італії. Тип дороги позначається кольором фону та кольором тексту.
Європейські автомобільні маршрути мають префікс E і від однієї до трьох білих цифр на зеленому прямокутному тлі. Ці маршрути в якійсь мірі аналогічні міжрегіональним маршрутами США (International Highways). Ознакою такого маршруту в OSM є ставлення route=road і тег network=e-road. В процесі обробки даних з'ясувалося, що ставлення деяких з цих маршрутів не містять тег network=e-road, що було усунуто.
image

Інші країни

Існують країни (Ліван, Монголія) де виявилося проблематично встановити, яких же кольорів і форм в реальності повинні бути shields. Схоже що в цих країнах road shields не використовуються взагалі.
Ізраїль, Південна Корея, Саудівська Аравія і деякі інші країни використовують shields, які більше ніде не використовуються.


Основний картостиль на openstreetmap.org, mapnik, не використовує дані з road relations. Цей факт разом з історичними причинами призвів до того, що, як правило, на всіх учасників цих відносин проставлений тег ref. У той же час значна частина доріг не входить в road relations і значення тега ref є єдиним джерелом даних. Отже, ми не можемо відкинути тег ref і покладатися тільки на road relations. Замість цього ми, при відсутності відповідного road relation, перетворимо тег ref до того внутрішнього подання даних, який використовується для зберігання тегів, отриманих з road relations. Це дає можливість спростити код стилю карти.
На момент публікації статті OsmAnd підтримує road shields практично у всьому світі. Виняток становить частина Африки та частину Центральної Америки.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.