Неправильное поведение JOSM

Обнаружил дебильнейшее поведение JOSM при накладывающихся путях, поддержите этот тикет плюсом: http://josm.openstreetmap.de//ticket/10200#modify

Мы ухудшаем себе роутинг бесполезными запретами которые приходится ставить из-за этой точки и выдумываем точки без GPS инфы только потому что JOSM сказал что на пересекающихся прямых нужна точка. Плюс эти все данные не нужны, без чудо валидатора JOSM это всё отлично работает.

Точка не должна быть обязательной. Это не должно быть ошибкой. Это поведение было 6 лет, но не значит что оно правильное и не стоит его менять.

А как могут пересекаться веи на одном уровне и не иметь общей точки?

Потому что это не чертова геометрия. “рисуя” дороги highway=* вы формируете навигационный граф (откуда-куда).

Потому что я рисую higway=road которая меня ведёт из точки A в B. Если кто-нарисовал дорогу CD поверх моей это НЕ ЗНАЧИТ что он может моей дорогой AB пользоваться хоть как-то. Это значит что он может перемещаться из C в D и что дороги почему на одном уровне накладываются, не нужно заставлять ставить точку здесь. Даже если они на одном уровне. Не нужно требовать точку, в моём графе все было хорошо без валидатора JOSM.

Если вы ставите точку на пересечение вы не просто соединили два отрезка. Вы создали еще два навигационных правила. Я эти правила не хотел. JOSM заставил меня поставитб эту чертову точку. Теперь есть не только AB, CD, но еще AD и CB. Если навигации AD и CB нет то вам придется ставить запреты на поворот. Чтобы были те же старые AB и CD вам пришлось нарисовать точку БЕЗ GPS координат и сделать два запрета.

Так вот какого черта???


Э… а можно пример такой ситуации из жизни? Чтобы никаких там ворот-шлагбаумов, а просто так - нельзя пользоваться моей дорогой, и точка (без точки - каламбур)?

Отключите Edit → Prefernces → Data validator → Crossing ways. Для меня, например, эта проверка полезна, и я не хотел бы ее отключать.

Реальный пример. Дорога AB. На ней можно проехать только прямо: от А до B. Я про эту дорогу больше ничего не знаю.

Вы рисуете дорогу CD, тоже с одной стороной но так получилось что поперёк моей и они накладываются. Вы знаете что можно попасть из C в D и что она односторонняя, о моей дороге вы ничего не знаете.

Ставя общую точку в две дороги вы по умолчанию содаёте два правила навигации AD и CB. Я точку D в жизни не видел и не знаю можно в неё попасть из А. Почему вам придется не только поставить абсолютно левую точку где JOSM решил пересечение дорог но еще запретить правила маршрутизации возникшие только по прихоти JOSM? AD и CB?

edit:
Хорошо что она отключается, нужно добить тогда разработчиков о отключении её по умолчанию для всех пользователей.

d1g, Как продолжение Вашего примера - если знаете что можно попасть из A в B, но откуда Вы знаете что можно попасть из B в A? По Вашей логике Вы должны сразу добавлять oneway. Т.е. нужно позже уточнять “роутинг”. А его нужно уточнять в любом случае - что с точкой пересечения, что без, так как с этой точки зрения ситуация равнозначна. Поэтому есть настройка:

Тут совет один - “не уверен - не обгоняй”, т.е. не мапьте того, чего не знаете. Есть ли такой реальный пример, что бы две дороги пересекались на одном уровне, но и не пересекались одновременно… А если они “накладываются” - то выясните почему, то ли у вас неправильно привязаны дороги/треки, то ли там-таки есть мост/тоннель/ещё что-то.

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

  1. Чтобы запретить только что созданные маршруты (они не видны глазом из коробки, нужно либо вручную проверять все пути + все-все-все запреты считать либо знать что есть плагин прямо в JOSM)
  2. Чтобы их проверить нужны серьезные навыки владения osm.

