воскресенье, 24 февраля 2019 г.

Растровые карты для Garmin -- просто. Часть 3. JNX с помощью SAS.Planet

taginvn.livejournal.com

Растровые карты для Garmin -- просто. Часть 3. JNX с помощью SAS.Planet

fomaru

В главной своей логике создание JNX-карт очень похоже на создание карт KMZ -- всё так же нужно выделить полигон, загрузить тайлы, а потом экспортировать их в нужный формат. Добавились только дополнительные уровни, числом до 5. Причём отличаться они могут не только своей детализацией (что логично), но и источником картографической информации -- на нижних слоях детальные космоснимки, в серединке топографические карты, а на самом верху какая-нибудь кадастровая информация. Доступная же площадь покрытия ограничена, пожалуй, только ёмкостью SD-карты.
Вообще-то всё, что вы хотели знать, но боялись уточнить про структуру JNX-формата, можно прочитать на специальной страничке всё того же a_whiter'a. А отслеживать развитие прогресса в деле экспорта в jnx -- на форуме SAS.Планеты в посвящённой этому теме. Мы же постараемся вникнуть только в базовые аспекты и попробуем разобраться, как они влияют на конечный результат. Но лучше это делать по ходу создания карты конечно.
  1. Запускаем программу и находим нужный регион. Я опять далеко от дома ходить не буду и возьму всю ту же пойму речки Серёжа, где по весне бывает отличная охота с подсадной :)
  2. Если для карт KMZ нам нужно было выбрать один уровень и один источник для него, то сейчас можно пофантазировать. Но перед этим не плохо бы проверить, кто что предлагает на данную территорию. Побродив по меню Карт, я выбрал три уровня (больше не придумал). На нижнем (z19) у нас будут лежать всё тот же субметровый Яндекс.Спутник; в серединке (z17), чтобы не заблудиться, положим "бумажный" Генштаб на 250 м., а в самом верху (z14) разместим космоснимки от Бинга -- не лишним будет иметь весеннюю съёмку с очертаниями разливов для тех мест, в которых и бываешь-то только весной и именно по большой воде. 32
  3. Дальше по тому же шаблону.

  4. Но прежде не могу не заметить, что ограничений, не считая разумных, на площадь полигона для JNX-карт практически не осталось. Выражаются они только ёмкостью SD-карты, которую способен прочитать ваш девайс. Сейчас это 32 Гигабайта, но прогресс, конечно, неумолим... Предварительно рассчитать вес карты немного затруднительно -- зависит от количества уровней, их значений и степени сжатия картинок, поэтому начинайте с умеренных площадей и с опытом будете знать средние значения для своих предпочтений. 2.1. Поехали нащёлкивать полигон:
    33
    2.2. И по очереди загружать выбранные слои:
    34
    2.3. Не забыв потом убедиться с помощью "Карты заполнения слоя", что все выбранные тайлы на месте:
    35
  5. После этого уже начинается область неизведанного -- закладка "Экспорт"

  6. 36
Но перед тем, как наполнять её значениями, надо немножечко разобраться -- как, чем и почему.
Представьте, что перед вами лежит стопка карт одной и той же местности. Чтобы рассмотреть более детально какой-то квадрат, вы просто откладываете в сторону лист с мелким масштабом и переходите к следующему. Сначала 10-ти километровку, потом 5-ти, потом 2, потом 1, потом 500 метров... В навигаторе же детализация может происходит более плавно, потому что градация масштабов более расширенная. И увеличивая масштаб, какое-то время вы всё равно будете рассматривать всё ту же карту.
Если вы ходили по ссылкам в начале поста, то уже знаете о том, что в родных JNX-картах, полученные по подписке BirdsEye, содержатся уровни со значениями масштабов, заданных некими целыми числами разной величины. Что они означают на самом деле -- науке до сих пор неизвестно и остаётся тайной
марсианских гарминовских программистов. Но умные люди на их основе придумали свою, расширенную последовательность, которая и используется во всех приличных программах, способных к компиляции JNX-файлов. В SAS.Планете эта шкала цифр переведена в удобный нам метрово-километровый формат.
Всё было бы просто, если бы мы делали карты по шаблону BirdsEye и масштабы у нас шли последовательно, один за другим. Программа бы сама подставляла нужные значения и незачем было бы париться. Только у нас всё может быть несколько сложнее, если не сказать -- навороченнее.
Давайте рассмотрим простую ситуацию, когда в нашей коллекции карт не хватает одного листа. К примеру, куда-то затерялся лист 500-метровки, а в наличии только километровка и 250 метров. На бумаге, как уже говорилось, сделать это просто -- отложим один лист и сразу перейдём на другой. Навигатору же придётся проделать более длинный путь -- пройти уровни 800 м., 500 м. и 300 метров. А нашей задачей, при создании подобной карты, является указать ему, на каком уровне "выключить" одну и включить другую.
Казалось бы решением, лежащим на поверхности, является -- всё взять и поделить. Поровну. = 500. Но людям, имеющим дело с фотографиями, не менее логичной показалась бы цифра 800 -- всё лучше смотреть на уменьшенную в 4 раза 250-ти метровку, чем на пиксельную километровку. Только правильная цифра -- 300. А чтобы понять, почему так, рассмотрим один, совсем не гипотетический случай.
Предположим, что в ваш навигатор залиты карты двух соседних квадратов. Одну делали вы и сделали её двухуровневой. Потому что куда-то затеряли свой 500-метровый лист, а "точкой перехода" назначили уровень в 500 метров. А на другой квадрат вам дал друг (или скачали из интернета) и в ней наличиствуют все 3 уровня с правильными переходами: на 800 м. для 500-метровго листа и 300 метров для 250-ти метрового:
45
Когда вы окажетесь на стыке этих квадратов, а их тайлы будут одновременно выводится на экран, произойдёт вот что:
 • при значениях шкал масштаба навигатора от 2 км. до 1,2 км. будут выводиться километровые карты;
 • при значении 800 м. карта друга переключится на 500-метровку, а на вашей останется километровка;
 • при значении 500 м. карта друга останется на 500-метровке, а ваша переключится на 250-метровку
 • при значении 300 м. карта друга перключится на 250-метровку, а ваша... а ваша исчезнет навсегда вплоть до 5-ти метровой шкалы
