Создание карт для Garmin GPS

Пре­дис­ло­вие

В ра­йо­не 2005 го­да друг на­учил ме­ня ри­со­вать кар­ты для GPS. Тог­да это был Боль­шой-Боль­шой Сек­рет, по­то­му что ни­ка­ких OpenStreetMap не су­щест­во­ва­ло, Google Maps был в далёком про­ек­те, а лю­ди на со­зда­нии ка­рт для Garmin GPS стро­или це­лые биз­не­сы. Типич­ный на­бор со­фта для со­зда­ния ка­рт вы­гля­дел при­мер­но так: MapInfo Pro, cgpsmapper, globalmapper, mapedit и чёрт зна­ет что ещё. В ка­чест­ве ис­точ­ни­ка дан­ных ис­поль­зо­вал­ся на­ло­жен­ный слой Геншта­ба или дру­гой со­ветской кар­ты, спут­ни­ко­вые мно­го­ди­апа­зон­ные сним­ки LandSat (от­лич­ная шту­ка, кс­та­ти) и дан­ные вы­сот из SRTM. С тех пор в IT сме­ни­лось не­сколь­ко эпох и ри­со­ва­ние ка­рт ста­ло де­ятель­ностью, до­ступ­ной прак­ти­чес­ки каж­до­му, «без ре­гис­тра­ции и SMS».

Две не­де­ли на­зад имел со­мни­тель­ное удо­вольст­вие ри­со­вать кар­ту для ММБ 2017/осень. Решил на­пи­сать эту статью по­сколь­ку про­цесс по-преж­не­му далёк от дру­жест­вен­нос­ти поль­зо­ва­те­лю.

Общий план

Сей­час за ос­но­ву при­ня­то брать го­то­вый век­тор из OSM. Спо­со­бов ска­чи­ва­ния кус­ка кар­ты опи­са­но в их ви­ки до­воль­но мно­го. Кар­та по­лу­че­на, те­перь на­до:

  1. Нари­со­вать свои де­та­ли
  2. Доба­вить дан­ные SRTM1
  3. Соз­дать стиль от­ри­со­вки эле­мен­тов кар­ты на при­бо­ре Garmin (лес бу­дет ото­бра­жать­ся ёлоч­ка­ми, по­ле тра­ви­нка­ми т.д.)
  4. Ском­по­но­вать кар­ту
  5. Залить на при­бор

Рис­ова­ние

Тут всё прос­то: вы­би­ра­ем лю­бой по­нра­вив­ший­ся ре­дак­тор OSM и ри­су­ем. Я оста­но­вил­ся на josm. Важ­но вы­брать ка­кую-ни­будь хо­ро­шую под­ло­жку. К со­жа­ле­нию, Yandex.Кар­ты или Google Maps ис­поль­зо­вать нель­зя из-за ли­цензион­ных ог­ра­ни­че­ний. Но есть мно­го не­пло­хих аль­тер­на­тив, до­ступ­ных пря­мо в josm.

В OSM все об­ъек­ты име­ют на­бор ат­ри­бу­тов ви­да ключ=значение. Таких ат­ри­бу­тов у об­ъек­та мо­жет быть от ну­ля до бес­ко­неч­нос­ти. По ним даль­ней­шие ути­ли­ты по­йм­ут что вы им­ели вви­ду, на­ри­со­вав вон тот боль­шой мно­гоу­голь­ник. По боль­шо­му счёту, их мож­но вы­став­лять лю­бы­ми, од­на­ко ре­ко­мен­дую ис­поль­зо­вать стан­дарт­ные. Это спасёт вас от на­ступ­ле­ния на дав­но из­вест­ные граб­ли, а так­же по­зво­лит в даль­ней­шем экс­пор­ти­ро­вать ва­ши из­ме­не­ния об­рат­но в OSM.

Добав­ле­ние дан­ных вы­сот

Про­ще все­го вос­поль­зо­вать­ся Windows ути­ли­той Srtm2osm. Она возьмёт за­дан­ную URL’ом об­ласть из OSM, ска­ча­ет для неё дан­ные SRTM, са­ма пре­об­ра­зу­ет их в фор­мат OSM.

