Как создать jnx с помощью sas планета

Обновлено: 07.07.2024

Сегодня я расскажу как в программе SAS.Planet создавать свои офлайн-карты для путешествий.

Для работы с такой картой потребуется смартфон со специальным приложением либо GPS-навигатор.

Я пользуюсь Android-смартфоном с приложением Locus Map Pro . Но есть много аналогов платных и бесплатных, подготовка карт для многих из них не будет отличаться от описанного способа.

Подготовка к работе

Скачиваем программу SAS.Planet на официальном сайте по ссылке , распаковываем архив и запускаем файл SASPlanet.exe .

Программа готова к работе:

В первую очередь обратите внимание на вкладки "Выбор основной карты" и "Слои" . Это основные рабочие инструменты:

Карта - это основное рабочее поле, поверх которого можно наложить сколько угодно слоёв. Достаточно просто выбирать их из списка.

Переключаясь между картами и слоями, мы можем видеть как одна местность представлена на разных источниках.

Я обычно работаю с этими:

  1. OSM Cyclosm
  2. ГосГисЦентр (все масштабы)
  3. Яндекс спутник
  4. Google спутник
  1. WikiMapia - чтобы смотреть границы и описание объектов
  2. Яндекс Гибрид - чтобы видеть федеральные трассы и железнодорожные станции

Рекомендую назначить горячие клавиши для часто используемых карт и слоёв, сделать этом можно в Параметрах:

Создание карты

Пошаговые скриншоты прикрепляю в карусели.

Выделяем нужную область

Чтобы карта была легче, я выделяю полигональную область, исключая, например, лесные участки, через которые я точно не буду передвигаться.

При этом, лучше брать небольшим запасом от маршрута, иногда обстоятельства заставляют менять маршрут.

Например, здесь я рассказывал о ситуации, когда проводники высадили нас на одну станцию раньше :) Я не думаю, что мы бы заблудились, но с картой этой местности было намного приятнее.

Загружаем карту

Определяемся с масштабами, которые будем загружать. Чем больше число, тем выше детализация. Карта с излишне высокой детализацией будет очень тяжёлая и поэтому будет долго загружаться и медленно работать.

Начиная с версии 120227 build 5102 SAS.Планеты в программе появилась возможность создания файлов jnx для навигаторов Garmin.

Запускаем программу выбираем интересующий нас тип спутниковых снимков или карт. Затем используя инструмент прямоугольное выделение выделяем интересующий нас участок. Участок выбираем с запасом поскольку SasPlanet при конвертации отбрасывает не полностью захваченные выделением тайлы.


В открывшемся окне выбираем вкладку загрузить, выбираем необходимый масштаб и нажимаем кнопку начать. В случае если необходимы несколько масштабов повторяем процедуру используя инструмент предыдущее выделение. После загрузки всех необходимых масштабов используем инструмент предыдущее выделение, переходим на вкладку экспорт и выбираем формат JNX растровая карта для Garmin.


На вкладке карта указываем типы карт, масштаб, шкалу и степень сжатия каждого слоя. Формат jnx поддерживает до 5 слоев. Параметр шкала означает с какого масштаба будет показываться данный слой. Изменять данный параметр который установлен автоматически не рекомендуется поскольку при увеличении параметра отображение будет очень медленным, например если для масштаба 1.2 км указать шкалу 3 км то на участке масштаба с 1.2 км до 3 км работа устройства будет медленней поскольку при отображении будет участвовать гораздо большее количество тайлов. Параметр сжатие можно оставить без изменения. Во вкладке Наложить можно указать дополнительные слои которые будут отображаться одновременно с другими слоями. Затем переходим во вкладку Дополнительные операции.


Название карты – можно заменить на более удобное, в навигаторе не отображается.

Наименование — можно заменить на более удобное, под этим наименование карты будут отображаться в устройстве.

Тип снимка (ID) – по этому индексу карты в навигаторе группируются в списке доступных карт, таким образом используя различные ID для разных групп карт можно включать или отключать отображение наборов карт

Версия JNX – версия 4 поддерживает сортировку отрисовки карт, в большинстве случаев ненужная функция, к тому-же замедляющая работу устройства.

Далее указываем путь для сохранения и название файла экспорта и нажимаем кнопку Начать. В указанной папке появится готовый JNX файл, который сохраняем в папку BirdsEye навигатора.

Работа данных карт проверялась на Garmin Dakota 20. На данный момент это самый быстрый способ создания необходимых растровых карт для гармин.

vanlife travel

