Актуальные задачи, требующие искусства программирования

В Испании дорог больше чем в России! Как жить?)

Это потому что испанцы знают толк в motorway_link-ах
Первый раз 25 edge-й не хватает в этой точке схопывания. Полагаю, вся эта адова конструкция из 4-километровых линков пытается схопнуться в 1 точку.

Кстати, наши автозимники М56 - Сасыр и Сасыр - Зырянка так никто и не исправил с primary_link-а.

Может ограничение какое поставить? трактовать линки длиннее километра как обычные дороги?

Кто их поправит-то? Это визуально совершенно незаметно. Пришлось самому)

Ждём-с валидатор
а) длина линка больше, чем N км
б) линк не пристыкован ни одним из концов к дороге того же уровня

Визуализировать не могу, так что он там на крутил сказать не могу, но без ошибок.
http://cboboda.pisem.su/files/osm/ES-OVRV.roads.mp_opt.mp.7z

freeExec, почему? gpsmapedit - бесплатный :slight_smile:

Ну потому что на работе разовый софт я не ставлю :wink: Так что там внутри всё нормально ?

Ну… алгоритм сработал, как должен был с учётом входных данных :slight_smile:
http://ge.tt/8zXzcRS/v/3?c

а) Одиночных - могу сделать. А если будет цепочка/“жучок” коротких линков? А если они будут U-образной петлёй (т.е. расстояние между концами - не критерий) ?
Zkir, какой N и куда лучше “высыпать” ошибки - в выходной .mp-шник "; ERROR: "-ами или в отдельный файлик простым списком?

б) Ненененене, это без меня.

Имхо, подбирается методом итераций, чтоб ложных срабатываний немного было.

Образцово-показательный способ - карта со ссылками для JOSM :wink:
Если ошибок немного (ну, полсотни, скажем), можно просто список со ссылками. Зная координаты, ссылку несложно сформировать. Хотя б приблизительную.

Сейчас важнее поправить сам алгоритм, таким образом:
Если линк длиннее 500 метров, причем тупо между началом и концом, никуда его не стягивать. Java версию тоже.

Дык, это давно есть уже. Валидатор связности по уровням, в нем такой линк вылезет как изолят.

Это надо на РФ проверять.
Надо было в задачу включать тест рутинга, на той же java. Потому что проверять нормально или нет, надо так - строить маршруты между точками, и смотреть насколько они отличаются, на исходной карте и на упрощенной. Если не отличаются - значит нормально :slight_smile:

Это только, если этот линк не подключен к более высокому уровню.

Эмн. http://www.openstreetmap.org/browse/way/156283349 - 721 метр
http://www.openstreetmap.org/browse/way/156283350 - 1.02 км

Хм, будем подбирать методом итераций :smiley:

Ну лады, будет параметром у Load_MP(). Если длина вея превысит предел, флаг _link со всех отрезков вея будет снят (primary_link превратится в primary и т.п.). Потребуется складировать перечень отрезков в массив, так что загрузка _link-ов затормозится.

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

Закоммитил.
При 1200 метрах, в январском RU-OVRV.roads.mp нашлось 115 линков длиннее. Список.
При запредельном значении - нет отличий при конвертации RU-OVRV.roads.mp

В Испании при 1200 метрах - 714 веев, но это не помогает, программа всё равноутыкается в предел рёбер где-то тут:
http://www.openstreetmap.org/?lat=40.35601&lon=-3.75567&zoom=15&layers=M
При 500 метрах - уже 5949 веев и срубается тут:
http://www.openstreetmap.org/?lat=40.2802&lon=-3.75357&zoom=15&layers=M
Дальше возиться не стал

Не совсем так. secondary_link, соединяющий два primary, найден не будет.

Так, а можно алгоритм подкрутить под немного другую задачу? Она для меня сейчас важнее даже Испании, и я готов ее тестировать :slight_smile:

Стягивание развязок отключить, оставить стягивание только колец.
В местах скрещивания дорог делать перекресток.

http://peirce.gis-lab.ru/misc/EU-OVRV.zip

java версия тоже актуальна :slight_smile:

  1. Что есть кольцо?
    У меня сейчас стоит детектирование замкнутых дорожных петель короче лимита (1200 метров, вызов CheckShortLoop2() ) и стягивание их как развязок, но оно стоит вторым после маркирования как развязок всех (уцелевших) _link-ов. Если маркирование _link-ов отключить, то детектор петель зацепит дуги развязок и т.п. Нужен более чёткий критерий “кольцо, но не развязка”.
  2. Объединение двухвеек в одновейки делать? Если нет, то кольца стянут в точку место схождения двухвеек. Если да, то останутся не объединённые двухвейные дороги в развязках.
  3. Что значит скрещивание дорог? Любое пересечение, где можно съехать с одной на другую?

Зацепит и зацепит. Наверно я могу и так это потестировать, всем дорогам назначить один тип :slight_smile:

Делать.

Не очень понял почему останутся?

Любое пересечение, даже без общей ноды.

В этой карте некоторые развязки уже отвалились.

Требуется пересечение и рутинговая нода

Zkir

Зацепит и зацепит. Наверно я могу и так это потестировать, всем дорогам назначить один тип :slight_smile:

Объединение двухвеек в одновейки делать?
Делать.
Сделал.
Зрелище душераздирающее. Это с выключенным JoinAcute, с включённым ещё забористее.
Исходник и mp-результат по прямоугольнику Москва-Бологое - тут.
ИМХО, такой хоккей нам не нужен.

Если да, то останутся не объединённые двухвейные дороги в развязках.
Не очень понял почему останутся?
Хм, вроде не остались. Видимо, мои ощущения от старых версий JoinDirections

Любое пересечение, даже без общей ноды.
В этой карте некоторые развязки уже отвалились.
Требуется пересечение и рутинговая нода
А хорошо ли это? Есть места где реально только мост и всё, съехать с одной дороги на другую низзя.
Впрочем, в ближайшее поиск пересечения делать не буду.
Подходящей функции в коде нету, нужно городить новую с учётом всех исключений (попадание точкой на другую дорогу).