Выгля­дит это при­мер­но так:

Srtm2Osm.exe -bounds3 'http://www.openstreetmap.org/export#map=12/43.0626/43.1251' -cat 600 200 -step 40

Здесь:

  • URL ско­пи­ро­ван из бра­узе­ра и по­ка­зы­ва­ет ку­сок, для ко­то­ро­го хо­те­лось бы по­лу­чить ли­нии вы­сот
  • -cat 600 200 шаг в мет­рах вы­со­ты для ма­жор­ных и сред­них ли­ний вы­сот
  • -step 40 шаг в мет­рах вы­со­ты для ми­нор­ных ли­ний вы­сот.

На вы­хо­де у нас по­лу­чит­ся файл srtm.osm.

Сти­ли кар­ты

Новая для ме­ня те­ма и од­но­вре­мен­но боль­шое при­ят­ное от­кры­тие: сти­ли по умо­лча­нию у мо­его Garmin ужас­ны! Нор­маль­ный стиль ра­ди­каль­но улуч­ша­ет чи­та­емость кар­ты. И я бы ска­зал, что на по­след­нем ММБ мой стиль дал боль­ше, чем весь вклад не­по­средст­вен­но в кар­то­гра­фи­ро­ва­ние ра­йо­на.

Про­бле­ма в том что не мо­жет быть сти­ля, ко­то­рый уни­вер­саль­но по­дой­дет для всех це­лей. Авто­мо­би­лис­ту на трас­се про­се­ки на фиг не ну­жны, а у ММБшни­ка в них смысл жиз­ни. Но вы толь­ко по­смот­ри­те, на­сколь­ко пре­крас­но мо­жет вы­гля­деть кар­та, в ко­то­рой по­пы­та­лись на­ри­со­вать уни­вер­саль­ный стиль:

Как это ра­бо­та­ет

С од­но­го кон­ца у нас OSM-кар­та, где у всех об­ъек­тов есть ат­ри­бу­ты, я пи­сал о них вы­ше. С дру­го­го кон­ца имеем бу­ду­щую кар­ту для Garmin в фор­ма­те IMG, где есть свои ID ти­пов об­ъек­тов. При­чем, ес­ли иден­ти­фи­ка­то­ры ти­пов ли­ний и по­ли­го­нов на не­ко­то­рых при­бо­рах мож­но за­да­вать свои, то для то­чек ID дол­жны быть как за­ве­щал Garmin2. Их при­мер­ный спи­сок.

Наша за­да­ча:

  1. Сопо­ста­вить по ка­ким-то пра­ви­лам ат­ри­бу­ты об­ъек­тов в OSM с ID ти­пов в Garmin
  2. Нари­со­вать для них кар­тин­ки.

Рис­ова­ние кар­ти­нок

Нач­ну во вто­ро­го пунк­та про­грам­мы т.к. без не­го не­воз­мо­жен пер­вый. Фор­мат хра­не­ния XPM (тут все фо­тошо­пе­ры по­перх­ну­лись сму­зи, а про­грам­мис­ты на ANSI C ехид­но потёрли ру­ки). Я ри­со­вал их в Gimp. После со­хра­не­ния важ­но убе­дить­ся, что ко­ли­чест­во цве­тов и т.д. в по­лу­чив­шем­ся XPM по­лу­чи­лось сколь­ко на­до, по­сколь­ку Gimp, по­хо­же, ино­гда в этом мес­те ум­ни­ча­ет.

Крат­ко о за­го­лов­ке XPM. Он имеет сле­ду­ющий вид:

<width> <height> <colors> <chars per color>

При­ме­ры за­го­ло­вка:

  • Xpm="32 8 4 1" битмап ши­ри­ной 32 пик­се­ля, вы­со­той 8, 4 цве­та, каж­дый цвет пред­став­лен од­ним си­мво­лом.
  • Xpm="16 16 1 1" од­но­цвет­ный битмап 16x16, цвет за­ко­ди­ро­ван од­ним си­мво­лом.
  • Xpm="0 0 24 1" бо­лее ин­те­рес­ный ва­ри­ант. Кар­тин­ка ну­ле­во­го раз­ме­ра из 24 цве­тов, каж­дый за­ко­ди­ро­ван од­ним си­мво­лом.
  • Xpm="1 1 255 2" кар­тин­ка раз­ме­ром в один пик­сель, ко­то­рый за­ко­ди­ро­ван дву­мя си­мво­ла­ми
  • Xpm="0 0 1 0" кар­тин­ка без кар­тин­ки ну­ле­во­го раз­ме­ра, каж­дый цвет за­ко­ди­ро­ван ну­ле­вым ко­ли­чест­вом си­мво­лов, есть один цвет

