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

Ммм … А текущий исходный код где можно увидеть? И структуру базы неплохо было бы посмотреть.

https://github.com/openstreetmap/openstreetmap-website
http://wiki.openstreetmap.org/wiki/Rails_port/Database_schema

Жаль … с рельсами не работал :frowning:

Что-то мне кажется, что стягивать нужно не в точку, а в отрезок. А с отрезком поступать уже в соответствии с выбранным масштабом, - возможно, стягивать в точку.

Постановка задачи - развязки стянуть в точки.

Постараюсь ответить, как смогу. Если бы я мог строго формализовать эту задачу, наверно она была бы уже решена :slight_smile:

Да, можно. Перед секцией в мп есть комментарий, в котором сидит исходный тег. (это стандартная выдача osm2mp.pl)

; WayID = 145406054:0
; highway = tertiary
[POLYLINE]
Type=0x05
...

развязки можно узнать и по типу в мп - 0x08.

То и значит. Карта должна быть пригодной для рутинга. Например, можно строить маршруты между городами.

Да, можно объединять. Что делать со скоростью - усреднять, устанавливая разумное значение скорости для данного класса дороги.

Можно не париться, для начала. Тем не менее, меня интересует автомобильная карта. :slight_smile:

Да, улицы в городе желательно оставлять однонаправленными, если они уцелели после генерализации.

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

Нет, именно в точку.

Вот была например развязка МКАД и Ярославского шоссе:
http://www.openstreetmap.org/?lat=55.88275&lon=37.72682&zoom=15&layers=M

А получиться должен простой перекресток:
http://peirce.gis-lab.ru/img/gen_junk.png

а на выходе должен получится граф с запретами или без?
если двухвейную дорогу преобразовать в одновейную, то могут быть запрещенные повоторы
http://s018.radikal.ru/i525/1210/6a/13ebc194290b.png

Zkir,

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

(это стандартная выдача osm2mp.pl)
На это я и рассчитывал. Just as planned :slight_smile:

Линк - это однозначно развязка, которую нужно стягивать. Конечно, в исходных данных может быть ошибочно присвоенный *_link, но я думаю это на задачу не влияет.
Лады, буду стягивать. В крайнем случае добавим проверку длины _link.

Это хорошее замечание. Конечно, я намешал условий из нескольких задач. :slight_smile:

Если брать строго формальное преобразование двухвеек в одновейки, то могут возникнуть запреты. Если посмотреть на цель- построение обзорной карты России (см. задачу 5), то в ней никаких запретов быть не может. Если вдруг возникли запреты, это значит что уровень генерализации выбран неверно.

А можно центральную часть этого рисунка более крупно? Не совсем понятно, что именно должно получиться.

Мне кажется, первое, что надо сделать, это удостовериться, что те дороги, которые связаны link’ом, - пересекаются. Желательно поблизости (уже на этом этапе можно сравнивать расстояние от link’а до точки пересечения и с длиной самого линка).
А дальше - определение точки пересечения, включение ее в граф (вместе со всеми необходимыми преобразованиями путей - ребер дорожного графа) и удаление линков.

Одна точка там. Грубо говоря получиться должно 2-4 вея+1нода где они пересекаются/стыкуются.

По логике, так оно и должно быть, но крупная точка с неровными краями меня немного смутила.

Извините, если эта мысль уже звучала, но удаление всех _link, стягивание двухвеек в одновейки и принудительное пересечение разных уровней не решают обсуждаемую проблему?

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

http://www.openstreetmap.org/?lat=56.27037&lon=38.19361&zoom=16&layers=M
Вот такое типичное место - пересечение тут не нужно.

Ну, и любую мысль еще нужно воплотить в коде.

Нет.
http://www.openstreetmap.org/?lat=56.271&lon=38.194&zoom=15&layers=M

PS. Посмотрел предыдущий пост, - как будто сговорились. На самом деле, просто это район, который оба хорошо знаем.

PPS. Кстати, как такая развязка с точки зрения корректности генерализации с помощью объединения веев?
http://www.openstreetmap.org/?lat=49.262&lon=35.513&zoom=15&layers=M
Еще совсем недавно та линия, что сейчас подписана ref=“Р-51”, имела в OSM ref=“М-18б Р 51”.

Вот поэтому в Bosch и задумались о ручном хинтинге.

Подсунул коду (развязки пока не стягивает, только геометрию цепочек срубает).
Если без residental-ов, то узла не делает. :slight_smile: Дуйте через Птицеград, говорит.

Спасибо за тест-вектор :slight_smile:
Медитирую над Таганской площадью http://osm.org/go/0t2wPOcvO– и Шарлем де Голля http://osm.org/go/0BPIBrF~A:slight_smile:

http://openmarkers.com/ - как один из вариантов ответа на задачу №4