Некоторое время назад я уже обещал разразиться большим и нудным постом про OpenStreetMap, с которым недавно начал знакомиться, и вообще про некоторые соображения, касающиеся цифровой картографии. Правда, тогда я только-только начинал знакомиться с тем, что есть в OSM, как там рисуют, и как это выглядит потом в рендере. И только начинал думать на тему того, что и в каком направлении хотелось бы в этом поменять. Вот, сейчас что-то в общих чертах уже надумалось. Точнее, там как минимум два основных момента. Итак,
Часть 1 - или "Почему автомобильные и железные дороги в OSM неизбежно рисуются через задницу"
(а следующая, вторая часть, предполагается как "OSM и особенности национальной генерализации" - поскольку это всё же несколько отдельная и более общая тема по отношению к теме рисования дорог, хотя касающаяся и их отображения в том числе).
Да, сразу оговорюсь, что практически всё, что сказано ниже, относится на самом деле не только к OSM, а к большинству цифровых карт, которые можно смотреть в разных масштабах, а кое-что даже и к готовым картам фиксированного масштаба, например, бумажным. OSM тут просто попался, так сказать, под горячую руку, просто потому, что у меня в принципе есть возможность туда что-то реально рисовать, а соответственно и возникают вопросы, как это делать, или почему то-то и то-то нельзя/не получается.
Дело в том, что, как выяснилось на форуме OSMщиков, у них постоянно идут нешуточные баталии о том, какой статус присваивать той или иной дороге или проезду, и что, собственно, эти статусы и теги вообще означают. Понятно, что все хотят стандартизации обозначений - с нестандартными обозначениями не справится рендерер, просто потому, что он о них не будет знать, а ведь пользователь карту воспринимает, как правило, через её отрисовку рендерером, а не как-то ещё.
Но дальше начинается сплошная чертовщина.
И возникает эта чертовщина, очевидно, именно из того, что руководящие лица в OSM считают возможным характеризовать дорогу одним единственным признаком, который собственно и будет отображаться на картинке, а все остальные признаки либо вообще проигнорировать, либо запихать во второстепенные, которые на экране или бумажке вовсе не будут отображены, а увидеть которые можно только через тыкание в знак дороги на компе и просмотр портянки со списком тегов.
Ещё один столь же важный момент - представление о том, что для дороги достаточно одного единственного линейного знака, который решит задачи изображения рендерером в любом масштабе и в любой ситуации. Забавно, что те же самые люди почему-то не считают достаточным для любого здания единственного точечного знака. Хотя казалось бы, масштаб у дорог и проездов (в ширину) и у домов - практически одного и того же порядка.
Чуть менее заметно в виде баталий на форуме, но для конечного пользователя не менее важно - это порядок присвоения статусов населённым пунктам, и способ рисования железных дорог. Впрочем, про населённые пункты - это всё-таки более уместно уже в теме про генерализацию.
Теперь по порядку. Начнём с дорог (которые автомобильные). Постоянный вопрос, вокруг которого крутится всё - это то, что же собственно говоря отражает статус дороги. Либо формальный статус по документам, либо географическое значение как связи между регионами какого-то уровня, либо физические характеристики и состояние дороги. Выбор любого одного из трёх принципов окажется абсолютно неадекватным. Такое впечатление, что авторы классификации дорог подразумевали, что во всём мире дороги бывают только такими, какие они есть в отдельно взятом их родном регионе, а всеми прочими вариантами можно пренебречь или свести к уже имеющимся. И соответственно, всё затолкать в одномерную жёсткую классификацию, когда тип дороги задаётся одним словом.
Вообще говоря, автомобильная дорога для карты могла бы гораздо более гибко представляться в виде как минимум трёх объектов, которые бы снимали основные противоречия и проблемы, встающие перед пользователями, в частности, в OSM (но это относится и к другим популярным картографическим системам, будь то открытым или закрытым).
Объект №1 - это собственно дорога. Именно она будет в любом случае показана на мелкомасштабной карте. Она представляет собой одиночный линейный знак, это фактически трасса дороги. Именно в ней записан статус как фактическое значение этой дороги в качестве связи регионов определённого уровня, в качестве транзитной и т.п. Здесь более-менее уместна классификация того вида, как в OSM - trunk, primary, secondary и т.д. Здесь уместно указание на ограничения движения (дорога для всех или только для быстроходных механических ТС, платная дорога, дорога только для избранных, пешеходная/велосипедная дорога, по которой физически можно проехать и на автомобиле - но нужно специальное на то разрешение и т.п.), если они касаются всей дороги.
Объект №2 - это логическая проезжая часть. Это не то же самое, что физическая проезжая часть (по определению в ПДД), это собственно то, что должно использоваться для прокладки маршрутов. Т.е. если дорога поделена сплошными линиями, которые пересекать нельзя - то здесь мы имеем отдельные логические проезжие части. Именно тут - поскольку используется для прокладки маршрутов - имеет смысл указывать ограничения скорости легальные и физические (по форме и состоянию дороги), вид и состояние покрытия (на предмет того, сможем ли мы вообще тут проехать), габаритные, весовые и прочие ограничения. Здесь же - и общая проезжая ширина, и число полос, если они явно обозначены. Ограничения из связанного объекта №1 автоматически засчитываются и здесь. Пешеходные дорожки или тротуары, велодорожки, если они есть, являются отдельными логическими проезжими частями, с соответствующими собственными ограничениями.
Объект же №3 - это физическая проезжая часть. Это сугубо масштабный объект со своей строго масштабной шириной, который занимает конкретное пространство на земле. Сюда же относятся и такие компоненты дороги как обочины, тротуары, велодорожки и т.п. Он тоже может содержать указание типа покрытия (постольку поскольку тип покрытия может интересовать не только автомобилиста, прокладывющего маршрут по дороге, но и пешехода, для которого эта дорога - просто один из объектов местности, по которому может быть надо пройти, или по которому можно ориентироваться). В силу того, что, как уже сказано выше, масштаб ширины дорог и их составляющих, и масштаб зданий приблизительно совадают, совершенно логично при тех масштабах или заданиях рендеринга, при которых на карте появляются контуры зданий, автоматически переходить на рендеринг и дорог строго по данным масштабным знакам. Здесь же место и для таких признаков как прохождение по поверхности земли или по искуственному сооружению того или иного типа. Кроме пешеходов, такого типа объекты на карте могут быть весьма полезны для планирования перевозки крупногабаритных грузов или просто для планирования поездки на транспортном средстве, с которым могут быть трудности со вписыванием в повороты.
Теперь перейдём к дорогам железным и к ним примкнувшим. То есть, фактически, к направленному транспорту. Принципиальное отличие направленного транспорта от автомобильного/пешеходного/велосипедного - это что он движется по одномерным путям. Т.е. сам по себе путь - безоговорочно линейный объект, который можно смело изображать на карте линейным условным знаком со сколь угодно большой точностью, если это необходимо. С точки зрения возможности проезда путь у направленного транспорта заменяет собой (физически двумерную) проезжую часть ненаправленного. Так что для обозначения пути на карте достаточно лишь одного, а не двух объектов - это уже приятно. Далее из этого и из реальной практики следует, что у пути нет отдельных габаритных ширины и высоты, зато есть ссылка на габаритное очертание (очертания), которому он соответствует, а также стандарт самого пути (включая, например, ширину колеи, если это понятие применимо в конкретном случае, но не только: скажем, железнодорожный путь колеи 1520 мм и трамвайный путь колеи 1520 мм - это уже две большие разницы). Также как есть и весовые и скоростные ограничения.
Таким образом, для изображения железной дороги в крупном масштабе всё достаточно удобно и понятно: просто нарисуй каждый путь линейным знаком, где надо - стрелки, и всё будет хорошо. Решены одновременно и задача отображения в крупном масштабе, и задача прокладки маршрутов.
Но понятно, что и для мелких масштабов необходимо отображение железных дорог, трамваев и т.п. Отдельные пути в местах, где их несколько, оказываются внемасштабны (точнее, внемасштабна, конечно, ширина междутпутий). Встаёт вопрос - что же вообще может быть надо изобразить, чего мы хотим от карты.
Конечно, есть смысл в знаке, обозначающем просто площадь, занятую железнодорожными путями и относящейся к ним инфраструктурой. В каком-то масштабе, когда отдельные пути уже не изображаются, крупные толстые ж.д. станции могут тем не менее иметь ширину, вполне выразимую в масштабе. Как, например, сортировочные, грузовые и пассажирские технические станции на карте Москвы в каком-нибудь двухсотметровом (1:20000) или пятисотметровом (1:50000) масштабе - они имеют ширину, сопоставимую с размерами кварталов застройки, раз кварталы застройки на таких картах безусловно изображаются в масштабе, то и территории ж.д. тоже должны бы.
Но нужны, видимо, ещё какие-то линейные объекты, во-первых, для совсем мелкого масштаба, а во-вторых, для указания, что это не просто какая-то там территория, кем-то занятая, а именно дорога, хоть и железная. Вот тут самое непонятное, что делать. Возможны 2 варианта - грубо говоря, с точки зрения стороннего пешехода и с точки зрения железнодорожника/пассажира. Первый вариант чаще всего реализуется на бумажных топокартах. Впрочем, этот вариант является по большому счёту всего лишь вариантом знака площади, занятой ж.д., только для случая, когда ширина оказывается внемасштабной. Т.е. изображается просто трасса - грубо говоря, ось земляного полотна или даже группы земляных полотен, идущих вместе. Если рассуждать логически, то вообще-то в таком изображении не больше смысла, чем в том, чтобы, например, изобразить одним знаком Павелецкое направление ж.д. и участки автодороги М4, или Московскую Окружную ж.д. и участки ТТК, только на том основании, что они просто идут рядом друг с другом. По этой причине подобное изображение одной линией любых параллельно идущих ж.д., даже на общем полотне, мне кажется лишённым смысла вообще, и держаться за традиции топокарт в этом отношении, наверное, не стоит. В конце концов, если кому-то этого хочется - знак занятых ж.д. площадей всегда позволит нарисовать это, при соответствующим образом настроенном режиме распознавания и отрисовки внемасштабной ширины.
Второй вариант - это изображать как-то с учётом функциональности. Фактически это предельно близко к вышеописанному обозначению автодороги как единого целого, без деления на проезжие части (но и без объединения разных дорог разных направлений, лишь территориально оказавшихся рядом друг с другом). Т.е. если идёт линия, у которой 1,2,3 или 4 главных путей - мы всё равно рисуем это одной линией, поскольку это одна и та же ж.д. линия. Число путей и электрификацию можно обозначить уже отдельными пометками поверх. А вот если параллельно, даже на том же полотне, идёт подъездной путь или соединительная ветка, которая с главными путями никак не соединяется - то это рисуем отдельной параллельной линией, невзирая на внемасштабность расстояния между линиями, поскольку это - уже безусловно другая, отдельная ж.д. линия, идущая в совершенно другое место. Такие линии, так же как и автодороги, могут (или даже должны) иметь указание статуса, значения, которое может учитываться для генерализации. В то же время для путей, так же как и для физических проезжих частей, указание статуса уже не имеет смысла, поскольку отбрасывать их при генерализации не имеет смысла: либо они не выражаются в масштабе карты, и тогда их вообще не имеет смысла показывать, либо они выражаются в масштабе - но тогда это уже такой крупный масштаб, в котором показываются отдельные дома - и в таком случае отбрасывать любые, какие бы то ни было дороги, проезды, тропинки, ж.д. и трамвайные пути исходя из некоего формального статуса - явное кощунство (разумеется, при условии, что информация с достаточной подробностью изначально имеется).
...Наверное, излишне говорить, что, несмотря на практически полную тишину и отсутствие баталий на форуме OSM на тему того, как (в существующих обстоятельствах, т.е. при отсутствии той более-или менее чёткой схемы, описанной выше, отсутствии различия между ж.д. линиями и отдельными ж.д. путями) рисовать ж.д., по сравнению со страстями на тему автодорог (всё-таки OpenStreetMap - неспроста Street, конечно, и концентрация в первую очередь на автодорогах и пеших проходах там вполне понятна...), железки, метро и трамваи там каждый рисует вообще как бог на душу положит. Причём это в практически равной мере касается и России, и забугорных стран. Кто-то нарисует (многопутную) линию одной линией, кто-то нарисует по числу путей. Кто-то станцию обозначит точечкой с подписью, кто-то очертит приблизительное очертание парка/парков при помощи некоего виртуального пути. Кто-то даже "заштрихует" парк некими символическими путями, не соответствующими реальности ни числом, ни положением, ни реальной схемой стрелочной горловины. Ну а кто-то - хвала героям, что называется - честно прорисует каждый путь и каждую стрелку так, как они есть в реальности. Кто-то рисует подъездной путь или соединительную ветвь отходящим от станции и идущим параллельно главным путям, а кто-то просто "ответвляет" их посреди перегона в том месте, где путь сходит с общей трассы.
Но - по-прежнему непонятно, кто прав, кто виноват, что называется, и как же на самом деле надо рисовать железки, хотя бы для сохранения единства стиля. Лично я считаю, что рисовать каждый путь и стрелку - это на самом деле правильно, ибо нужно в крупных масштабах, т.е. сама по себе эта информация нужна. Но вот когда такие реальные пути путаются с чем-то таким чисто символически нарисованным, а потом те и другие путаются с ж.д. линиями как таковыми - это уже плохо.