Тех­ни­чес­кая спе­ци­фи­ка­ция рас­ши­ре­ния над XPM от Garmin за­хва­ты­ва­ет дух да­же у бы­ва­ло­го про­грам­мис­та:

  1. Одно­цвет­ные по­ли­го­ны (за­лив­ка) за­да­ют­ся XPM, в ко­то­ром от­сут­ст­ву­ет битмап. Уточ­не­ния:
    • <chars per color> вс­ег­да ра­вен ну­лю
    • <colors> = 1: за­да­ет цвет по­ли­го­на
    • <colors> = 2: за­да­ет днев­ной и но­чной цвет по­ли­го­на
    • иное ко­ли­чест­во цве­тов за­пре­ще­но
  2. Поли­го­ны с битмапом за­да­ют­ся с <chars per color> рав­ным еди­ни­це. Уточ­не­ния:
    • <chars per color> вс­ег­да ра­вен еди­ни­це
    • Шири­на и вы­со­та битмапов лю­бых по­ли­го­нов дол­жна быть 32 пик­се­ля
    • <colors> = 2: битмап с дву­мя цве­та­ми, один из цве­тов мо­жет быть про­зрач­ным
    • <colors> = 4: битмап с дву­мя цве­та­ми, ва­ри­ан­ты цве­тов для днев­но­го и но­чно­го ре­жи­мов.
    • иное ко­ли­чест­во цве­тов за­пре­ще­но
  3. Лин­ии без битма­па за­да­ют­ся <chars per color> рав­ным ну­лю. Допол­ни­тель­но Garmin вве­ла кон­стан­ты LineWidth=X и BorderWidth=Y, ко­то­рые за­да­ют­ся в фа­йле спе­ци­фи­ка­ции сти­ля кар­ты пе­ред XPM. Напри­мер:

    LineWidth=3
    BorderWidth=1
    Xpm="0 0 2 0"
    

    Уточ­не­ния по ли­ни­ям без битма­па:

    • <chars per color> вс­ег­да ра­вен ну­лю
    • LineWidth и BorderWidth при­ни­ма­ют зна­че­ния от 0 до 32
    • <chars per color> вс­ег­да ра­вен ну­лю
    • <colors> = 1: единст­вен­ный цвет за­да­ет цвет ли­нии
    • <colors> = 2: днев­ной и но­чной цвет ли­нии
    • <colors> = 4: днев­ной цвет ли­нии, днев­ной цвет об­вод­ки ли­нии и плюс но­чные ва­ри­ан­ты
    • иное ко­ли­чест­во цве­тов за­пре­ще­но
  4. Лин­ии с битмапом. Зада­ют кар­тин­ку ли­нии. Огра­ни­че­ния и фор­мат:

    • <chars per color> вс­ег­да ра­вен еди­ни­це
    • <width> вс­ег­да 32
    • <colors> = 1: единст­вен­ный цвет — это цвет ли­нии
    • <colors> = 2: днев­ной и но­чной цвет ли­нии
    • <colors> = 4: днев­ной цвет ли­нии, днев­ной цвет об­вод­ки ли­нии и плюс но­чные ва­ри­ан­ты
    • иное ко­ли­чест­во цве­тов за­пре­ще­но
    • один из цве­тов мо­жет быть про­зрач­ным
    • по ана­ло­гии с LineWidth=X, не­офи­ци­аль­но су­щест­ву­ют рас­ши­рен­ные бу­ле­вы па­ра­мет­ры за пре­де­ла­ми XPM: UseOrientation=Y и Antialias=Y. Оба со­зда­ны для по­пыт­ки ото­бра­зить ри­су­нок ли­нии под раз­ны­ми угла­ми бо­лее ка­чест­вен­но. Но, го­во­рят, не вс­ег­да это уда­ет­ся.

