QuickDraw Contours всё о формате

Poruchik

Бывалый рыбак
Регистрация
31.08.2010
Сообщения
35
Местоположение
Новосибирск
Преамбула

QuickDraw Contours (QDC) – формат данных используемый в эхолотах Garmin для записи и отображения карт глубин. В этой публикации я суммировал свои далеко неполные и, возможно, отчасти ошибочные знания о том как устроен данный формат. Тем не менее, изложенные ниже материалы позволят людям, владеющим программированием создать код для работы с файлами в формату .qdc

Структура папок

На эхолотах данные QDC располагаются в папке ДИСК:\Garmin\Quickdraw\Contours, где возможны две папки:

\C - (Community) данные сообщества, которые можно загрузить с сервера https://connect.garmin.com (требуется регистрация);

\U – (User) данные пользователя, которые формируются при работе эхолота с включенной записью QDC.

Далее путь до собственно файлов .qdc состоит из семи подпапок (например \0\b\6\a\a\c\:cool:,имя каждой из которых суть шестнадцатиричная цифра от 0 до f.

Первая из семи папок может иметь всего 8 значений – соответственно разделяет Землю на 8 участков 90x90 градусов каждый.

ЗначениеБазовая Долгота (X)Базовая Широта (Y)
0​
0​
0​
1​
90​
0​
2​
-180​
0​
3​
-90​
0​
C​
0​
-90​
D​
90​
-90​
E​
-180​
-90​
F​
-90​
-90​


Папки со второй по седьмую устроены одинаково – разделяют предыдущую область на 16 секторов (4х4). Именование секторов в области слева направо и снизу вверх, как показано ниже.

cdef
89ab
4567
0123


Сторона квадрата (в градусах) для каждой из семи подпапок определяется формулой 90/2^2n,

где n – целое от 0 до 6.

В качестве иллюстрации ниже приведена таблица раскрывающая дерево папок и их базовых точек по пути 0\b\6\a\f\4\0 (выделены красным)

167832


Общее описание файлов .qdc

Папки с файлами .qdc имеют аналогичную структуру. Файлов папке может быть от одного до шестнадцати (при этом обязательно будет нулевой файл), имена которых начинаются с шестнадцатеричной цифры и подчеркивания. Соответственно квадрат, покрываемый каждым файлом имеет сторону 90/2^14 градусов, что составляет примерно 355x610м на 55-той широте.

После шестнадцатеричной цифры и подчеркивания в имени файла идет 8-значное шестнадцатеричное число (например 4_3a8026b9.qdc). Первые 4 знака определяют долготу базы (X), последние 4 знака – широту базы (Y). Прим.: база – нижний левый угол. Вычислить широту и долготу базы можно преобразовав соответствующее 4-значное шестнадцатеричное число в десятичную систему и умножив на 90/2^14 (так для файла 4_3a8026b9.qdc 3a80 = 14976; 14976*90/2^14 = 82.265625; 26b9 = 9913; 9913*90/2^14 = 54.45373535156).

Размер файла .qdc в папке \С (данные сообщества) составляет 110592 байт для файла с индексом 0_ и 90112 байт для остальных.

Размер файла .qdc в папке \U (данные пользователя) составляет 372736 байт для файла с индексом 0_ и 352256 байт для остальных.



Структура файла .qdc

Ниже изложу то, что удалось выяснить, на полноту сведений не претендую. Все известные мне полезные данные, в файлах .qdc имеют формат Integer, порядок байт little endian.

4.1 Заголовок

Первые 4 кбайт (4096 байт) во всех файлах занимает заголовок. Из полезного в заголовке содержаться координаты базы X и Y, записанные в виде чисел Integer со 165 и 161 байта соответственно. Преобразовать их в десятичные градусы можно по вышеприведенной формуле X = X(Integer)*90/2^14.

Побайтовое сопоставление файлов .qdc (пользовательских и из сообщества), созданных одним прибором, показало идентичность заголовка (за исключением координат базы – 161-162, 165-166 байты и года в записи “COPYRIGHT 2021 GARMIN LTD” 37-40 байты).

Побайтовое сопоставление нескольких файлов .qdc, созданных разными приборами показало различия (кроме вышеописанных) в байтах (296, 380-381, 464-465, 548-549, 632-633, 3071, 3076-3077, 3120-3121, 3164-3165). Возиожно это не полный список байт, подверженных изменению при создании файлов разными приборами, так как моя выборка была весьма ограниченной. Какая информация записана по вышеприведенным адресам мне в настоящий момент неизвестно. Наличие этих различий не препятствует отображению файлов с «чужими» заголовками (по крайней мере моим эхолотом). В идеале я бы рекомендовал перезаписывать 167-4096 байты заголовка на «родные» при переносе данных с прибора на прибор.



4.2 Слои данных

C 4097 байта во всех файлах начинаются данные по глубине и надежности замера этой самой глубины, которые продолжаются до конца файла.

Я именовал слои с 0 по 5 от более детальных к менее детальным. Нижеприведенные таблицы показывают схему расположения данных батиметрии.


167833




Как видно из таблицы выше пользовательские файлы содержат в начале дополнительный наиболее детальный (но отнюдь не самый полезный см. ниже) слой данных L0, из-за чего адреса слоев L1-L5 в файлах пользователя и сообщества смещены. Слои 4 и 5 присутствуют только в 0-вых файлах, поскольку они охватывают пространство всей папки (90/2^12 x 90/2^12).

Нижеприведенная таблица описывает параметры отдельных слоев.

167834


*Код 0 обозначает, что значения глубины в записи нет. Далее этот код в тексте не упоминается. В L0 также спорадически встречаются коды со значениями >1024. Я их считаю ошибочными и заменяю на 256.

Слой L0

Данный слой присутствует только в пользовательских файлах.

Данные в вышележащий слой L1 не интерполируются. При переходе из L0 в L1 творится какое-то гарминовское шаманство. Для наглядности привожу картинки. Слева L0, справа L1, построенный по этим данным.
167835

167836


Во втором ряду расположены картинки распределения кодов качества для вышележащих карт глубин. Для L0 слева белые следы непосредственно под сонаром соответствуют коду 1024; далее на удалении до ~10м серая полоса – код 512; черным показан код 256. Для L1 светло-серый – код 768, серый – 256. Как видно, начиная с L1 особого смысла смотреть распределение кодов качества нет.

В целом данные из слоя L0 не пригодны для картостроения и на экране эхолота мы их не видим. Считаю к ним нужно относится как к «технологическим» сырым данным. Данные по качеству из этого слоя могут быть полезны для оценки достоверности отрисовки рельефа в слое L1.

Слой L1

Этот слой я бы рекомендовал как основной для построения карт глубин. В этом слое корявенькие данные L0 гарминовский надмозг магически превращает в правдоподобную картинку без ступенек, ряби и авангардистских штрихов (см картинки выше). Причем лучше использовать данные сообщества, если вы их туда загружали конечно. Если нет, привожу еще одну причину это сделать. Для примера, ниже показан участок ОВХ, на котором данные сообщества процентов на 90-95 мои. Левая картинка – данные сообщества, правая из моего эхолота. Как видно, на левой картинке свал в нижней трети и малоамлитудные борозды под ним выглядят гораздо более гладко. Свал в верхней трети выглядит более одинаково идентично, поскольку я там очень много плавал и ловил (см картинку с кодами качества выше).


167837



Коды качества в этом слое (как и во всех вышележащих) практически не имеют смысла, что в пользовательских данных, что в сообществе. В сообществе все коды имеют значение 768, в пользовательских встречаются также 256. Вероятно 256 выдается всем точкам, независимо от расстояния до сонара, когда скорость движения при записи высокая (~20км/ч и выше).

Слой L2

Начиная со слоя L2 глубина каждой ячейки вычисляется как минимальная из глубин четырех ячеек нижележащего слоя (L1 для слоя L2). Коды качества распределены также как L1. Значение кода качества в файлах пользователя, в отличие от глубины, вычисляется как максимальное из четырех ячеек нижележащего слоя (L1 для слоя L2)

Слои L3, L4 и L5

В этих слоях все одинаково. Глубина вычисляется также как для L2. Коды качества в файлах пользователя распределены также как в L1 и L2. В файлах сообщества все точки имеют код 256.

Заключение

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

Читалка уже есть. Кому нужна - пишите, буду отвечать по мере возможности. Денег не возьму, писал для себя. Поделитесь данными со мной или с сообществом – буду признателен. Поделитесь интересными точками на ОВХ – буду несказанно рад (конфиденциальность гарантирую).
 

admin

Administrator
Команда форума
Регистрация
01.04.2005
Сообщения
4 716
Местоположение
Новосибирск
@Poruchik, а можете чуть подробнее написать, как и для чего можно на практике использовать приведенную информацию?
А то я запутался - вроде большой труд проделан, а как и зачем это можно использовать, не понимаю.
 

Poruchik

Бывалый рыбак
Регистрация
31.08.2010
Сообщения
35
Местоположение
Новосибирск
@admin, думаю эта информация будет интересна всем, кто занимается составлением карт глубин и использует данные qdc, а также всем кто хочет создать свой конвертер данных этого формата.
 

gps38region

Активный рыбак
Регистрация
25.09.2019
Сообщения
66
Местоположение
Иркутск
QCC файлы , сборка QDC и заголовок похож ...
Но данные записаны как то .... , сжаты что ли ?
 

admin

Administrator
Команда форума
Регистрация
01.04.2005
Сообщения
4 716
Местоположение
Новосибирск
А данные сообщества тоже можно вытащить для дальнейшего использования в других местах или только свои?
 

Poruchik

Бывалый рыбак
Регистрация
31.08.2010
Сообщения
35
Местоположение
Новосибирск
@admin, мой скрипт позволяет вытащить любые данные (глубину, коды надежности) любого слоя (от L0 до L5) из любой подпапки как сообщества так и пользовательских.
 

Poruchik

Бывалый рыбак
Регистрация
31.08.2010
Сообщения
35
Местоположение
Новосибирск
@admin,
167903

Стартовый дмалогпозволяет выбрать какие данные (глубина или код качества) из какого слоя данных вы хотите экспортировать и в каком формате (CSV или ESRI ASCII Grid).
При экспорте в CSV будет создан текстовый файл (разделитель запятая) с полями ID - номер по порядку; X - долгота в десятичных градусах; Y - широта в десятичных градусах; Depth(m)- глубина в метрах; либо ValCode - код качества вместо глубины.
При экспорте в ESRI ASCII Grid будет создано 2 файла с расширениями .grd и .prj Полученный растр можно загрузить во многие ГИС (например QGIS) и конвертировать в более быстрочитаемый формат.
 

mr.bi2014

Новичок
Регистрация
23.01.2019
Сообщения
7
@Poruchik, Добрый день . А где собственно сам конвертер раздобыть ?
 

Beverly_Proctor

Новичок
Регистрация
30.10.2022
Сообщения
2
Здравствуйте! Добавил слой Garmin Quickdraw Contours в SAS.Planet 221009.10311 Nightly, исправно отображается в списке слоев как "Other maps" / "Garmin Quickdraw Marine Images" и собственно на карте. Теперь бы закинуть их в навигатор в формате Garmin Tile Format, но не тут-то было. Выбираю район, "Selection Manager", на всякий случай выкачиваю нужные масштабы (z15..z19), далее иду в "Export", в списке "Export selection to format" указываю "JNX raster map for Garmin", ниже в блоке "Map" выбираю "Garmin.ru" (ничего более похожего в списке нет, привел его во вложении). Жму "Start", появляется и тут же исчезает окно загрузки. В указанной папке пусто. ЧЯДНТ?
 

Вложения

  • Maps 2022-10-30.pdf
    90.7 КБ · Просмотры: 107
  • 2022-10-30_11-06-09.png
    2022-10-30_11-06-09.png
    165.1 КБ · Просмотры: 101

Beverly_Proctor

Новичок
Регистрация
30.10.2022
Сообщения
2
В предыдущем сообщении, которое не могу отредактировать, забыл уточнить, что "JNX version" на вкладке "Additional" выставил в "3". Предполагаю, что старичок Колорадо если и поддерживает, то только ее, но не также доступную в SAS.Planet четвертую версию.
Жму "Start", появляется и тут же исчезает окно загрузки. В указанной папке пусто.
Изменил порядок масштабных слоев на обратный, с z19 до z15 — процесс пошел
Файл .jnx исправно сохранился, весом 157 МБ. Закинул его на карту памяти в папку Garmin/BirdsEye. Кроме этого файла в указанной папке ничего нет. На внутренней памяти в Garmin/BirdsEye также пусто. Colorado 300 после включения выдаёт
ОК, попробовал пееркинуть файл в папку внутренней памяти — то же.

Пробую сохранить самый мелкий масштаб (z18 / Garmin zoom 5.. 200m) в "IMG raster map for Garmin". Но без "Path to map compiler (bld_gmap32.exe)" и "Path to map compiler license (* mpl)" приложение выдает ошибку
MPC compiler path is not set or incorrect!
Т. е. в моем случае не получается загрузить в аппаратный навигатор ни тайловый вариант карт глубин Garmin Quickdraw Contours, ни "одним куском" фиксированного масштаба.