Инструкция по изготовлению карт для навигаторов Гармин, по данным с проекта openstreetmap.
Иструкция будет включать в себя следующие разделы:
1. Необходимые программы
2. Получение .osm файла и компиляция .mp файла
3. Компиляция .img файла
4. Регистрация в MapSource, заливка файла в прибор
Чтобы всё было наглядно по шагам пройдусь, по этапам компиляции карты Кубы.
Проект openstreetmap (далее OSM) представляет собой свободно распространяемую карту мира, которая делается интузиастами на добровольных началах. Причем каждый может самостоятельно рисовать карты какой-нибудь местности, а может просто выложить свои треки (к примеру, автомобильные), чтобы другие люди на основании данных треков создали или подредактировали существующую карту данной местности.
На данные проект я натолкнулся, когда пытался найти нормальные карты Чили в прошлом году. Немного разобравшись – понял, что теперь сам могу себе делать карты любого куска Земли.
Основной сайт проекта http://www.openstreetmap.org и именно с данного сайта мы будем брать данные для нашей будущей карты.
Для генерации карты нам потребуется установить некое программное обеспечение на наш компьютер. Будем считать, что на компьютере у нас установлена хотя бы Windows XP.
Необходимые программы.
На самом деле можно дальше ничего не читать, а пройти по ссылке http://downloads.cloudmade.com/ и там скачать себе готовую карту для Гармин-навигатора.
Но! Во-первых, мы хотим быть самостоятельными, во-вторых, мы хотим иметь самую свежую карту (а не 2-х - 3-х месячной давности) и, в третьих, мы хотим иметь карту не только в приборе, но и на компьютере в программе MapSource для прокладки планируемых маршрутов, удобного обзора местности да и просто, чтобы наметить интересующие нас точки, да и я могу хотеть иметь сразу в навигаторе карту Перу, Эквадора и о.Пасхи, а таких сборных солянок в интернете Вы врядли отыщите - придётся иметь отлельную SD карту с Перу, отдельную с Эквадором и отдельную с Чили (некоторые приборы не поддерживают несколько карт на одной SD-карте).
Нам надо установить на своём компьютере следующее:
Для работы скрипта osm2mp нам понадобится установить Active Perl и сам скрипт с конфигурационными файлами по вот этой инструкции: http://wiki.openstreetmap.org/wiki/RU:O ... B5_Windows
Далее нам понадобится cgpsmapper http://cgpsmapper.com/buy.htm, не лишней будет программа MapSetToolKit.exe и сама программа MapSource
Все эти программы без труда ищутся в поисковиках. Все люди взрослые и где искать «дружелюбные» версии программ знаете сами.
В итоге, все перечисленные программы мы отыскали и установили, Perl настроили.
Получение .osm файла и компиляция .mp файла
Опять же .osm файл можно скачать с разных серверов с того же упоминаемого ранее http://downloads.cloudmade.com/ или вот здесь кучу других вариантов посмотреть: http://wiki.openstreetmap.org/wiki/Planet.osm
Но опять же, хочется иметь самые свежие карты.
Итак, заходим на openstreetmap.org и ищем там о.Куба
Щелкаем на закрадку «Экспорт» и выделяем прямоугольник, чтобы вошёл весь остров с территориальными водами. К сожалению, прямо с сайта мы выкачать всю Кубу не сможем – Вам скажут, что очень большой по площади кусок выбрали. Посему от данного окна нам нужны только границы «прямоугольника» -85.6, 19.1, -73.67, 23.88
Это значение широты и долготы этих границ.
Далее.
Не интеллигентный человек так бы и сгенерил «прямоугольную карту – вместе с огрызками Багамских островов, которые немного попали в наш «прямоугольник». Но мы люди воспитанные и мы понимаем, что карта Кубы должна быть ограничена территориальными водами! Где взять информацию об ограничивающем полигоне территориальных вод? Да на том же openstreetmap.org !!!
Идём на закладку «Карта», в правом верхнем углу щёлкаем по плюсику, в открывшемся окне отмечаем галочкой «Данные».
Теперь увеличиваем масштаб, чтобы остался только кусок государственной границы (масштаб должен быть довольно большим):
Слева появилось «Линия 39521823». О! Щелкаем по номеру линии и выбираем «Подробности».
Вот. На самом деле, данный экран нам говорит, что эта линия входит в отношение «Куба» и «Пинар дель Рио» (это провинция в составе Кубы). Нас интересует отношение «Куба» - номер этого отношения 307833 (запомним это число!). Щёлкнем по нему, чтобы проверить. Да, это то, что нам нужно:
Люди с пытливым умом сразу догадались, что подобным образом можно отыскать номер отношения «граница провинции Пинар дель Рио». И они правы! в принципе можно делать карту отдельной провинции. Тоже справедливо и в "бОльшую" сторону - например для границы континента.
Теперь в каталоге OSM2MP (а мы скачали и установили данный скрипт) делаем bat-файл (назовём его cuba.bat) следующего содержания:
- Код: Выделить всё
getbound.pl 307833 -o cuba.poly -onering
osmget.pl -85.6,19.1,-73.67,23.88 > draft.osm
osmsort.pl draft.osm > cuba.osm
osm2mp.pl --mapid=88880053 --defaultcountry=CU --countrylist=iso-3166-1-a2-en.txt --disableuturns --poiregion --shorelines --waterback --codepage=1252 --bpoly=cuba.poly cuba.osm > cb.mp
Не интеллигентные люди, которые не хотят заморачиваться границами территориальных вод могут сделать так:
- Код: Выделить всё
osmget.pl -85.6,19.1,-73.67,23.88 > draft.osm
osmsort.pl draft.osm > cuba.osm
osm2mp.pl --mapid=88880053 --defaultcountry=CU --countrylist=iso-3166-1-a2-en.txt --disableuturns --poiregion --shorelines --waterback --codepage=1252 --bbox=-85.6,19.1,-73.67,23.88 cuba.osm > cb.mp
Немного поясню.
В первом примере сначала по номеру отношения «Куба» вытаскивается .poly файл (по номеру нужного отношения!), который просто представляет собой замкнутый полигон с координатами узлов – это и есть морская граница Кубы. Файл cuba.poly создастся у Вас в текущем каталоге – можете его посмотреть. В принципе, при повторном запуске этого bat-файла данную строку можно закоментировать – границы государств меняются не часто.
Потом скрипт osmget вытаскивает данные для соответствующего «прямоугольника». Вот здесь, на самом деле, лучше разобраться с osmosis и planet.osm (Но уж больно большой файлище – не красиво), а ещё лучше разобраться с загрузкой данных osm на локальный PostgreSQL сервер… Тогда тянуть данные можно прямо локально и не «прямоугольником», а сразу для границы определённого «отношения» - poly. Может кто разберётся – и выложит инструкцию?
Да! Конечно если Вы скачали osm-файл с того же http://downloads.cloudmade.com/, то Вам не надо вытягивать данные osmget’ом – Вам осталось только запустить скрипт osm2mp.
Опции --shorelines --waterback обязательны, если Вы генерите карту острова, полуострова или прибрежной полосы, иначе на Вашей карте ограничивать остров будет не вода, а суша. Если Вы Делаете карту окрестностей Мачу-Пикчу (т.е. моря на ней нет), то данные опции надо убрать!
--poly и --bbox - это полигон и "прямоугольник" по которому будет обрезана карта, т.е. проще говоря границы карты.
Mapid – это некий номер Вашей карты. Особо ни на что не влияет, но чтобы не путаться, лучше завести некую систему. Я стараюсь придерживаться такой системы 8888, а затем телефонный код страны или страны и провинции. 88880053 – Куба, 88880056 – Чили, 88885665 – Чили, провинция ЛосЛагос.
В результате работы данного скрипта (пока он работает, Вы успеете попить кофе) у Вас появится файлик cb.mp – это карта Кубы в «польском» формате. Эту карту уже понимает GPSMapEdit – можете в нём карту посмотреть, проверить, наложив космические снимки ГуглМапс, карту «на вшивость».
Компиляция .img файла
Теперь надо откомпилить карту в гарминовском формате img.
В каталоге, куда установили cgpsmapper, создаём подкаталог Cuba и создаём там файл пусть BildMap.bat
- Код: Выделить всё
del *.img
del *.idx
del *.reg
del *.tdb
del *.mdr
del *.mdx
call .\..\cgpsmapper -e ac cb.mp
call .\..\cpreview pv.txt
call .\..\cgpsmapper Cuba.mp
echo You can add custom TYP definition to the registry to see modification of extended types
pause
Также там создаём файл pv.txt
- Код: Выделить всё
[Map]
FileName=Cuba
MapVersion=080
ProductCode=1
;Color=32
CodePage=1252
Levels=2
Level0=14
Level1=13
Zoom0=5
Zoom1=6
Copy1=http://openstreetmap.org/
Copy2=Vasya Pupkin
MapsourceName=CubaOSM
MapSetName=CubaOSM
CDSetName=CubaOSM
[End-Map]
;
[Files]
img=88880053.img
[End-Files]
Кладём в данный каталог наш cb.mp и запускаем BildMap.bat
В результает работы у нас появится файл 88880053.img – это и есть карта Кубы для МапСоурсе!
Выкачиваем последний osm.typ файл http://osm2mp.googlecode.com/svn/trunk/osm2mp/osm.typ
В принципе, тут кому как нравится, в сети можно поискать альтернативные typ файлы, разница есть – цвет заливки национальных парков, лесов, пляжей, значки немного разные – оставляю для самостоятельных экспериментов.
Далее можно самостоятельно прописать в реджестри Виндовс строки соответствующие данной карте, чтобы в МапСоурсе появился новый МапСет, но можно сделать проще.
Запускаем свободно распространяемую программу MapSetToolKit, выбираем нашу карту, typ-файл, и запускаем, не забыв поставить галочку «Instal in MapSource»
Появится окошко, что FID карты не соответсвует FIDу typ-файла – отвечаем “Да” – программа сама всё сделает.
После отработки MapSetToolKit, запускаем MapSource… Мы сделали это! Ура!
Можем рисовать маршруты, искать точки, гостиницы и заливать карту в наш прибор или просто на флэшку, чтобы залить в прибор после. На флэшку, понятное дело зальётся готовый "контейнер" gmapsupp.img
Известные проблемы.
Ко мне обращались два человека у которых были зависания GarminTX на Нокиах под Симбианом с этими картами. Вылечилось таким образом. Полученные mp файл я загружал в GPSMapEdit, ничего не менял, просто «Сохранял его как…» и далее компилил в .img уже новый «сохранённый как» файл. Зависания прекращались.
У меня не получилось osmget’ом вытащить большие куски – Например Перу целиком. Думаю в феврале разберусь с osmosis’ом… дополню инструкцию. На самом деле мешает не лень природная, а World of Tanks
Немного переработав инструкцию также можно генерить карты для Навитела.
Если есть вопросы отвечу.
Для «Спасибо» есть плюсик под аватаркой.