Из лич­ных на­блю­де­ний: ли­нии с битма­па­ми где <height> мень­ше 4 смот­рят­ся от­вра­ти­тель­но.

Доку­мен­та­ция на фор­мат XPM для POI (ико­нок) сю­да не по­мес­тит­ся, пред­ла­гаю озна­ко­мить­ся са­мос­то­ятель­но.

Сопо­став­ле­ние ат­ри­бу­тов OSM иден­ти­фи­ка­то­рам в Garmin

Под Windows вы мо­же­те вос­поль­зо­вать­ся го­то­вым со­фтом для ри­со­ва­ния сти­лей ка­рт для Garmin3. Но он мне по­ка­зал­ся мяг­ко го­во­ря убо­гим — на­чи­ная с то­го, что они пред­ла­га­ют все кар­тин­ки ри­со­вать в своём вст­ро­ен­ном ре­дак­то­ре.

Сна­ча­ла нам на­до со­по­ста­вить ат­ри­бу­ты OSM ко­неч­ным иден­ти­фи­ка­то­рам в Garmin. Для это­го ну­жна ди­рек­то­рия (на­зо­ви­те её как вам удоб­но) с при­мер­но та­ким со­дер­жи­мым:

lines
points
polygons
version

(есть и дру­гие фа­йлы, но ме­ня он не ко­сну­лись)

Это и есть «стиль», на­бор пра­вил. Здесь version со­дер­жит прос­то ци­фер­ку, а lines, points и polygons опи­сы­ва­ют пра­ви­ла пре­об­ра­зо­ва­ния. Они вы­гля­дят так:

(landuse=farmland | landuse=farmyard) [0xa resolution 18]
landuse=industrial [0xb resolution 18]
landuse=quarry [0xc resolution 18]

Опи­сы­ваю пер­вую строч­ку че­ло­ве­чес­ким язы­ком: «ес­ли есть ат­ри­бут landuse=farmland ИЛИ есть ат­ри­бут landuse=farmyard, ТО вы­ста­вить для об­ъек­та Garmin иден­ти­фи­ка­тор 0xa, а об­ъект на­чать по­ка­зы­вать на­чи­ная с масшта­ба 18».

На са­мом де­ле, вы­бор сти­ля для об­ъек­та — боль­шая и очень боль­ная те­ма в кар­то­гра­фии; не сто­ит ри­со­вать ре­ки по­верх до­рог, до­ро­ги по­верх ту­нне­лей, ручьи в мел­ком масшта­бе (но на са­мом де­ле на­до, ес­ли у нас гид­ро­гра­фия) и т.д. Но для на­ше­го ма­лень­ко­го за­во­ди­ка по ути­ли­за­ции про­мыш­лен­ных от­хо­дов про­из­водст­ву ка­рт для outdoor все эти де­та­ли перфек­ци­онис­та мож­но опус­тить.

Спе­ци­аль­но для перфек­ци­онис­тов остав­лю боль и ссыл­ку на ма­нуал. Для осталь­ных до­ста­точ­но по­нять, что есть ключ=значение об­ъек­тов OSM, есть бу­ле­ва ло­ги­ка и есть Garmin ID, ко­то­рый со­впа­да­ющим в за­дан­ным пра­ви­лом об­ъек­там на­до при­сво­ить.

Тут важ­но по­нять, что на этом эт­апе вы вы­би­ра­ем, ка­кие эле­мен­ты ис­ход­ной кар­ты мы хо­тим ви­деть на сво­ей ко­неч­ной кар­те. Сво­еоб­раз­ный grep+map+fold.

Сопо­став­ле­ние Garmin ID кон­крет­ной кар­тин­ке (TYP файл)

