Двойная сплошная = Две Линии

Согласен. На территорию дороги можно highway=surface. Или area. Или carriageway, лол.
Кстати, в Руссе предусмотрен тип для полигонов-территорий дорог, а именно 0x6b.

Допустим, данные о местоположении полос точны как никогда - 1 сантиметр, и рендерится всё правильно. НО!
Данные о вашем местоположении - они-то как раз не точны! И будет у вас всё правильно нарисовано, за исключением одного - приёмник вместо правой полосы, будет определять себя на крайней левой, или на тротуаре. При чём он даже не может толком узнать - где он реально. Для этого нужны “умные” алгоритмы с акселерометрами, видеокамерами или радарами, а ещё лучше и тем, и тем вместе. А без этого - можно только привязаться к “ближайшему вею” (галочка “ехать только по дорогам”).

Именно для этого предложено “разносить” на 2 и более только те проезжие части, у которых соответствующая ширина. Но и не отображать физически разные проезжие части мы не можем (по одной полосе в каждую сторону, по середине трамвайные пути или газон). Поэтому отображаются проезжие части, если она широкая и более, чем с одним направлением движения - от и её “делим”.

Вот, например, в первом приближении:

  • highway=* - это осевая линия проезжей части, включаемая в дорожный граф (хотя, имхо, лучше бы осевая дороги)
  • highway=* + route_graph=no - осевая, НЕ включаемая в роутинговый граф
  • route_graph=* - ребро графа, не совпадающее с осевой (значения как у highway)
  • ну и man_made=road + surface=asphalt для территории

Да не нужно всего этого. Тем более для точного позиционирования можно придумать гораздо более простую инфраструктуру, например столбики с вычисленными с максимальной точностью координатами, передающими свои координаты на перекрёстке в радиусе десятка метров. И даже без этого навигатор за 50 метров до перестроения по полосам может посоветовать как это сделать, а потом, обнаружив себя не на той полосе, в задумчивости помолчать, пока не сможет определить себя с нужной точностью уже в другом месте.

Тупая привязка к ближайшему вею сейчас портит всю малину при навигации по ОСМ, потому что у навигатора не хватает мозгов даже предположить что в режиме автомобильной навигации он находится на ближайшей автомобильной дороге, а не на ближайшем роутинговом вее.

Ilis, я ещё раз повторюсь, что для твоих целей нужно рисовать не осевые полос, которых в реальности не существует, а линии разметки.

Линии разметки для маршрутизации бесполезны.

Это правило уже часто нарушается :frowning:
Есть любители рисовать тротуары в виде highway=footway в 2-х метрах от highway=unclassified/tertiary/secondary…
Навигатор с ненулевой вероятностью будет показывать что ты едешь по тротуару.

Еще стоит помнить что при конвертации в карты Garmin точки расположенные ближе 2.4 метров могут слиться в одну из за округления координат. Что приведет к карте которая может быть неверна топологически - дорога и тротуар будут совпадать (и отображаться возможно будет только одна из двух линий).

Если посмотреть http://gis-lab.info/data/mp/files/ru.mosobl.err.htm то заметная часть ошибок “Too close nodes” это тротуары.

Тут наверно скажут что мы рисуем не для навигаторов, но я не вижу простого способа обойти это ограничение. Подозреваю что подобное округление координат есть не только в картах Garmin но и в других навигаторах.

Если начать массово рисовать дороги в виде двух линий, то как минимум часть их них приведет к такой же проблеме - две близко расположенные линии в навигаторе сольются в одну.

Ilis, да ну??? Вообще-то все водители именно по ним и ориентируются.

Уже сейчас по ним несложно алгоритмически высчитать полосы, а мы же про будущее говорим! Тогда алгоритмы распознавания образов на порядок круче будут.
Так что не надо тратить силы на ненужные осевые, рисуй сразу разметку.

Отсюда

  • highway=* - это осевая линия проезжей части, включаемая в дорожный граф (хотя, имхо, лучше бы осевая дороги) согласен
  • highway=* + route_graph=no - осевая, НЕ включаемая в роутинговый граф Не знаю для чего, но может пригодиться
  • route_graph=* - ребро графа, не совпадающее с осевой (значения как у highway) Надо, особенно там, где разворот запрещён
  • ну и man_made=road + surface=asphalt для территории Да, как раз для “местных расширений”!
    Остальное можно вытаскивать из “ширины полотна”, “ширины и количества полос” (что бы “красиво рисовалось”).

Разметку-то линиями рисовать можно, или сразу полигонами?

Думаю, это лучше в отдельном топике обсуждать

Да хорош уже. Суть в том, что точности не хватает и проблемы отнюдь не в “рисовании под программу”. Ну аж кто что хочет рисовать на дорогах - пускай рисуют, хотите полосы (центры, края), хотите разметку, хотите - прямо полигонами :slight_smile:
Только это уже не должны быть теги highway.

Угу: “Only ways or areas marked with the key highway=* or junction=* are a road that a car, bike or pedestrian can navigate on”. (http://wiki.openstreetmap.org/wiki/OSM_tags_for_routing#Roads)
Объекты, рисуемые для целей, отличных от авто/вело/пеше/конной навигации, должны иметь другие теги.

man_made - вообще какой-то странный тег. Еще с площадными дорогами есть некоторые непонятки относительно тротуаров. То есть надо уже сразу разделить проезжую часть, тротуар, и полигональную дорогу (видимо landuse=*).

Aleksandr Dezhin, landuse=* - это скорее всё-таки землеотвод под дорогу. То есть вместе с обочиной и кюветами.

Ну да, он и есть. Я же вроде не предлагал landuse=* обозначать проезжую часть. Просто man_made=* это тег-помойка, для проезжих частей нужно нечто другое.

Сомневаюсь, что в таком виде landuse будет востребован - землеотвод это всё-таки скорее кадастровое понятие, на картах его не обозначают. А для дорожного полотна вряд ли будет что-то лучше man_made, хоть он и помойка :slight_smile:

Ну почему же. В городе он будет логично стыковаться с другими landuse=*, например residential, и делится на пешеходную и проезжую часть, возможно на газоны какие-то еще и пр. Ну а канав и гигантских землеотводов под дороги в городе не особо есть. Ну а за городом да, оно будет одинаково бесполезно с полигональной проезжей частью.

man_made’у в данном случае альтернативы нет. Это именно искусственное сооружение.