Poruchik
Бывалый рыбак
Преамбула
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\,имя каждой из которых суть шестнадцатиричная цифра от 0 до f.
Первая из семи папок может иметь всего 8 значений – соответственно разделяет Землю на 8 участков 90x90 градусов каждый.
Папки со второй по седьмую устроены одинаково – разделяют предыдущую область на 16 секторов (4х4). Именование секторов в области слева направо и снизу вверх, как показано ниже.
Сторона квадрата (в градусах) для каждой из семи подпапок определяется формулой 90/2^2n,
где n – целое от 0 до 6.
В качестве иллюстрации ниже приведена таблица раскрывающая дерево папок и их базовых точек по пути 0\b\6\a\f\4\0 (выделены красным)
Общее описание файлов .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 от более детальных к менее детальным. Нижеприведенные таблицы показывают схему расположения данных батиметрии.
Как видно из таблицы выше пользовательские файлы содержат в начале дополнительный наиболее детальный (но отнюдь не самый полезный см. ниже) слой данных L0, из-за чего адреса слоев L1-L5 в файлах пользователя и сообщества смещены. Слои 4 и 5 присутствуют только в 0-вых файлах, поскольку они охватывают пространство всей папки (90/2^12 x 90/2^12).
Нижеприведенная таблица описывает параметры отдельных слоев.
*Код 0 обозначает, что значения глубины в записи нет. Далее этот код в тексте не упоминается. В L0 также спорадически встречаются коды со значениями >1024. Я их считаю ошибочными и заменяю на 256.
Слой L0
Данный слой присутствует только в пользовательских файлах.
Данные в вышележащий слой L1 не интерполируются. При переходе из L0 в L1 творится какое-то гарминовское шаманство. Для наглядности привожу картинки. Слева L0, справа L1, построенный по этим данным.
Во втором ряду расположены картинки распределения кодов качества для вышележащих карт глубин. Для L0 слева белые следы непосредственно под сонаром соответствуют коду 1024; далее на удалении до ~10м серая полоса – код 512; черным показан код 256. Для L1 светло-серый – код 768, серый – 256. Как видно, начиная с L1 особого смысла смотреть распределение кодов качества нет.
В целом данные из слоя L0 не пригодны для картостроения и на экране эхолота мы их не видим. Считаю к ним нужно относится как к «технологическим» сырым данным. Данные по качеству из этого слоя могут быть полезны для оценки достоверности отрисовки рельефа в слое L1.
Слой L1
Этот слой я бы рекомендовал как основной для построения карт глубин. В этом слое корявенькие данные L0 гарминовский надмозг магически превращает в правдоподобную картинку без ступенек, ряби и авангардистских штрихов (см картинки выше). Причем лучше использовать данные сообщества, если вы их туда загружали конечно. Если нет, привожу еще одну причину это сделать. Для примера, ниже показан участок ОВХ, на котором данные сообщества процентов на 90-95 мои. Левая картинка – данные сообщества, правая из моего эхолота. Как видно, на левой картинке свал в нижней трети и малоамлитудные борозды под ним выглядят гораздо более гладко. Свал в верхней трети выглядит более одинаково идентично, поскольку я там очень много плавал и ловил (см картинку с кодами качества выше).
Коды качества в этом слое (как и во всех вышележащих) практически не имеют смысла, что в пользовательских данных, что в сообществе. В сообществе все коды имеют значение 768, в пользовательских встречаются также 256. Вероятно 256 выдается всем точкам, независимо от расстояния до сонара, когда скорость движения при записи высокая (~20км/ч и выше).
Слой L2
Начиная со слоя L2 глубина каждой ячейки вычисляется как минимальная из глубин четырех ячеек нижележащего слоя (L1 для слоя L2). Коды качества распределены также как L1. Значение кода качества в файлах пользователя, в отличие от глубины, вычисляется как максимальное из четырех ячеек нижележащего слоя (L1 для слоя L2)
Слои L3, L4 и L5
В этих слоях все одинаково. Глубина вычисляется также как для L2. Коды качества в файлах пользователя распределены также как в L1 и L2. В файлах сообщества все точки имеют код 256.
Заключение
Вышеприведенного описания формата должно быть достаточно не только для того чтобы создать читалку, но и для того чтобы создать писалку, объединялку, изменялку и т.д.
Читалка уже есть. Кому нужна - пишите, буду отвечать по мере возможности. Денег не возьму, писал для себя. Поделитесь данными со мной или с сообществом – буду признателен. Поделитесь интересными точками на ОВХ – буду несказанно рад (конфиденциальность гарантирую).
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\,имя каждой из которых суть шестнадцатиричная цифра от 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). Именование секторов в области слева направо и снизу вверх, как показано ниже.
c | d | e | f |
8 | 9 | a | b |
4 | 5 | 6 | 7 |
0 | 1 | 2 | 3 |
Сторона квадрата (в градусах) для каждой из семи подпапок определяется формулой 90/2^2n,
где n – целое от 0 до 6.
В качестве иллюстрации ниже приведена таблица раскрывающая дерево папок и их базовых точек по пути 0\b\6\a\f\4\0 (выделены красным)
Общее описание файлов .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 от более детальных к менее детальным. Нижеприведенные таблицы показывают схему расположения данных батиметрии.
Как видно из таблицы выше пользовательские файлы содержат в начале дополнительный наиболее детальный (но отнюдь не самый полезный см. ниже) слой данных L0, из-за чего адреса слоев L1-L5 в файлах пользователя и сообщества смещены. Слои 4 и 5 присутствуют только в 0-вых файлах, поскольку они охватывают пространство всей папки (90/2^12 x 90/2^12).
Нижеприведенная таблица описывает параметры отдельных слоев.
*Код 0 обозначает, что значения глубины в записи нет. Далее этот код в тексте не упоминается. В L0 также спорадически встречаются коды со значениями >1024. Я их считаю ошибочными и заменяю на 256.
Слой L0
Данный слой присутствует только в пользовательских файлах.
Данные в вышележащий слой L1 не интерполируются. При переходе из L0 в L1 творится какое-то гарминовское шаманство. Для наглядности привожу картинки. Слева L0, справа L1, построенный по этим данным.
Во втором ряду расположены картинки распределения кодов качества для вышележащих карт глубин. Для L0 слева белые следы непосредственно под сонаром соответствуют коду 1024; далее на удалении до ~10м серая полоса – код 512; черным показан код 256. Для L1 светло-серый – код 768, серый – 256. Как видно, начиная с L1 особого смысла смотреть распределение кодов качества нет.
В целом данные из слоя L0 не пригодны для картостроения и на экране эхолота мы их не видим. Считаю к ним нужно относится как к «технологическим» сырым данным. Данные по качеству из этого слоя могут быть полезны для оценки достоверности отрисовки рельефа в слое L1.
Слой L1
Этот слой я бы рекомендовал как основной для построения карт глубин. В этом слое корявенькие данные L0 гарминовский надмозг магически превращает в правдоподобную картинку без ступенек, ряби и авангардистских штрихов (см картинки выше). Причем лучше использовать данные сообщества, если вы их туда загружали конечно. Если нет, привожу еще одну причину это сделать. Для примера, ниже показан участок ОВХ, на котором данные сообщества процентов на 90-95 мои. Левая картинка – данные сообщества, правая из моего эхолота. Как видно, на левой картинке свал в нижней трети и малоамлитудные борозды под ним выглядят гораздо более гладко. Свал в верхней трети выглядит более одинаково идентично, поскольку я там очень много плавал и ловил (см картинку с кодами качества выше).
Коды качества в этом слое (как и во всех вышележащих) практически не имеют смысла, что в пользовательских данных, что в сообществе. В сообществе все коды имеют значение 768, в пользовательских встречаются также 256. Вероятно 256 выдается всем точкам, независимо от расстояния до сонара, когда скорость движения при записи высокая (~20км/ч и выше).
Слой L2
Начиная со слоя L2 глубина каждой ячейки вычисляется как минимальная из глубин четырех ячеек нижележащего слоя (L1 для слоя L2). Коды качества распределены также как L1. Значение кода качества в файлах пользователя, в отличие от глубины, вычисляется как максимальное из четырех ячеек нижележащего слоя (L1 для слоя L2)
Слои L3, L4 и L5
В этих слоях все одинаково. Глубина вычисляется также как для L2. Коды качества в файлах пользователя распределены также как в L1 и L2. В файлах сообщества все точки имеют код 256.
Заключение
Вышеприведенного описания формата должно быть достаточно не только для того чтобы создать читалку, но и для того чтобы создать писалку, объединялку, изменялку и т.д.
Читалка уже есть. Кому нужна - пишите, буду отвечать по мере возможности. Денег не возьму, писал для себя. Поделитесь данными со мной или с сообществом – буду признателен. Поделитесь интересными точками на ОВХ – буду несказанно рад (конфиденциальность гарантирую).