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

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

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

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

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:

Добавил поиск и фильтрацию дупов точек, одноточечных линий и двухточечных полигонов :slight_smile:
Все найденные ошибки теперь grep-ятся в файл errors.log

; ERROR: WayID=22745318 has dupes
; ERROR: WayID=22771488 has self-intersections
; ERROR: WayID=22873079 area has too few nodes
; ERROR: WayID=22984864 has dupes

Конвертер работает не с файлами .osm, а с живой базой, с которой скачивает данные? Или просто формат сделан похожим?

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

  • либо обеспечить устойчивую работу основного сервера OSM, с которого все время будут качаться гигабайты данных (что вряд ли понравится его администраторам),
  • либо поднимать копию базы на сервере с конвертером, через osmosis заливать туда diff-файлы и работать с ней.

конвертер работает с файлом OSM, но есть отдельный скрипт, который по крону раз в сутки тянет текущие данные по osmxapi, конвертирует и выкладывает на ftp. вот ему-то bbox и нужен

сейчас всё это запускается на моём домашнем компе.
москва в .osm весит примерно 27 мегов, всё остальное ещё меньше, так что о гигабайтах речи не идёт

Понятно. Тут OSMXAPI используется просто для ускорения процесса, чтобы не резать planet.osm, выделяя из него необходимые участки?

Это если говорить о России. А если иметь в виду использование конвертера для всех пользователей OSM, то обзорные карты по странам, плюс общая по Европе/США/и т.д., плюс карты городов и весей потянут на много. Не зря же planet.osm теперь такого размера.

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

Карты Европы можно взять порезанные здесь http://download.geofabrik.de/osm/europe
Для переработки же полного planet.osm проще модифицировать osm2pgsql, а не возиться с простыми
перл-парсерами.

Количество “XML мусора” там очень даже внушительно.

По моему это живая postgis база, которая пополняется (в почти реальном времени) диффами из основной mysql базы.

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

Протестировал конвертер на странах Европы

           Исходный   Результат    Время     
            размер       MP      конвертации

Польша      130 Mb     32 Mb        1:25
Италия      199 Mb     52 Mb        2:35
Франция     393 Mb    105 Mb        5:00
Англия      948 Mb    292 Mb       10:40

машинка Athlon 2600, 1.2 Gb, WinXP

результат могу выложить, в принципе, но мапедит даже Польшу открывает 10 минут

???, ???, ???: ??? .osm ? .img ? ??? mkgmap. ??? ??? GPSMapEdit ? .nm2 ??? «???».

??? ???, ??? ???. ?? ??? ???. :frowning: ??? ? ??? ?? ??? ??? ??? ??? ??? ??? ??? ???

?) mkgmap ?? ??? ??? ???. ? ?? ??? ???
?) ??? ??? ? mkgmap ? ???, ??? ?? ??? ??? ??? ?? img (? ?? ??? ???)