Многих пользователей навигаторов не устраивают детализация и наполнение штатных карт, поставляемых в комплекте с приборами или программами. Кому-то нужна подробная прорисовка рельефа, кому-то необходимы водные карты с глубинами, кому-то нужны спутниковые снимки с геопривязкой. Эти и другие хотелки можно воплотить в жизнь с помощью программы САС-Планета, изготовив в ней карты, удовлетворяющие собственным требованиям.
Ниже предлагается описание работы в программе на простейшем базовом уровне.


Дальнейшие действия состоят из пяти основных шагов:

1. Выбор картографического источника

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


А можно вот так на картах от 4maps.eu:



На подложку базовой карты можно наложить слой (один или несколько одновременно) с другой информацией. Выбор слоев для наложения осуществляется кнопкой справа от кнопки выбора основной карты. Возьмем для примера слой со всеми треками, когда-либо загруженными в проект OSM:


И получим вот такую картинку. На карту opentopomap наложены gps-треки:


Итак, с выбором карты мы определились, переходим к следующему шагу:

2. Выбор области, для которой мы будем делать карту

Область можно выбрать вручную:


А можно загрузить сохраненное ранее выделение:


Выделенный фрагмент для экспериментов можно скачать здесь. Сохранить его на компьютере и указав на него программе:


После того, как мы выбрали желаемую область и нажали галку Ok, начинаем скачивание карты.

3. Скачивание выбранного типа карты для выбранной области



Спустя некоторое время скачивание завершается, и мы видим следующее:


Можно переходить к следующему шагу:

4. Экспорт скачанной карты в формат для навигатора



После завершения процесса в указанном нами на компьютере месте будет лежать растровая карта в формате SQLite. Теперь наша задача переместить ее в программу Османд на планшете или телефоне.

5. Установка растровых карт в программу Osmand

Копируем самодельную растровую карту с компьютера в папку tiles Османда:


Вот она на месте:


Но еще не активна, Османд отображает базовые штатные векторные карты:



И вот результат:


Спасибо разработчикам программы SAS-Planet за широкий функционал, удобство работы и постоянное совершенствование проекта!

Файлы в формате JNX используются в устройствах Garmin для показа спутниковых карт, доступных через подписку BirdsEye. В навигаторах эти файлы располагаются в папке Garmin\BirdsEye на внутреннем диске или SD-карточке.
JNX - так называемый тайловый формат, то есть большое растровое изображение в карте разбито на меньшие прямоугольные части для ускорения показа навигатором.
Поддержка карт JNX имеется в следующих устройствах: Alpha 100, Astro 320, Colorado 300/400, Dakota 10/20, Edge 800, Etrex 20/30, GPSMAP 62/78, Montana 600/650, Oregon 200/300/400/450/550, Rino 610/650/655.

Существенным ограничением формата JNX является жесткая привязка карт к устройству.

Результаты исследования

Формат JNX почти полностью исследован (за исключением части блока служебных данных загрузчика, которой можно вполне пренебречь при создании собственных карт).
Разработан набор утилит как для преобразования растровых карт в формат JNX, так и для обратной конвертации.

Хотя файлы в формате JNX содержат код привязки к устройству, известны два способа использования собственных карт JNX в навигаторах Garmin.

Первый способ.
Можно пропатчить прошивку устройства таким образом, чтобы снять ограничение на количество показываемых демонстрационных карт и их площадь. Патчер можно скачать отсюда (последняя версия - 3.80 от 03.05.2019; список изменений, на английском; список поддерживаемых прошивок).

Инструменты.
Последние версии программы MAPC2MAPC поддерживают сохранение карт в формате JNX. Автор MAPC2MAPC также сделал программу mobat2jnx для преобразования сохраненных тайлов в формате OSMTracker Tile Storage (можно сделать в Mobile Atlas Creator) в JNX.

Кроме того, имеется работающий из командной строки конвертер map2jnx, основанный на GDAL, который можно использовать для преобразования файлов в формате GeoTIFF и других в карты JNX. Последняя версия конвертера устанавливается вместе с программой QLandkarte GT 1.6.0 и старше. Эта версия создает только JNX-карты версии 4 (см. ниже), поддерживающие порядок отрисовки, но требующие установки прошивок, выпущенных позже марта 2011 года.
Для скачивания также доступна версия 0.2.5 (использует пакет FWTools) и версия 0.2.3 (последняя, записывающая JNX-файлы версии 3).

Сохранение в формат JNX имеется в программе OkMap версии 9.7.0 и старше.
Экспорт в многоуровневые JNX реализован также в SAS.Планете, начиная с версии 120808.
Кроме того, поддержка сохранения в формат JNX была добавлена в 14 версии Global Mapper.