Недав­но мы на­ри­со­ва­ли ку­чу офи­ген­ных кар­ти­нок чу­мо­вом фор­ма­те XPM. И мы не мо­жем до­ждать­ся мо­мен­та, ко­гда эти ма­лень­кие Моны и Лизы раз­ме­ром 32 на 32, со­хранённые в ви­де Цэ ис­ход­ни­ков, по­явят­ся на эк­ра­не Garmin. Необ­хо­ди­мо со­по­ста­вить ID ти­пов Garmin с кар­тин­ка­ми. Откры­ва­ем текс­то­вый ре­дак­тор и со­зд­аем файл style.txt:

[_id]
FID=156
CodePage=1251
[end]

[_drawOrder]
Type=0xa,6
Type=0xb,6
Type=0xc,6
Type=0xd,6
Type=0xe,6
Type=0xf,15
... и т.д. ...

end]

[_polygon]
Type=0xa
String1=0x19,some area
Xpm="32 32 2 1"
"       c #A72300"
".      c #000000"
"           .                    "
"          ...                   "
"           .                    "
"                                "
"       .        .               "
"      ...      ...          .   "
"       .        .          ...  "
"                            .   "
"                                "
"                                "
"                                "
"                                "
"                                "
"                 .        .     "
"                ...      ...    "
"     .      .    .        .     "
"    ...    ...                  "
"     .      .                   "
"                                "
"                                "
"                                "
"              .                 "
"             ...       .        "
"      .       .       ...       "
"     ...               .        "
"      .                         "
"                                "
"                  .             "
"                 ...            "
"                  .           . "
"                             ..."
"                              . "

[end]

... и т.д. ...

[_line]
Type=0x34
String1=0x19,some line
Xpm="32 4 2 1"
".      c #000000"
"+      c #4A4A4A"
"................................"
"++++++++++++++++++++++++++++++++"
"++++++++++++++++++++++++++++++++"
"................................"

[end]

... и т.д. ...

«Здравст­вуй, ад!».

В сек­ции [_id] ука­зы­ва­ем ко­ди­ров­ку и иден­ти­фи­ка­тор сти­ля. Рег­ис­тр клю­че­вых слов ва­жен во всём фа­йле!

В сек­ции [_drawOrder]. Опи­сы­ва­ем все ис­поль­зо­ван­ные Garmin ID по­ли­го­нов и их при­ори­тет при от­ри­со­вке. Чем боль­ше чис­ло, тем вы­ше при­ори­тет.

Далее идет се­рия сек­ций с имена­ми [_polygon], [_line] и [_point], где мы опи­сы­ва­ем всё, над чем так дол­го ра­бо­та­ли в этих на­ших фо­тошо­пах:

  • Type: Garmin ID
  • String1: код язы­ка (для рус­ско­го 0x19) и на­зва­ние ти­па, на­при­мер “про­се­ка”. Обра­ти­те вни­ма­ние, что у нас CodePage=1251, ко­ди­ров­ка фа­йла дол­жна со­от­ветст­во­вать!
  • Xpm: на­ша кар­тин­ка без Цэ-за­го­ло­вка.

Ура, стиль го­тов! Этот txt файл бу­дет ско­пи­ли­ро­ван в TYP файл, ко­то­рый по­ни­ма­ет Garmin, ко­то­рый в свою оче­редь бу­дет вком­пи­ли­ро­ван в ко­неч­ную кар­ту. В раз­де­ле Ком­по­нов­ка ка­рт в ито­го­вый файл вы узнае­те, как эту шат­кую кон­ст­рук­цию пре­об­ра­зо­вать в кар­ту, а в ни­жес­ле­ду­ющем раз­де­ле узнае­те, как я по­пы­тал­ся от это­го ада из­ба­вить­ся с по­мощью Emacs и чуть-чуть Perl.

Наво­дим по­ря­док в сти­лях с по­мощью Emacs

Figure 2: Резуль&#173;тат мо&#173;их ху&#173;до&#173;жеств: стиль для ро&#173;гей&#173;нов

Figure 2: Резуль­тат мо­их ху­до­жеств: стиль для ро­гей­нов

