Ошибки при экспорте в навител

Сваял небольшой скрипт для проверки osm-файла на сабж
http://gpsmapsearch.com/osm/testnavitel.zip

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

сделал тестовый прогон на дампе Белоруссии - найдено 216 ошибок.
надо исправлять :slight_smile:

1641266 nodes and 52834 roads found
64869 cross-nodes, 92503 end-nodes
105089 nodes total
Error near (53.9489989,27.7490694), NodeIDs 281878192, 281878161
Error near (55.29277,29.99384), NodeIDs 306292020, 306292018
Error near (53.9463304,27.3968644), NodeIDs 311945053, 311942790, 311944969, 311945069
Error near (53.8928582,27.6880722), NodeIDs 262924667, 262924629
Error near (53.8739113,27.5767743), NodeIDs 297191089, 297200068
Error near (54.5096845,30.4388695), NodeIDs 331395096, 331393080
Error near (55.18175,29.94281), NodeIDs 306291952, 275182286
Error near (53.8701525,27.5796288), NodeIDs 297191153, 297191147
Error near (54.5207388,30.3680698), NodeIDs 331394341, 331394956
Error near (53.9171803,27.4559724), NodeIDs 276092443, 391206532
Error near (54.5075825,30.3721228), NodeIDs 331393229, 331395889
.....

на прошлой неделе mapedit выдавал 700 :slight_smile:

в мапедите надо как минимум отрубить привязку к сетке.

А смысл? Все равно при экспорте произойдет эта самая привязка.
Как раз наоборот, по этой привязке легко разобраться в способе его округления (если не хочется в код смотреть): наделать несколько точек с ±delta к сетке и посмотреть, где они в плюс округляться, а где в минус.

а это ещё вопрос, вылезет ли эта ошибка при экспорте, если не привязывать к сетке

А как можно без привязки к сетке перевести плавающие значения в 24 (или пусть даже 26) бит?
Там ведь координаты должны быть умножены на 2^(n-1)/180 (где n битность) единственно расхожнение - это отбрасывать дробную часть или округлять.

Впрочем Константин использует float, что и для 24 бит впритык, а для 26 откровенно мало… Вполне может ошибок округления наплодить. Так что надо расчитывать на 24 бита (2.4 метра) и не ставить точек ближе (особенно в одном way).

Прогнал скриптом дамп России (скрипт пришлось переделать на два прохода, а то памяти не хватало).
Округление сделал к 24 битам на координату.

testnavitel.pl russia.osm > ru-err.txt

Loading roads...          159985 roads found
Processing routing...     198797 cross-nodes, 227079 end-nodes
                          254539 nodes total
Loading necessary nodes...
Looking for errors...     1256 found
All done!

результат: http://gpsmapsearch.com/osm/ru-err.txt
если есть желающие поисправлять, могу сделать html со ссылками, только какого вида ссылки нужны?

Точность float - 25 bit (включая знак) // double - 54 bit

Ладно уговорил, пусть будет 1.2 м. :wink:
А для европейской части и честные 0.6. :stuck_out_tongue:
Хотя, если учесть некоторую дискретность представлений, т.к 90 (180, 360) далеко не степени двойки, погрешность может быть значительно выше. В общем, удивляет упертость автора в части перехода на double (если принять за данность, что Навител у него основная платформа).

Мне бы пригодились ссылки типа http://www.openstreetmap.org/edit?lat=59.8714638&lon=30.4000446&zoom=18
и
http://www.openstreetmap.org/browse/way/35703286 :slight_smile:

бегло посмотрел исходники мапедита.
продраться до округления, которое использует VerifyMap, пока не удалось

есть подозрения, что это GarminRoundPoint

        const double fCell = 360.f/(1UL << cBits);

        _pt.x = fCell*(fast_floor_d (_pt.x/fCell + .5f));
        _pt.y = fCell*(fast_floor_d (_pt.y/fCell + .5f));

но сейчас я вроде бы такое же округление и использую:

$acc = 24;
return int(0.5 + ($_[0]+180)/360*2**$acc));

Правлю по MapEdit’у. Картина неприятная - в основном приходится шевелить, либо сливать узлы, т.е. формальных ошибок в основном нет. У фиников приходится править тоже :slight_smile:

Прошла вторая итерация очистки :slight_smile: Надеюсь, скоро добью.
Кому не лень, посмотрите, pls., ошибки роутинга:
RelID=166548 FROM road does’n have VIA end node
RelID=33309 TO road does’n have VIA end node
Не могу одолеть :slight_smile:

highway=construction не обрабатывается

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

Питер готов :sunglasses: в смысле - экспортируется в Навител. Как уже обсуждалось, не все обнаруживаемые конвертором и GME Verify Map мешают экспорту, и наоборот - не все ошибки они находят. Пока буду следить за корректностью.

Поправил вчера Краснодар (на предмет удаления дублей нодов), но сегодня утром обнаружилась одна неисправленная ошибочка. Завтра может будет 0?
Кстати, наваял небольшой ХауТу для новичков (пошагово со скриншотами) как быстро в JOSM и в Merkaartor исправить дублирующиеся ноды по логфайлу errors-navitel.log
Нужен такой в ФАК?

Howto однозначно нужен и будет полезен.

А чего это Краснодар вчерашний? Я чего-то натворил?