Важное замечание: прошивки, вышедшие в марте 2011 года (то есть, 2.93 для GPSMAP 62/78, 4.16 для Oregon, 4.45 для Oregon x50, и 4.01 для Dakota) и позже, совместимы только с картами, сделанными в MAPC2MAPC версии 445 и выше, mobat2jnx версии 1008 и выше, а также map2jnx версии 0.2.0 и выше. Карты, сделанные в предыдущих версиях этих программ в большинстве случаев вызывают зависание устройства при загрузке. Чтобы преобразовать старые карты JNX в совместимый с новыми прошивками формат, можно воспользоваться программой JNXFixer.

Для просмотра файлов JNX можно использовать, к примеру, QLandkarte GT версии 1.0.0 и старше, QMapShack, GPXSee.

Библиотека для работы с картами JNX на Delphi/FreePascal доступна здесь.
JNXLib была откомпилирована в виде DLL, которую можно использовать в проектах на MS Visual C++. Архив, содержащий 32х- и 64х- разрядные версии DLL, а также файлы для подключения к проектам на MSVC, находится здесь.

Форумы.
Основная англоязычная тема, посвященная исследованию формата, размещению ссылок на инструменты для преобразования в и из формата JNX и т.д, находится здесь.

Неплохой ЧАВО по созданию карт JNX (при помощи GlobalMapper и MAPC2MAPC), на русском.
Более упорядоченный вариант того же ЧАВО, содержит инструкции по созданию карт при помощи SAS.Планеты.

А здесь пошаговая инструкция по преобразованию космоснимков, скачанных при помощи SAS.Planet, в JNX (используются GlobalMapper и map2jnx); также на русском.

Устройство файлов JNX

Внутренняя структура файлов JNX

Описание формата получено в результате экспериментов с файлами JNX, полученными от добровольцев.

1. Заголовок
    0 - BirdsEye
    2 - BirdsEye Select EIRE
    3 - BirdsEye Select Deutschland
    4 - BirdsEye Select Great Britain
    5 - BirdsEye Select France
    6 - BirdsEye Select Kompass - Switzerland
    7 - BirdsEye Select Kompass - Austria + East Alps
    8 - USGS Quads (BirdsEye TOPO, U.S. and Canada)
    9 - NRC TopoRama (BirdsEye TOPO, U.S. and Canada)

Те же версии прошивок вводят поддержку 4й версии формата JNX, позволяющей указывать порядок отрисовки карт JNX. Порядок отрисовки используюется таким же образом, как поле DrawOrder в картах Custom Maps. Поддержка карт 4й версии JNX доступна в BaseCamp версии 3.2 и выше.

О координатах, используемых в файлах JNX.
Координаты хранятся в виде знаковых 4х-байтовых целых чисел. Две пары чисел описывают координаты двух углов карты.
Первая пара - верхний правый (то есть северо-восточный) угол, вторая - нижний левый (юго-западный).
Первым значением в паре идет широта, вторым - долгота.
Для получения координат эти целые числа нужно разделить на 0x7fffffff, а потом умножить на 180.
Пример. Допустим, в файле указаны координаты 0x1FCD7932, 0x1ADEBDDA. После преобразования получаем координаты N 44°43'20.81", E 37°47'9.80".

Автор программы MAPC2MAPC предполагает, что в файлах JNX используется проекция Latitude/Longitude.

Эксперименты показывают, что демонстрационные карты могут отображать не более 1 кв. км. (приблизительно), в противном случае устройство откажется их загружать.

Вычисление CRC32 в заголовке.
Для вычисления значения поля CRC32 нужно последовательно пробежаться по описаниям всех тайлов карты, взять из них первые 2 координаты (т.е. первые 8 байтов для каждого тайла) и вычислить CRC32 для буфера, составленного из этих координат.

2. Таблица описания уровней

Эта таблица всегда находится сразу после заголовка файла.

В таблице ниже приведены значения масштаба, начиная с которых уровни карт JNX показываются на том или ином уровне приближении в устройстве.
Строчка 80m - 209 означает, что при установке в устройстве приближения 80m будут показаны тайлы уровней со значениями масштабов 209 и больше.

В том случае, если в прибор загружаются карты JNX с различными значениями масштабов, и тайлы уровней с различными масштабами оказываются одновременно видимыми, тайлы с бОльшими значениями масштаба отключаются.
Чтобы избежать взаимного отключения слоев карт разработчикам программ преобразования в JNX рекомендуется использовать следующие значения масштабов для соответствующих уровней: 75, 149, 298, 597, 1194, 2388, 4777, 9554, 19109, 38218, 76437, 152877, 305758, 611526, 1223072, 2446184 (этот набор представляет собой расширение стандартного списка значений, используемых в картах BirdsEye). Промежуточные значения предполагается заменять на ближайшее из этого набора.