В Емак­се есть та­кой за­ме­ча­тель­ный ре­жим — org-mode. Веро­ят­но перво­на­чаль­но он со­зда­вал­ся для ор­га­ни­за­ции за­кла­док и за­пи­сок, но се­йчас в нём со­зда­ют бло­ги (и я то­же), со­став­ля­ют спис­ки дел, учи­ты­ва­ют та­бель­ное вре­мя, пи­шут до­ку­мен­та­цию, статьи и кни­ги, при­ме­ня­ют в ка­чест­ве аль­тер­на­ти­вы MS Excel. Коро­че го­во­ря, всё что мож­но струк­ту­ри­ро­вать мож­но за­пих­нуть и в до­ку­мент org-mode. При этом, org-до­ку­мент ос­та­ет­ся про­стым текс­то­вым фа­йлом, ко­то­рый лег­ко пар­сить и ре­дак­ти­ро­вать чем угод­но. Кро­ме то­го, Emacs сам по се­бе уме­ет по­ка­зы­вать кар­тин­ки пря­мо в тек­сте.

Я не смог не вос­поль­зо­вать­ся та­кой за­ме­ча­тель­ной воз­мож­ностью и ре­шил со­став­лять свой пер­вый стиль в фор­ма­те org. Как это вы­гля­дит, мо­же­те по­смот­реть на при­ме­ре мо­его сти­ля для ро­гей­нов (кар­тин­ки ле­жат ря­дом). В Emacs это вы­гля­дит до­воль­но при­лич­но:

Figure 3: Вне&#173;шний вид по&#173;лу&#173;чив&#173;ше&#173;го&#173;ся до&#173;ку&#173;мен&#173;та

Figure 3: Вне­шний вид по­лу­чив­ше­го­ся до­ку­мен­та

Для ге­не­ра­ции ко­неч­ных фа­йлов на­пи­сал Perl-скрипт. К со­жа­ле­нию, до сле­ду­юще­го ри­со­ва­ния ка­рт нет ни­ка­кой мо­ти­ва­ции вы­во­дить его из глу­бо­кой бе­та-вер­сии. Тем не ме­нее, он ра­бо­та­ет, ге­не­рит ди­рек­то­рию с polygons, lines, points, mkgmap-config.txt и style.txt, ука­зы­ва­ет на ка­кой-то не­боль­шой на­бор оши­бок.

Что де­лать с по­лу­чив­шим­ся вы­хло­пом скрип­та чи­тай­те в сле­ду­ющем раз­де­ле.

Полез­ные ссыл­ки по гла­ве (боль­ше мне для изу­че­ния)

Ком­по­нов­ка ка­рт в ито­го­вый файл

Для это­го нам по­на­до­бит­ся mkgmap — ути­ли­та, уме­ющая на са­мом де­ле до­воль­но мно­го ин­те­рес­ных штук, но глав­ное спо­соб­ная пре­об­ра­зо­вать OSM в Garmin IMG.

Ком­пи­ля­ция сти­ля от­ри­со­вки кар­ты (опц­ио­наль­но)

Мож­но ском­пи­ли­ро­вать style.txt в TYP-файл. Дела­ет­ся это прос­той ко­ман­дой:

mkgmap style.txt

Этот шаг как пра­ви­ло не имеет смыс­ла, по­сколь­ку ес­ли под­су­нуть style.txt в ар­гу­мен­ты mkgmap при ге­не­ра­ции кар­ты (в wiki го­во­рят, что это дол­жен быть са­мый по­след­ний ар­гу­мент!), то TYP-файл бу­дет со­здан ав­то­ма­ти­чес­ки.

Упа­ко­вка mkgmap-филь­тров сти­ля

Стиль не­об­хо­ди­мо упа­ко­вать в zip-ар­хив с та­кой струк­ту­рой:

styles/MY_STYLE_NAME/version
styles/MY_STYLE_NAME/lines
styles/MY_STYLE_NAME/points
styles/MY_STYLE_NAME/polygons

Обя­за­те­лен толь­ко version, и он об­яза­тель­но дол­жен им­еть со­дер­жи­мое “1” с пе­ре­во­дом ст­ро­ки.

Обно­вле­ние от [2018-11-29 Чт]: те­перь мой скрипт вы­пол­ня­ет этот шаг ав­то­ма­ти­чес­ки.

Ком­по­нов­ка кар­ты

Мой ко­нфиг для mkgmap вы­гля­дит при­мер­но так (пусть имя фа­йла бу­дет mkgmap-args.txt):

