Это был ответ на вопрос можно ли
Почитал код, насколько понял, осм уровень используется в сущности только для сравнения ‘важности’ дорог, что с чем соединять. Правильно?
Ну в общем, всё что загружается из полилиний .mp - попадает в обработчик. Либо это должны быть дороги, либо их не должно быть во входном файле. Фильтрация “не дорог” исходной задачей не предусмотрена.
Ржака.
Data0=(48.0127110415158,-0.094733338658369),(48.0128229903524,-9.46952344360793E-02)
GPSMapEdit такого просто не понимает. Исправил Пропатчил основную версию на гитхабе.
CompareRoadtype - оно про поглощение. Надо добавлять константу в группу HIGHWAY_*, детектировать её по 0x1b и добавлять её в функции GetHighwayType, GetType_by_Highway, GetClass_by_Highway и GetTopLevel_by_Highway
Ога, был баг в обработке превышения длины _link-а, исправил, на гитхабе тоже.
Однако даже с этим багом такого выброса у меня не наблюдалось. Какие параметры использовались?
У меня при EU-OVRV.mp от 2013.03.02 16:49:26 и выложенной мною версии mp_extsimp.bas в 130302.zip было всё нормально.
Обычно такой выброс происходит при глюке функции FindAiming, вычисляющей центроид развязки, когда она прицеливается по осевым линиям дорог при прямой дороге или слабом повороте и итеративный подбор уносит точку вбок.
Регулируется через параметр AngleLimit, передаваемый через CollapseJunctions2. AngleLimit - синус предельного угла, если все дороги сходятся под меньшим углом, то вместо итеративного прицеливания по осевым используется тупое среднее арифметическое, которое всегда внутри развязки, но мажет мимо осевых. AngleLimit=0.13 → 7.47 градуса. Если хотите задать 15 градусов, ставьте AngleLimit=0.26. При AngleLimit=1 всегда будет среднее арифметическое.
Этот артефакт - результат плохой параллельности двух направлений дорог. Даже на скрине видно как направления сходятся к нижнему краю.
Функцию JoinDirections3 от этого “заносит” и она делает приличный излом схлопнутой дороги. Рисунок
Потом JoinAcute ткнувшись в точку A определяет, что точка C близка к отрезку AB (76 метров) и при этом точка C близка к точке B (96 метров).
Оба эти расстояния меньше длины схлопывания (100 метров) и таким образом B и C можно схлопнуть в одну точку - D. AD таким образом становится тупиком.
ИМХО, надо выправлять параллельность. Либо поставить поменьше длину схлопывания (JoinDistance) - 1й параметр у JoinAcute.
JoinAcute занимается склеиванием близко лежаших отрезков. Находясь в точке A, алгоритм определяет отрезки AB и AC как лежащие достаточно близко для склеивания в один.
Ещё можно Дуглу-Пеккеру эпсилон увеличить, тогда оно этот выступ спилит. 30 метров должно хватить.
Параметры были подобраны, чтобы хорошо обрабатывать улицы и развязки.
Слишком глюкоопасно - теги начнут расставляться сами (выбрали один раз bridge и все дороги начнут делаться мостами). Для этого есть Alt-A и список недавних тегов (Shift-щелками можно добавить несколько)
Упрощалка дорог, разработанная OverQuantum и переписанная freeExec на java, исправно работает, уже не первый месяц, для получения обзорных карт разных стран и карты европейских маршрутов. Каких-то критических проблем пока не выявлено.
Как ни странно я сейчас использую оба варианта, и vb6 и java
Оба комрада от приза отказались, скорее всего в обозримом будущем приз будет назначен за какую-нибудь другую задачу:) Например, жизнь показала, что для еврообзорки нужна не только “упрощалка”, но и “латалка дыр”.
Об упрощалке, что было сделано и зачем оно нужно, я буду рассказывать в эти выходные на конференции SotM Baltic.
Сформулирую задачку, она несколько перекликается с упрощалкой но конечная цель - другая.
Хочется генерить атласы маршрута. Т.е. иметь возможность развернуть ту-же М10 в линию, сохранив километраж вдоль пути, информацию об одновейности/двухвейности, развязках, мостах, паромных переправах, наличии ограждения, прилегающих городах и пои. +Иметь возможность хотябы примерно пересчитывать относительный километраж - в широту долготу.
Если маршрут образует несколько подграфов (есть разрывы) выстраивать участки маршрута последовательно (Вычислить можно апроксимируя множество всех точек полилинией)
Вопрос с колььцевыми маршрутами - открыт.
На вход хотелось бы подавать osm/pbf
Для вывода хотелось бы подключать различные плагинчики.
Инструмент был бы весьма актуален для схем о.т. и длинных трасс/маршрутов.