3. Служебная информация загрузчика карт

Эта часть файла JNX не используется для отрисовки карты как таковой. Этот блок переменной длины состоит из списка URL'ов, с которых были получены тайлы, а также уникальный идентификатор карты и копирайты.

Этот блок следует за таблицей описания уровней и всегда до таблицы описания тайлов. В редких случаях между таблицей описания уровней и блоком служебной информации записана сигнатура файла.

Начиная с версий прошивок, выпущенных в марте 2011 года, некоторые части этого блока необходимы для корректной загрузки карты и выводятся в меню настроек карты.

4. Таблица описания тайлов
5. Сигнатура

Блок длиной 0x314 (788) байтов. Здесь хранится код привязки JNX к устройству.

Блок с сигнатурой обычно расположен между последним элементом в таблице описания тайлов и перед первым изображением тайла.
Состоит из небольшого заголовка и зашифрованной основной части.
Судя по всему, используется асимметричная схема шифрования, аналогичная той, что применяется в GMA-сертификатах карт (Garmin Map Activation), введенных в новых устройствах.
Сигнатура генерируется сервером на основании координат карты, числа уровней и ID'а устройства.

6. Набор тайлов

Тайлы представляют собой обычные рисунки в формате JPG, из которых выкушены маркеры SOI (то есть начальные два байта 0xFF, 0xD8).
Большая часть рисунков в картах BirdsEye имеют разрешение 256 на 256 пикселей. Поддерживаются рисунки и большего размера. Устройства способны показывать тайлы с размером до 1 мегапикселя, при выходе размеров за этот предел производится автоматическое уменьшение картинки с потерей качества.

Судя по всему, отдельные изображения могут быть использованы для отрисовки более, чем одного тайла (в случае одинакового содержимого тайлов), что может позволить уменьшить размер файла. В этом случае количество изображений в карте будет меньше числа тайлов. Данная возможность не проверялась на практике.

7. Метка конца файла

Все файлы JNX завершаются строкой "BirdsEye" (0x42, 0x69, 0x72, 0x64, 0x73, 0x45, 0x79, 0x65 - в 16-ричном виде).

Нетривиальное использование формата

"Многотомные" карты

Хотя формат JNX допускает не более 50000 тайлов на каждом уровне, есть способ обхода этого ограничения, условно называющийся "многотомными" JNX.
Заключается он в том, что уровни с бОльшим количеством тайлов сохраняются в отдельных файлах, уровни которых содержат не более 50000 тайлов. Координаты в заголовках каждого файла при этом соответствуют реальным координатам сохраненных в них тайлов.

Пример. Допустим, требуется записать в файл формата JNX 3х-уровневую карту, на первом уровне которой 10000 тайлов, на втором - 40000, а на третьем - 160000 тайлов. В этом случае создается 4 файла: 3х-уровневый с 10000 тайлами на первом уровне, 40000 тайлами на втором и 50000 на третьем; и три одноуровневых - два по 50000 тайлов, и еще один с оставшимися 10000 тайлами.

Насколько известно автору, создание многотомных карт пока поддерживается только в программе SAS.Планета.

Нижнее ограничение на видимость уровня

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

Чтобы отключить карту ниже некоторого приближения, требуется создать в карте еще один слой с нужным значением масштаба (для зума 1,2км это будет 4777), содержащий единственный тайл с координатами, не пересекающимися с координатами карты.
Естественно, карта, в которую добавляется новый ограничивающий уровень, может содержать не более четырех обычных уровней.

В качестве изображения тайла может быть использована однопиксельная картинка, либо можно записать в файл ссылку на первый тайл из первого уровня карты.

Координаты можно взять равными, скажем, 90N, 180E - это предпочтительный вариант, однако для него потребуется доделка имеющихся на сегодняшний день конвертеров. А можно просто использовать в качестве координат тайла координаты одного из углов карты - такой способ можно применять даже с доступными сейчас программами.

Насколько известно автору, добавление ограничения видимости реализовано только в программе SAS.Планета.


Обе описанные выше техники являются экспериментальными.
Взаимодействие многотомных карт и карт с нижними ограничениями с соседними картами не исследовалось.

Пока всё.
Если у вас есть комментарии или дополнения по формату JNX, напишите, пожалуйста, автору.

Читайте также: