Конвертер OSM -> MP

Asdert, спасибо.
Видимо, действительно только по примерам изучать :slight_smile:

На RoadID накладываются какие-то ограничения, так что их скорее всего придется нумеровать подряд
(то что делает, кстати, gpsmapedit)

osm2navit четырехпроходный,
после первого прохода надо резать ways на куски по всем нодам у которых число линков больше двух.
Также надо рекурсивно объединять куски по нодам у которых число линков равно двум (знаменитая проблема
нарезки линий в .rus и .ntm) и имя,тип,односторонность,etc. совпадают.
Вот для этой последней задачи я “готового” решения не знаю.

Есть еще одностороннее движение и toll.

По моему никакого приличного описания нет,
были только довольно туманные намеки в
http://cgpsmapper.com/download/RFormat_temp.zip

Запреты поворотов (ИМХО) это простая CSV таблица

way_from,node,way_to,time_start,time_end

и ее всегда можно просто присобачить к существующему .mp файлу.

Дело не столько в поддержке как таковой (она уже де-факто есть),
а в “database integrity”. Вот с этим будет тяжело, так что особо не надейтесь на potlatch и josm.

Класс дороги, односторонность, платность - это всё описывается в RouteParams.
Нумеровать RoadID - разумеется, подряд :slight_smile:
Скорее всего, это номер строки таблицы

ну так он же компилятор всё-таки, там совсем другие задачи

Ок, уточнил текст вверху ^^^

Тяжело отслеживать изменения
и вносить поправки не зная way_id → RoadID соответствия.
Ну а секция [NODES] в .mp
вообще не присутствует, что позорно для формата включающего
дорожный граф.

Будем надеяться на скорый osm2img :slight_smile:

usm78-gis,
у меня сейчас в mp родные NodeID и WayID прописаны в комментариях

про два прохода - это я слишком оптимистично сказанул… :slight_smile:
в osm у линий сначала задаётся список узлов, а тольго потом теги
поэтому проходов минимум три:

  1. среди всех линий выделить дороги
  2. на дорогах выделить узловые точки
  3. выдать данные в mp

пытаюсь выделить узловые точки для роутинга
столкнулся с такой штукой: см. WayID=17331468
интересно, как умудрились провести дорогу 20 раз (!) через одну и ту же точку??

2 liosha.
Нда. И в самом деле удивительная улица… Она рисовалась в потлахе 0.5 версии. А не в этой ли версии был глюк, когда создавались дубликаты объектов? Вполне возможно, что эта улица получилась объединением из двух версий одной улицы. А может и просто неудачно нарисовали…

P.S. Кстати, а ведь Red_rebel делал конвертер и у него уже была автогенерация роутингового графа. Может стоит выйти на него ради обмена опытом?

в общем, вот что пока получается… вечером выложу результат
до компиляции с роутингом ещё далеко - только в москве маппер выдал 500 самопересечений
может быть, потом сделаю фильтр

вопрос: а нужно ли узлы ставить на крайних точках дорог?

и кстати, если кому-то другие области нужно в MP, кроме Москвы, скажите нужный bbox :slight_smile:

; WayID = 4871028
; highway=secondary
[POLYLINE]
Type=0x04
Data0=(55.7240971,37.3995234), (55.7237002,37.3999852), (55.7229563,37.4008194),
(55.7190745,37.4014631), (55.7184605,37.4015833), (55.7162607,37.4020382),
(55.7161122,37.4021405), (55.7160059,37.4022006)
EndLevel=2
Label=ул.Толбухина

RoadID=5
RouteParams=1,4,0,0,0,0,0,0,0,0,0,0
Nod1=0,8482
Nod2=2,710
Nod3=4,86
Nod4=7,11829
[END]

Тольятти-Самарская Лука-Самара.
52.99073889885542,52.99073889885542,53.7130505181914,50.669608742885536

:slight_smile:

а где здесь что? :confused:
надо бы как в osmxapi - minlon,minlat,maxlon,maxlat

Блин, и вправду что то я не то намутил. Еще раз.
48.80791241225375,52.91980721216367,50.66704512942237,53.71334191715539

добавил в список :slight_smile:
текущий вариант всё там же: http://garminmapsearch.com/osm/mp/

Надо зачищать XML перед переработкой,
я вот ужо поправляю 455 ошибок прямо в ОСМ. И это без пересклейки ways в граф

$./scr-dupl < SPB-22052008.osm  | grep DUPLBUG | wc -l
455

Вот кусок скрипта (найден в wiki для конвертации в mapinfo)

awk -F\' 'BEGIN{prev=-1}
{
        if ($1 == "  <way id=")
        {
         prev=-1;
         way_id=$2;
        }
        if ($1 == "  </way>")
        {
         prev=-1;
        }
        if ($1 == "    <nd ref=")
        {
         if ($2 == prev) print "DUPLBUG: in line=",NR,"way_id=",way_id,"node1=",$2,"node2=",prev;
         if (prev != -1) print prev,$2
         prev=$2;
        }
}'

.csv файл хотелось бы поиметь для

http://forum.openstreetmap.org/viewtopic.php?id=632

Есть еще сдвоенные сегменты и другие топологические ошибки.

Да, я бы ставил, так как это более логично.

ИМХО, надо создавать только двухнодовые сегменты нарезая (в этом примере) на
три части (порядковый номер внутри полилинии не поправлен для простоты)

RoadID=51
RouteParams=1,4,0,0,0,0,0,0,0,0,0,0
Nod1=0,8482
Nod2=2,710
[END]
RoadID=52
RouteParams=1,4,0,0,0,0,0,0,0,0,0,0
Nod1=2,710
Nod2=4,86
[END]
RoadID=53
RouteParams=1,4,0,0,0,0,0,0,0,0,0,0
Nod1=4,86
Nod2=7,11829
[END]

Такую структуру гораздо проще отладить, самопересечения тут в принципе исключены (после DUPLBUG)

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

какой именно csv?