UMGUM.COM (лучше) 

OpenStreetMap + срез страны или региона ( Получение среза данных по стране или региону из данных проекта OpenStreetMap. )

11 апреля 2012  (обновлено 2 ноября 2014)

OS: Linux Debian 6/7/8/9, Ubuntu 12/13/14, Fedora 24/25/26/27.

Где взять карты для навигатора "Garmin 60"? Можно купить, можно украсть, а можно воспользоваться картами проекта OpenStreetMap. Я уже писал заметку о том, как получить интересующие части общей карты и преобразовать их к формату "Garmin 60".

Можно, можно выдирать кусочки данных, но при активном использовании навигатора это надоедает довольно быстро. Хочется взять если и не всё сразу, то хотя-бы кусок побольше и "за раз". Конечно, такая возможность имеется. Её предоставляет сам проект OpenStreetMap, выкладывая в виде XML-файла с расширением ".osm" еженедельные срезы данных карты всей планеты (это окончательная версия всех меток, точек, линий, и отношений в базе данных) и ежедневные срезы изменений ("дельта"-файлы, они же - .diff) на ресурсе http://planet.openstreetmap.org/. Желающие могут скачать срез данных карты планеты, наложить на него изменения и воспользоваться результатом. Только вот результирующий файл получается великоват - более 200GB в распакованном виде. Ясно, что оперировать таким объёмом на мобильном устройстве невозможно ("Garmin 60" не поддерживает файлы объёмом более 2GB). Приходится удалять ненужные слои, атрибуты, примечания (энтузиасты, рисующие карты, порой ну уж очень детальны в своём творчестве) для облегчения. Опять-же, карта всего мира путешественнику с ручным навигатором совершенно не нужна, вполне можно ограничится фрагментом: страной или даже регионом. Работа нетривиальная, возьмётся за неё не каждый, но нашлись добрые люди, которые делают это за нас с завидной регулярностью уже не менее двух лет подряд, выкладывая "дампы" стран и регионов СНГ на сайте http://gis-lab.info/projects/osm_dump/.

В рамках этого проекта без названия генерируется автоматически обновляемые выгрузки данных "OpenStreetMap" участков территории бывшего СССР в форматах XML и PBF. На данный момент покрытие включает следующие страны: Армения, Азербайджан, Беларусь, Грузия, Киргизия, Казахстан, Литва, Латвия, Молдавия, Россия, Таджикистан, Туркмения, Украина, Узбекистан, Эстония. Для России нарезаются ещё и дампы регионов.

Для примера опишу, как я готовил себе карту на начало этого сезона.


С Павлодарской областью граничат следующие регионы России (их мы тоже скачаем, чтобы потом объединить с картой Казахстана):

Омская область;
Новосибирская область;
Алтайский край;
Алтайская республика (не граничит с Павлодарской областью, но "про запас" сведём и её).

Загружаем готовые срезы, изготовленные 1 Апреля 2012 года:

KZ: http://data.gis-lab.info/osm_dump/dump/latest/KZ.osm.bz2 (22MB)
RU-OMS: http://data.gis-lab.info/osm_dump/dump/latest/RU-OMS.osm.bz2 (11MB)
RU-NVS: http://data.gis-lab.info/osm_dump/dump/latest/RU-NVS.osm.bz2 (18MB)
RU-ALT: http://data.gis-lab.info/osm_dump/dump/latest/RU-ALT.osm.bz2 (10MB)
RU-AL: http://data.gis-lab.info/osm_dump/dump/latest/RU-AL.osm.bz2 (3MB)

Копируем полученные архивы во временную рабочую директорию:

$ cp ./*.osm.bz2 /tmp/make/

Распаковываем архивы (с удалением исходных):

$ bzip2 --decompress ./*.osm.bz2

Для конвертирования в формат поддерживаемый "Garmin 60" и объединения в один контейнер разрозненных файлов фрагментов карты следует воспользоваться утилитой "mkgmap" так, как это описано здесь.

Если в результате вместо русских букв на карте мы видим "крякозяблы" или символы "?" - значит утилите "mkgmap" не достаточно явно были даны указания о используемых "кодировках" и "транслитерации", в случае, если кодировка исходных данных не поддерживается целевым устройством. "Garmin 60" работает только с "8-битными" кодовыми таблицами, причём их набор ограничен производителем. В частности, по умолчанию поддержки русских кодовых таблиц (cp-1251) нет. В сети можно найти прошивки, доработанные энтузиастами из "официальной" до поддержки CP-1251 путём замещения другой кодовой таблицы (французской, вроде-бы). Такая прошивка сможет отобразить символы русского языка в соответствующей кодовой таблице, но с "официальной" прошивкой путь один - "транслитерация".

В утилите "mkgmap" режим "транслитерации" включается несколько абсурдно - "не использованием" ключа, который по смыслу написания вроде как должен наоборот включать таковую, ограничивая вывод символами ASCII. В общем, чтобы включить "транслитерацию" нужно не использовать ключ "latin1" в конфигурационном файле или командной строке вызова утилиты. Ежели захочется отключить "транслитерацию" и собрать карту с поддержкой определённой кодировки (cp-1251, например), то следует использовать опцию "latin1".

Утилита "mkgmap" содержит в своём составе специальную таблицу "транслитерации" русских (и не только) символов в символы ASCII, руководствуясь которой и перегоняет несовместимое с устройством в совместимое, что позволяет передать общий смысл надписей. Получается что-то вроде: "Улица Маршала Будёного" => "Ulitsa Marshala Bud`enogo". Вариант не для эстетов, конечно, но жить с этим можно.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )