Квантовый Ёжик (overquantum) wrote,
Квантовый Ёжик
overquantum

Category:
  • Music:

OpenStreetMap PlanetLowZoom

Сегодня речь пойдёт о создании обзорной карты мира на основании данных OpenStreetMap.

Хорошо иметь GPS-карты городов, областей, стран. Однако иногда нужна карта всей планеты.
- В самолёте можно отслеживать, над чем сейчас пролетаешь.
- При неожиданной поездке в новую страну - не останешься без карты.
- Ну и конечно же функция "ГДЕ ЭТО Я?!" (на случай возвращения из инопланетного плена, открытия в себе способностей к телепортации или после жёсткой пьянки ;)

В проекте OpenStreetMap информации накоплено очень много, выкачать и подготовить полную карту всего мира - задача весьма нетривиальная. Да и итоговый объём такой карты будет исчисляться гигабайтами, что не всем удобно, как по скорости работы, так и по потреблению памяти.
Существенно более удобный вариант - обзорная карта, включающая в себя крупные города, границы стран, основные объекты рельефа, основные транспортные магистрали. Такая карта позволит определить страну, район, направление до ближайшего города и возможные препятствия.

Порывшись в интернетах, я обнаружил, что готовой обзорной карты из OSM данных нигде не выложено.
Соответственно, решил сделать самостоятельно.
При выборе уровня детализации, я решил исходить из предела в 16 мегабайт, установленного для 1 файла карты, в программе Russa, которой пользуюсь. Сколько влезет в 16М, столько и сделаю.

В качестве источника данных был выбран XAPI. За подсказку спасибо форуму OSM и участнику Mikado в частности.
Перечень интересующих меня объектов был таким:
- Границы стран
- Города - столицы и чуть помельче
- Основные автодороги
- Аэропорты
- Горы, реки, озёра
- Береговая линия, небольшие острова
Однако, в процессе скачивания данных через XAPI, выяснилось следующее:
1) Береговая линия - та ещё проблем OSM. Было решено взять стороннюю информацию - TM_WORLD_BORDERS-0.2.zip с mappinghacks.com.
2) Реки и озёра прорисованы настолько детально, что выборка по любому тэгу занимает больше 1ГБ. Было решено пока отказаться от водоёмов.
3) Дороги регионального значения (highway=primary) не скачались из-за предела XAPI в 1000000 узлов. Было решено исключить их.
4) Прочие главные дороги (motorway и trunk) все разорваны - в городах они становятся улицами и т.п. Общий их объём около 1.5 ГБ. Было решено оптимизировать их, чтобы поменьше они занимали.
5) В 16М можно умять и сёла (place=village)
6) osm2mp не справляется с 1 выборкой дорог по всему миру, ибо 32-битный и упирается 2ГБ на 600МБ .osm.
В итоге дороги разрезаны по Y=-32 (32 градуса западной долготы) с помощью splitter-а

В итоге в обзорную карты вошли следующие выборки из XAPI:
/node[place=town]
/node[place=city]
/node[place=village]
/node[natural=water]
/node[natural=wetland]
/node[natural=volcano]
/node[natural=peak]
/node[place=locality]
/node[place=region]
/node[place=country]
/node[place=island]
/node[place=continent]
/node[place=airport]
/node[aeroway=aerodrome]
/way[admin_level=5]
/way[admin_level=4]
/way[admin_level=3]
/way[admin_level=2]
/way[highway=motorway]
/way[highway=trunk]
/way[highway=motorway_link]
/way[highway=trunk_link]
/way[place=city]
/way[place=town]
/way[place=island]

Все way были оптимизированы алгоритмом Дугласа-Пекера:
1) Дороги (highway) - с epsilon=0.03
2) Границы стран и областей (admin_level) - с epsilon=0.01
3) Границы городов и островов (place) - с epsilon=0.005
4) Береговая линия - с epsilon=0.005 для уровней 0-3 и с epsilon=0.3 для уровня 4.
Более подробную информацию о тэгах можно посмотреть каталоге Google Docs (см. ниже).

Разрезка дорог в .osm выполнена с помощью splitter.
Конвертация из .osm в .mp - с помощью osm2mp 0.80b
Оптимизация .mp файлов - самодельной программой mp_optimize. Исходник основного модуля (на VB 6.0) доступен в каталоге Google Docs (см. ниже).
Конвертация из .mp в .rus - с помощью GPSMapEdit

UPD 2013-10-11 Это старая версия карты, рекомендую использовать следующую. Если всё-таки нужна старая - см. ссылку в комментарии.
(Каталог в Google Docs с результатами, таблицами и т.п.)
1) PlanetLowZoom_100123_REL1.rus - карта для Russa
2) PlanetLowZoom_100123_REL1_mp.rar - упакованная карта в .mp (145МБ без упаковки)
3) mp_optimize.frm - Исходник основного модуля mp_optimize
4) "OpenStreetMap PlanetLowZoom Tags" - таблица с информацией о тэгах. Колонка U ("REL1") - про текущий релиз карты.

Участник Zkir на аналогичных принципах подготовил обзорную карту России - выложена на osm-russa.narod.ru

История обсуждения обзорной карты мира на русскоязычном форуме OpenStreetMap
Tags: do_it_myself, gps, maps, openstreetmap, planet, russa
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 1 comment