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

Да. Хотя проскакивала информация, что дублирующиеся точки отсеиваются на стадии upload, но не уверен.
В JOSM дублирующиеся точки треков появляются если загружать какой-то участок дважды (например перекрывающиеся тайлы).

В Казахстане навалом таких транков, которые в реальности две раздельные встречные полосы, а отрисованы конвертированным треком.

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

Ну как, кто-нить переделал мою прогу на java-у? :slight_smile:

Я переделываю, но пока где-то 50% переписал. Плюс проблема в том, что мне негде подебажить твой исходник на ВБ6 :frowning:

От источника, надёжного чуть менее чем полностью, :slight_smile: я слышал про такую штуку как vb6 portable

Что, и на линухах с arm’ом запустится? :slight_smile:

portable не мой, я только разместил объяву :slight_smile:

Ага, отлично, попробовал - работает. Теперь можно заняться рефакторингом сразу, а то сначала я хотел полностью переписать.

По задаче упрощения дорожного графа))

Смог посмотреть работу OverQuantum только сегодня.

Сразу гладко ничего не бывает. Поставил vb-шную прогу в процесс (для обзорной карты РФ), но на результат работы ситигидовский конвертор ругается:
*** error: router graph containes degenerated edge(s)

Похоже на какой-то косяк в дорожном графе. Надо искать в чем именно.

Вопрос freeExec, как там переписывание на java?

Где-то тут: https://github.com/freeExec/mp_extsimp/commits/vb-to-java

Ба, работа кипит) Хотелось бы услышать оценки, когда ожидать результат, потому что нужно что-то уже решать с победителем :slight_smile:

По поводу проблем vb-шной версии.

Результаты проверки графа в gpsmapedit:

Такого разумеется быть не должно. Особенно слишком близких узлов. Для конвертера это критическая ошибка.

Вот исходник карты:
http://peirce.gis-lab.ru/misc/bugs.mp_extsimp/001/RU-OVRV.roads.zip

Upd. поправил вручную “слишком близкие узлы”, карта собралась. Так что нужно править алгоритм, чтобы он такого не допускал.

Ну могу предложить тупо схлопывать рёбра длины меньше X метров. Достану из чулана функцию CollapseJunctions1 :slight_smile:
Обозначьте значение X. У меня GPSmapedit находит 6 проблем при 2.3 м (3 со скрина + 3 других, на N57.04 - не находит).

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

Я даже не знаю, какое там должно быть значение. :slight_smile: Сделай пока три метра, и константу, чтобы можно было поправить и эксперементировать :slight_smile:

Это можно оставить пока. Мы в осм с этим особо не боремся, и в исходных mp для упрощения такое, как мы видим, тоже встречается.

Так, если она стала востребована, я немного поднажму.
По коду я добрался до JoinDirections3, по числу строк где-то ~50%. Но там наткнулся на проблему, т.к. в java идут операции с двойной точностью, то разница нарастает и в один прекрасный момент в vb-шном коде точка попадает в границы, а у меня нет. Именно на этом шаге дальше происходит зацикливание :frowning:

Зацикливание чего происходит? Всего алгоритма? Разница в 1 точку к такому приводить не должна.
Результат JoinDirections3 в целом зависит даже от порядка расположения точек в массиве Nodes.

Зацикливание идёт на метку lSkipNode2:
Эта getNodeInBboxByCluster выдаёт одни и те же 6 или около того точек, снова и снова. Возможно да, косяк в их первоначальном состоянии. Я пытался сравнивать точки по координатам, но из-за повышенной точности расчётов отличия начинаются в 5-6 знаках и однозначно сопоставить точки не удаётся. Следующей идеей у меня добавить поле с каким нибудь хешем, но пока не реализовал.

Косяк либо в цепочке ClustersChain, либо про записи ClustersFindLastNode/ClustersFindLastCluster. При правильной работе getNodeInBboxByCluster не может второй раз выдать ту же точку.
Округление тут ни при чём, ИМХО.

Округление тут играет злую шутку когда я начинаю сравнивать результаты работы на VB и Java, и одна из точек выпадает у меня из BBox и следовательно дальше идёт рассинхронизация и я не могу сравнивать результаты :frowning: Хм… что-то я не подумал, надо взять другой какой нибудь файл, там возможно моя ошибка всплывёт в другом месте.

Даешь эталонные тесты!

может, так?
if (a1==a2) →
double eps=1e-6;
if (Math.abs(a1-a2)<eps) {…}

Лучше поделитесь MP файлами, а то областные слишком большие для тестирования.