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

про два прохода - это я слишком оптимистично сказанул… :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?

Это только для начала, вот

$ ./scr-dupl < NOV-22052008.osm  | awk '{if ($1 != "DUPLBUG:") print }' | wc -l
221032
$ ./scr-dupl < NOV-22052008.osm  | awk '{if ($1 != "DUPLBUG:") print }' | sort | uniq | wc -l
220533

есть еще 499 дублированных сегментов (но это не только дороги, так что часть из них может быть
приемлема)

Который для mkgmap.

а я свой не делал, стандартным пользовался.

ok

Написал маленький скрипт для автозачистки rmdupl.
Кто-то похоже очень упорно по 5-6 раз кликал :slight_smile:

--- XXX1.osm    2008-05-23 00:53:35.000000000 +0400
+++ XXX2.osm    2008-05-23 00:56:30.000000000 +0400
-    <nd ref="253426719"/>
-    <nd ref="253426719"/>
-    <nd ref="253426356"/>
-    <nd ref="253426356"/>
-    <nd ref="253426356"/>
     <nd ref="253426356"/>
     <nd ref="253427443"/>
-    <nd ref="253427443"/>
-    <nd ref="253427051"/>
-    <nd ref="253427051"/>
-    <nd ref="253427051"/>
-    <nd ref="253427051"/>

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

Какие будут предложения, как назначать RouteParams?
и из каких тегов брать информацию о запретах?

Из раздела Restrictions.
Односторонняя - oneway=yes.
Платная - toll=yes.
автомобилей - motorcar=no
автобусов - psv=no
пешеходов - foot=no
велосипедов - bicycle=no
грузовиков - hgv=no и goods=no.
служб доставки, возможно, goods=no.

Класс дороги.
0 - Residential/Alley/Unpaved/Track
1 - Rounabout/Collector
2 - Arterial/Other highway
3 - Principal highway
4 - Major highway/Ramp

Скоростные ограничения.
0 - 5 км/ч
1 - 20 км/ч
2 - 40 км/ч
3 - 60 км/ч
4 - 80 км/ч
5 - 90 км/ч
6 - 110 км/ч
7 - no limit

Таким образом класс дороги стоит выбирать из типа дороги. А скорость. Ну по умолчанию 60 для обычных дорог, 90 - для major highway, либо, если есть, из тэга maxspeed.

пока дефолты сделал такие:

highway         bridleway               r       0x16            0       1       0,1,0,0,0,1,1,1,1,0,0,1
highway         bus_guideway           
highway         construction           
highway         cycleway                r       0x16            0       1       0,1,0,0,0,1,1,1,1,0,0,1
highway         footway                 r       0x16            0       0       0,0,0,0,0,1,1,1,1,0,0,1
highway         living_street           r       0x07            0       1       0,1,0,0,0,0,0,0,0,0,0,0
highway         motorway                r       0x01            0       4       4,6,1,0,0,0,0,0,0,0,0,0     
highway         motorway_link           r       0x0B            0       2       4,3,1,0,0,0,0,0,0,0,0,0
highway         pedestrian              r       0x07            0       1       0,0,0,0,0,0,0,1,0,0,0,0            
highway         primary                 r       0x02            0       3       3,4,0,0,0,0,0,0,0,0,0,0
highway         primary_link            r       0x03            0       1       3,3,0,0,0,0,0,0,0,0,0,0
highway         residential             r       0x06            0       1       0,2,0,0,0,0,0,0,0,0,0,0
highway         secondary               r       0x04            0       2       2,3,0,0,0,0,0,0,0,0,0,0
highway         service                 r       0x07            0       0       0,1,0,0,0,0,0,0,0,0,0,0
highway         steps                   r       0x16            0       0       0,0,0,0,1,1,1,1,1,0,1,1
highway         tertiary                r       0x05            0       1       1,3,0,0,0,0,0,0,0,0,0,0
highway         track                   r       0x16            0       0       0,1,0,0,0,0,0,1,0,0,0,0
highway         trunk                   r       0x02            0       4       3,5,0,0,0,0,0,0,0,0,0,0
highway         trunk_link              r       0x03            0       2       3,3,0,0,0,0,0,0,0,0,0,0
highway         unclassified            r       0x06            0       1       1,2,0,0,0,0,0,0,0,0,0,0

highway         unsurfaced              r       0x0a            0       1       0,1,0,0,0,0,0,0,0,0,0,0

http://wiki.openstreetmap.org/index.php/Relations
запреты поворотов вроде бы как уже в списке принятых