Честно скажу -- я не знаю, баг это или фича, но если для карт одного уровня (в нашем случае 250-ти метровка) установить разные значения для верхнего уровня отображения, назовём её "точкой перехода", то карты с большими значениями перестанут отображаться. При условии, что они одновременно видны на экране конечно. В одной карте одним файлом такое сделать, разумеется, невозможно. Но для двух соседних карт -- запросто.
Поэтому правило такое -- если вы стремитесь к совместимости не только всех своих карт, но и с картами друзей-картосоздателей, при наличии пропущенных масштабов всегда устанавливайте верхний уровень отображения на значениях, следующими за масштабом имеющейся карты:
 • для 250-ти метровки это будет 300 м
 • для 500-метровки -- 800 м
 • для километровки -- 1,2 км
 • для 2-х километровки -- 3 км
 • для 5-ти километровки -- 8 км
 • для 10-ти -- 12 км
Но опять же... Правила есть. Но они настолько субъективны... В одних сообществах они одни, в других могут быть совершенно другие -- я про них для порядку написал. Вы же делайте, как вам удобно и считаете правильным. Это ваши карты и вам с ними жить. И нафига тогда мучаться? Попробуйте наделать разных вариантов вокруг своего дома, и прогуливаясь с собачкой (ну или за пивом там) протестируйте -- как и чего. Это сложно описать правилами на самом-то деле -- у каждого своё мироощущение. Если бы мне была важна в этой сборке бумажная 250-ти метровка, а на верхнем уровне только спутниковая 2-километровка, я бы плюнул на правила и поставил верхнюю точку перехода для неё на 1,2 км. -- для пущего обзора окрестностей.
Так что если вдруг вы попадёте в ситуацию, когда часть карты на каких-то значениях перестала выводится на экран, при этом она точно там была и работала, то выходом из такой ситуации является только временное отключение какой-то одной, пока не нужной.
Это что касается значений верхнего уровня. Теперь перейдём к нижнему. С ним просто -- его нет. Карта любого масштаба, если она лежит на самом нижнем уровне, по идее будет отображаться вплоть до предельных приземлённых значений (в гармине -- 5 м.) Для космоснимков по подписке BirdsEye это может и нормально, но если у нас на нижнем уровне окажется хотя бы километровка, то при приблежении в 5 метров экран отобразит даже не пиксель отсканированной карты, а его маленькую часть.
Для таких случаев тоже придумано решение, но оно не совсем тривиальное. Я такого ещё не делал, поэтому просто процитирую a_whiter'a

В картах JNX имеется только верхнее ограничение на уровни приближения, при которых показывается тот или иной уровень карты. Скажем, если в заголовке уровня JNX прописано значение масштаба 76437, то тайлы этого уровня будут показываться при зумах от 20км до 5м. А вот возможности явно указать, что уровень должен отключаться, скажем, при достижении приближения в 1,2 км (то есть задать нижнее ограничение), форматом не предусматривается.
Однако есть неявный способ введения подобного ограничения, предложенный пользователем aabbcc форума gpsunderground.
Чтобы отключить карту ниже некоторого приближения, требуется создать в карте еще один слой с нужным значением масштаба (для зума 1,2км это будет 4777), содержащий единственный тайл с координатами, не пересекающимися с координатами карты.
Естественно, карта, в которую добавляется новый ограничивающий уровень, может содержать не более четырех обычных уровней.
В качестве изображения тайла может быть использована однопиксельная картинка, либо можно записать в файл ссылку на первый тайл из первого уровня карты.
Координаты можно взять равными, скажем, 90N, 180E - это предпочтительный вариант, однако для него потребуется доделка имеющихся на сегодняшний день конвертеров. А можно просто использовать в качестве координат тайла координаты одного из углов карты - такой способ можно применять даже с доступными сейчас программами.

