обнаружил баг: когда есть “вырожденные” дороги из одной точки, маппер вылетает по “access violation”
если их отфильтровывать, компиляция проходит, и роутинг в девайсе работает
Да была такая шутка у потлаха - дублировал дороги. Я это замечал только по енпонятно откуда взявшимся роутинговым узлам посередине дороги. Потом шел в ЖОСМ и правил.
У меня конвертор написан на “остором-С”. Таскает квадратиками данные с ОСМа и сохраняет в кеше. Пока внешнего настроечного файла нет и по слоям не бьет.
Хмм. Я вижу проблему только в кольцах (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>'
Добавил поиск и фильтрацию дупов точек, одноточечных линий и двухточечных полигонов
Все найденные ошибки теперь 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 теперь такого размера.