Точку на пересечении любой дурак поставит потому что валидатор ему сказал, а вот о последствиях не сказал.
Вы видели что я на скриншотах показал? Это же счастливый новичок который ставит точки на пересечение несвязанных путей потому что ему JOSM сказал. Откуда ему знать о каких-то 4 правилах, а не двух возникших при этом? У него граф маршрутизации совсем другой - но он то откуда знает если валидатор JOSM теперь ему сказал “все ок”?

Это “коробочное” правило заставляет (я никаких настроек не трогал, я “тупой”) менять граф и ничего не говорит о изменениях, что, где, почему. Это неправильно, особенно неблагоразумно давать такое новичкам.

Что-то мне эту тему напомнило.

Что вы так убиваетесь? Вы же так не убьётесь! (С)

Гораздо больше новичков, которые рисуют связанные дороги без общей точки, явно нарушая граф маршрутизации (не имея при этом о нём ни малейшего понятия). Я думаю, в целях минимизации зла умолчальное значение этой настройки выставлено правильно.

d1g, ты не смог освоить отношения или что? Если б я увидел конструкцию как на картинке, я б не задумываясь переделал в отношения. Два лишних отношения - это сложно, а нарисовать вместо одной точки 4 + две линии это нормально?

  1. Я освоил и не только их
  2. На скриншотах в левой половине результат работы плагина Graphview от графа который нарисован в правой части скриншотов
  3. Речь о новичках. Которые не знают что такое запрет на поворот. Не знаю что такое навигационный граф. Не знают что есть навигационные правила и что есть утилиты (вне JOSM) чтобы их проверить. Которые зашли в JOSM порисовать домов и решили от нечего делать дорисовать дороги в некоторых местах.

ИМХО, слишком синтетическая ситуация. Надо чтобы

  1. Две дороги, AB и CD, которые пересекаются но так, что съехать с одной на другую нельзя
  2. Кто-то уже нарисовал дорогу АB, но ещё никто не нарисовал CD
  3. Новичок взялся нарисовал дорогу CD и, получив предупреждение JOSM, не попытался выяснить как правильно и тупо поставил точку пересечения.
    Даже если всё это сложится, мы получим ошибку в базе, да.
    ИМХО, вероятность этого очень низкая. Такие пересечения на крупных дорогах уже должны быть отрисованы, а на мелких - риск некорректного роутинга небольшой, скорее всего недалеко можно будет съехать.
    С учётом всего, риск вполне допустим. Сопоставим с риском нарваться на ремонт дорог и т.п.

С другой стороны, если мы выключим эту опцию в JOSM по умолчанию, в базе скоро будет тонна перекрёстков в городах и сёлах без общей точки дорог, т.е. по которым не будет работать роутинг.

  1. Она ни разу не синтетическая а возникает на любом перекрёстке “квадратом” одностороннем

Как это происходит? Вы рисуете эллипс горизонтальный. Вы рисуете эллипс вертикальный. Эти два эллипса это дороги только односторонние. Образуются четыре области где эти накладываются. Если поставить хоть в одну эту область точку (точнее - соединить два ребра в графе) то вы сможете “прыгать” с одного колечка на другое.

Редактор JOSM по умолчанию заставляет вас сделать с пересекающимися путями.

Если вы ставите четыре точки - как JOSM просит - в центральном квадрате вообще возникает круговое движение. Которую нужно теперь запрещать?! Эта х$#я происходит происходит потому что "we’re core developers of JOSM for several years джосма которые заставляют всех пользователей OSM рисовать ПОД РЕНДЕР

http://josm.openstreetmap.de/ticket/10200
Когда у osm будут нормальные роутилки с такими ебан!@ в “core dev” - я не знаю. Пусть эти идиоты до посинения тикет минусуют, они полные профаны в роутинге если не понимают что такое связанность графа, а прямоугольники - да, пусть рисуют. Жаль только обычным пользователям приходится изворачиваться (рисуя кресты внутри квадрата и делая всяческие запреты) из-за этих идиотских и необоснованных традиций.

Вы, я смотрю, очень хорошо разбираетесь… Для информации - некоторые алгоритмы роутинга не работают, если нет нода в точке пересечении рёбер графов. Надо отметить это не “тупые алгоритмы”, а наоборот очень продвинутые вроде генерализации графа по уровням и т.д.

Всего-то дел - отключить проверку в JOSM.