Пока доставал цитату, усмотрел там ещё один важный момент, про который забыл упомянуть. В стремлении охватить неохватное, легко выйти за рамки, когда количество тайлов на каком-то уровне может превысить допустимое форматом. Но в SAS.Планете мы не можем самостоятельно указывать размеры тайлов для JNZ-карт, как делали это с картами KMZ. Она не даст нам (надеюсь, что пока) увеличивать размеры, уменьшая количество. Но предлагает другой вариант -- многотомный архив. Так что не пугайтесь, если увидите в финале вместо одного файла целых два, а то и три. Только опять же -- для меня это тоже область неведомого, таких огромных карт я не делал, но вроде как должно работать.
Ну ладно, "положение на фронтах" мы рассмотрели, пора продолжить "драку".
  1. Возвращаемся в закладку "Экспорт"

  2. 3.1. Сначала определяемся с базовыми вещами -- выбираем, что мы будем делать, придумываем название для карты и указываем программе, куда мы хотим её сохранить: 37
    3.2. Дальше на очереди вкладка "Карты".
    Последовательность, в которой мы будем заполнять уровни, значения не имеет, они станут правильно при любом раскладе. Мне же кажется логичным размещать карты для верхнего уровня вверху таблицы, а крупные масштабы внизу -- сложнее запутаться в "точках перехода" с карты на карту. Но повторюсь -- кому как удобнее.
    3.2.1. Первым по списку у нас идёт плохонький, но весенний Бинг. Zoom 14 примерно соответствует бумажной 2-х километровке, но поскольку уровень у нас самый верхний и достаточно большой для бумаги, шкалу поставлю на 5 км -- при чуть более двукратном уменьшении ещё можно что-то рассмотреть и понять. Сжимать её не буду, оставлю 95.
    3.2.2. Вторым номером выступает бумажная 250-метровка, снятая с 17-го zoom'a. Карты ходовые, поэтому включу отображение на 300 метров, хотя она здесь "чтоб просто была". Сжимать тоже не буду, но при желании качество для бумаги можно умешать до 70, меньше не стоит.
    3.2.3. Третьим нижним разместился яндексовский субметровик с 19-го zoom'a. Это много меньше стометровки на бумаге, но она мне нужна и включать я её хочу уже с 200-сот метров. Качество без изменений.
    38
    3.3. Ну и последний этап -- "Дополнительные операции"
    43
    3.3.1. "Тип снимка (ID)". По умолчанию предлагается стандартный список, доступный по подписке BirdsEye.
    39
    Но можно поставить своё. JNX-карты в приборе группируются по этому полю. Это как виртуальная папка, как библиотека. Физически все файлы карт должны лежать в папке Garmin\BirdsEye, но в списке установленных будут разложены по группам. Отображаться будет только буквенное значение группы и имя файла. Структура же заполнения: "цифровое значение" "пробел" "дефис" "слово латиницей". У меня указано ID -- "52 - NN" -- раскладываю по регионам.
    40
    3.3.2. Поля "Название карты" и "Наименование" -- эта информация необходима только BaseCamp'у, без неё он отказывается воспринимать самоделки. Можно оставить по умолчанию. "03" в моём случае означает комбинированные уровни
    41
    3.3.3. Версий формата на сейчас 2 штуки, но нумеруется как 3 и 4. Скажу так -- делайте в 4-ой. Не взлетит -- понижайте. Если опять не взлетит, то скачайте просмоторщих JNX-карт QLandkarte GT -- с ним в комплекте идёт конвертер, который может на картах 4-ой версии создать порядок отрисовки для старых (до 2011 года) прошивок. Я про него (конвертер) писать не буду, потому что не использовал.
    42
    3.3.4. Draw Order, порядок отображения или Z-сортировка. Эта штука имеет 101-но значение: от 0 до 100. В JNX-картах 4-ой версии, так же как и в KMZ, допускается ручная установка.
    Что она означает. Изначальные, и самые-самые родные для Гармина -- карты векторного формата. Помимо нескольких уровней детализации он имеет многослойную структуру. Такие объекты, как дороги, тропинки, озёра, лесные массивы -- все эти вещи располагаются на разных слоях (примерно, как слои в фотошопе). Значение 50 проходит по слою дорог.
    Если вы хотите, чтобы поверх вашей JNX-карты отображались какие-то объекты векторной (у меня всегда стоит ТОПО), то нужно устанавливать значения <50. По мере уменьшения значения к дорогам и тропинкам присоединятся леса и болота, реки и озёра, поля и луга... Путевые точки, треки, маршруты, POI -- они находится за границей допустимых значений и отображаться будут всегда.
    43
Вот вроде и всё. Осталось "Начать" и... закончить :)

Комментариев нет:

Отправить комментарий