generate-sea: land-tag=natural=background
location-autofill: is_in,nearest
housenumbers
tdbfile
show-profiles: 1
ignore-maxspeeds
add-pois-to-areas
add-pois-to-lines
link-pois-to-ways
make-opposite-cycleways
process-destination
process-exits
preserve-element-order
net
route
index
nsis
gmapsupp
unicode
family-id: 157
product-id: 1
code-page: 1251
style-file: /tmp/mkgmap-style/style.zip
style: generated
input-file: style.txt

Пере­хо­жу в ка­та­лог с OSM фа­йла­ми и за­пус­каю:

mkgmap -c mkgmap-args.txt  -n 12345678 --description='Bezengi - my map' *.osm

Арг­умент -n за­да­ет “имя” кар­ты (на са­мом де­ле уни­каль­ный иден­ти­фи­ка­тор). Если ис­поль­зу­ет­ся splitter (см. ни­же), то этот но­мер бу­дет прос­тав­лен ав­то­ма­ти­чес­ки, на ос­но­ве ба­зо­во­го.

В --description ре­ко­мен­дую дать своё опи­са­ние кар­ты — оно бу­дет по­ка­за­но в ме­ню вы­бо­ра кар­ты на при­бо­ре.

На вы­хо­де по­лу­чит­ся не­сколь­ко IMG фа­йлов и ну­жный нам gmapsupp.img (убе­ди­тесь, что со­от­ветст­ву­ющая оп­ция вклю­че­на в ко­нфи­ге). Этот файл как есть за­ки­ды­ва­ем в ди­рек­то­рию Garmin на уст­ро­йст­ве. На со­вре­мен­ных при­бор­чи­ках файл мож­но как-ни­будь по-сво­ему на­звать.

splitter

Для ста­рых при­бо­ров так­же имеет смысл по­де­лить кар­тин­ку на ло­ги­чес­кие квад­ра­ты, ра­бо­тать кар­та бу­дет быстрее. Это мож­но сде­лать с по­мощью ути­ли­ты splitter. Исполь­зо­вать её при­мер­но так:

java -jar splitter.jar --num-tiles=25 --mapid=1234000 --keep-complete=false map.osm

Здесь:

  • --num-tiles=25 раз­бить кар­ту на 25 ку­соч­ков. Чем мень­ше ку­со­чек, тем про­ще с ним дру­жить при­бор­чи­ку, но тем ча­ще при­дет­ся под­гр­ужать дру­гие ку­соч­ки при скрол­ли­нге кар­ты.
  • --mapid=12340000 ку­соч­ки бу­дут им­еть ID 12340000, 12340001 и т.д. Важ­но! У каж­дой кар­ты на при­бо­ре дол­жен быть свой уни­каль­ный иден­ти­фи­ка­тор. Как это­го до­стичь — за­да­ча для ва­шей фан­та­зии.
  • --keep-complete=false. Если ли­ния или по­ли­гон вы­хо­дит за пре­де­лы тай­ла, то об­ре­зать её. Это мо­жет со­здать про­бле­мы с по­ст­ро­ени­ем маршру­тов и от­ри­со­вкой, за­то очень боль­шие об­ъек­ты не до­ба­вят тор­мо­зов.

Splitter со­зда­ет фа­йлы с рас­ши­ре­ни­ем PBF, ко­то­рые mkgmap то­же уме­ет при­ни­мать в на вход. При­мер:

mkgmap -c mkgmap-args.txt --description='Bezengi - my map' *.pbf

  1. Sparital Radar Topology Mission — мно­го­лет­няя про­грам­ма NASA по съёмке от­но­си­тель­ных вы­сот по­верх­нос­ти зем­ли. На 2017 год есть пол­ное по­кры­тие пла­не­ты по сет­ке с ша­гом 30 мет­ров ^
  2. Во вся­ком слу­чае, мне не уда­лось за­дать пол­ностью свои ID для мо­его Garmin; не­стан­дарт­ные ID он прос­то иг­но­ри­ро­вал ^
  3. клю­че­вые сло­ва для по­ис­ка: TYP file editor, Garmin map style editor ^