Так, секундочку.
Это мост (одна дорога сверху, друга снизу) или это перекрёсток, где нельзя поворачивать?
Если это мост, то надо ставить bridge и/или layer, а ставить общие точки нельзя.
Если это перекрёсток, где нельзя поворачивать, то надо ставить общие точки и рисовать запреты.
Рендерер тут ни при чём, это схема данных ОСМ.
Например, если нужно построить роутинг для чего-то, что имеет право игнорировать запреты поворотов, то однозначно нужна общая точка.

  1. если вы строите пешеходный роутинг, то при отсутсвии информации о тротуарах можно предположить, что у дороги есть тротуар и проложить маршрут через запрещённый автомобилистам поворот.
  2. маршрут для скорой и т.п.

Если новичок рисует дорогу двумя линиями, не проставил bridge/layer или запреты поворотов или не знает что тут за тип пересечения дорог в реале и не хочет это выяснять, то он вам такого в базе ещё может наколбасить, мало не покажется. От таких умельцев вы не защититесь ни чем, кроме премодерации.

А вот ошибка “дороги пересекаются, но пользователь не поставил общую точку” - она очень частая. Сам периодически налетаю, спасибо JOSM-у, подсказывает.
JOSM, кстати, говорит только “Crossing ways”. Он не говорит, что надо поставить общую точку или какие-то тэги.

  1. Так ведь дело не в алгоритмах. Дело в том, какой граф навигационный в базе указан.

Опять мой пример с круговыми дорогами, они правда часты кое-где. Я нарисовал без одной лишней точки, линии и запрета хоть на один поворот. Там нет точки это потому что там нет связи никакой с другим ребром. Точка это не просто точка, она свяжет граф роутнга новым ребром (в РЕАЛЬНОМ мире этого ребра т.е. направления откуда-куда проехать нет).

Нет-нет-нет. Это уже практика тегирования. Почитайте “руководства для новичков” на которые они пытаются сослаться.

  1. Вы скажете что они равнозначны и можно добится одинаковых графов в итоге - формально, да вы будете правы. Как сейчас это нужно сначала нагородить лишних рёбер в граф потому что точку “обязательно ставить потому что ты нубьё а я говнокодер жосма”, а потом еще потратить время на рисование и проверку роутинга т.е. не все ли лишние рёбра мы “вычеркнули”.

Вот только что проще: заставлять всегда этими правилами рисовки под рендер указывать сначала 45 рёбер на перекресток, запрещать 35 запретами всевозможных манвров. Либо дать людям соеденить 10 линий???

Нельзя? Потому что то??? Обязательно точки ставить на пересечения дорог? Потому что этот дурачок занимается бредом много лет и так не понял этого? Зачем это?

  1. “Тупые” A* они тупые но с эвристиками lat lon reach они позволяют роутить в масштабах графа дорог США. 0.005 секунды на запрос через всю страну - для тупого алгоритма это плохо? http://research.microsoft.com/pubs/64505/goldberg-sp-wea07.pdf

Это не мост, это самый настоящий граф роутинга на местности где есть одностороний квадратный перекрёсток, но запрещено "перескакивание с одного кольца на другое - хоть в каком виде нельзя попасть с одного маршрута на другой, нет такого пути-линии.
“Традиция” ставить точку на видимых дорогах (не на графе роутинга) приводит к тому что у вас граф создаётся не тот, что в “действительности”.

Это всё только потому что кому-то необоснованно приспичило точки на всех-всех перекрестках ставить, а не только там где это надо.

d1g, можно более чёткий пример, когда не должно быть точек? Я не могу понять…

Ещё раз.

Если это перекрёсток, где нельзя поворачивать, то надо ставить общие точки и рисовать запреты.
Рендерер тут ни при чём, это схема данных ОСМ.
Например, если нужно построить маршрут для чего-то, что имеет право игнорировать запреты поворотов, то в роутинговом графе однозначно нужна общая точка.

  1. если вы строите пешеходный роутинг, то при отсутсвии информации о тротуарах можно предположить, что у дороги есть тротуар и проложить маршрут через запрещённый автомобилистам поворот.
  2. маршрут для скорой и т.п.