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

This is a proposal for a set of tags and members making a Relation to represent a turn restriction

Таких дорог настолько мало, что их можно все пометить тэгом.

Вроде как в мире есть только 3-4 страны с такими дорогами ? :slight_smile:

Но это отношение, по крайней мере, находится в разделе “Established uses of Relations”. На мой взгляд, когда его вынесут на голосование, его полюбому заапрувят. Так что можно использовать отношение без боязни…

Вроде бы доделал назначение роутинговых параметров…
Попробую теперь довести до компиляции с роутингом хотя бы небольшой кусок территории вокруг дома.
Если получится - выложу конвертер :slight_smile:

Надо будет посмотреть, что делает вот этот скрипт:
http://trac.openstreetmap.org/browser/applications/utils/import/mp2osm/mp2osm_catmp.py
хотя не исключено, что он игнорирует запреты поворотов.

обнаружил баг: когда есть “вырожденные” дороги из одной точки, маппер вылетает по “access violation”
если их отфильтровывать, компиляция проходит, и роутинг в девайсе работает :sunglasses:

желающим потестить: http://garminmapsearch.com/osm/osm2mp.zip
конфиги лежат в http://garminmapsearch.com/osm/mp/
запускать osm2mp.pl in.osm > out.mp

Дорог из одной точки в “большом” СПб не обнаружил, зато есть вот такой топологический баг-кольцо,
где первый и последний нод совпадают:

 <way id='4454692' timestamp='2007-10-05T20:36:14Z'>
    <nd ref='25896343'/>
    <nd ref='25896344'/>
    <nd ref='25896345'/>
    <nd ref='25896346'/>
    <nd ref='25896343'/>
    <tag k='highway' v='residential'/>
  </way>

Надо разбираться, как быть…

Потестим :smiley:

такие “одноточечные” дороги при кропе появляются.
а кольца часто встречаются, буду думать, как бы их порезать…

osmxapi сливает ways целиком, при clip (по границам) надо будет ставить
флаги “внешних” нодов, иначе потом роутинг между областями не сделать.

Нацело поделить пополам, ничего лучшее в голову не приходит.

Нашел 55 “чистых” колец (т.е. прямо в непорезанном .osm)

дык вроде как в осм круги и полагается рисовать кольцами, не разрезая.

Да была такая шутка у потлаха - дублировал дороги. Я это замечал только по енпонятно откуда взявшимся роутинговым узлам посередине дороги. Потом шел в ЖОСМ и правил.
У меня конвертор написан на “остором-С”. Таскает квадратиками данные с ОСМа и сохраняет в кеше. Пока внешнего настроечного файла нет и по слоям не бьет.

Рисовать - да, но на кругах (обычно) больше одного въезда-выезда, поэтому это не проблема.

Добавим в конфиг? Домики:

building        yes                     p       0x13            0       0

А еще изменить. Я, совместно с домиками, рисую границы районов…

landuse         commercial              p       0x08            1       2
landuse         industrial              p       0x0c            1       2
landuse         retail                  p       0x08            1       2
landuse         residential             p       0x02            1       2

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

кстати, в потлахе можно найти объект по id?

; Road!  WayID = 23397249
; highway=primary
; FIX: this line should be broken at 2
; ERROR: WayID=23397249 seems to have self-crosses or dupes
[POLYLINE]
Type=0x02
EndLevel=3
Label=Обводное шоссе
DirIndicator=1
Data0=.....

; RoadID=1668
; RouteParams=3,4,1,0,0,0,0,0,0,0,0,0
; Nod1=0,839
; Nod2=1,3275
; Nod3=2,3746
; Nod4=3,3275
; Nod5=15,921
[END]

Можно еще Мурманскую область: 68.887109375, 33.04221875 - 69.062890625, 33.39378125

добавил в список :slight_smile:

теперь будет делаться попытка компиляции с роутингом (personal-версией маппера).

Спасибо!

Хмм. Я вижу проблему только в кольцах (start_node=end_node), все остальные вроде как
несложно порезать.
Вот бы еще автоматически объединить два way, касающихся в нероутинговом ноде и с совпадающими тэгами.

Было бы неплохо, но думаю что нет.
Я пользуюсь
./get_ways_by_list 2>/dev/null
и редактирую в JOSM

#!/bin/bash

if [ $# -ne 1 ]
then
        echo Usage: $0 waylist
        exit 1
fi

waylist=$1

if [ ! -f ${waylist} ]
then
        echo can not open waylist=${waylist}
        exit 1
fi


echo '<?xml version="1.0" encoding="UTF-8"?>'
echo '<osm version="0.5" generator="get_ways_by_list">'

for way_id in `cat ${waylist}`
do
rm -f way$$

curl "http://api.openstreetmap.org/api/0.5/way/${way_id}" |\
awk '{if ($1 != "<?xml" && $1 != "<osm" && $1 != "</osm>") print}' | tee way$$

awk -F\" '{if ($1 == "    <nd ref=") system("curl http://api.openstreetmap.org/api/0.5/node/"$2)}' way$$ |\
awk '{if ($1 != "<?xml" && $1 != "<osm" && $1 != "</osm>") print}'

rm -f way$$
done

echo '</osm>'

Так и до поиска с индексом скоро доберемся :smiley: