Легенда
    неизвестно
    ещё не описано

Файл Garmin IMG

Смещение Размер Имя
0x0000 0x0400 Заголовок
0x0400 ?*0x0200 Таблица размещения
? ?*? Внутренние файлы с выравниванием по границе блоков

Заголовок

Смещение Размер Комментарий содержимого
0x000 10 Нули
0x00A 1 Месяц (1..12)
0x00B 1 Год (0..99)
0x00C 3 Нули
0x00F 1 Контрольная сумма = -(сумма всех байтов файла кроме этого)
Полная сумма байтов файла должна давать 0
0x010 6 подпись = "DSKIMG"
0x016 2 = 00 02
0x018 2 (04 00), (10 00) ?
0x01A 2 = 10 00
0x01C 2 (20 00), (80 00) ?
0x01E 2 Нули
0x020 16 + 9 Нули
0x039 2 Год
0x03B 1 Месяц
0x03C 1 День
0x03D 1 Час
0x03E 1 Минута
0x03F 1 Секунда
0x040 1 = 02
0x041 8 подпись = "GARMIN\0\0"
0x049 20 Первая часть имени карты с пробелами на конце
0x05D 2 = 10 00
0x05F 2 = w[0x018]
0x061 1 = 09
0x062 1 Код размера блока данных: 0 - 512, 1 - 1024, 2 - 2048, 3 - 4096, 4 - 8192
Размер блока = 1 << (b[0x061]+b[0x062])
0x063 2 = (w[0x01A] * w[0x018] * w[0x01C]) >> b[0x062]
0x065 31 Вторая часть имени карты с пробелами и \0 на конце
0x084 12 Нули
0x090 19 * 16 Нули
0x1C0 3 = 01 00 00
0x1C3 1 = b[0x01A]-1
0x1C4 1 = b[0x018]
0x1C5 1 = b[0x01C]-1
0x1C6 4 Нули
0x1CA 4 = w[0x01A] * w[0x018] * w[0x01C]
0x1CE 2 Нули
0x1D0 32 Нули
0x1F0 14 Нули
0x1FE 2 = 55 AA
0x200 512 Нули

Таблица размещения

Таблица размещения состоит из описателей. Первый описатель содержит список блоков, занятых заголовком и таблицей размещения. Другие описатели содержат список блоков, которые заняты внутренними файлами. Размер внутеннего файла может превысить 240 блоков, тогда для него используется более одного описателя.

Описатель таблицы размещения

Смещение Размер Комментарий содержимого
0x000 1 0 - пустой, 1 - занят
0x001 8 Имя файла
0x009 3 Расширение имени файла (Тип внутреннего файла)
0x00C 4 Размер в байтах файла, если (номер описателя == 0), иначе - 0
0x010 1 00 для внутреннего файла,
03 для служебных данных (в самом первом описателе)
0x011 1 Номер описателя для данного файла
0x012 12 Нули
0x020 240*2 Номера блоков, занимаемых файлом (FFFF - нет блока)

Внутренние файлы

Внутренние файлы имеют заголовок и содержимое

Общая часть заголовка для внутренних файлов

Смещение Размер Комментарий содержимого
0x00 2 Размер всего заголовка
0x02 10 Подпись = "GARMIN XXX", где XXX - соответствует типу внутреннего файла
0x0C 1 01
0x0D 1 Версия формата (= 00)
0x0E 2 Год создания внутреннего файла
0x10 1 Месяц
0x11 1 День
0x12 1 Час
0x13 1 Минута
0x14 1 Секунда

Файл TRE (структура карты)

Смещение Размер Комментарий содержимого
0x15 3 N граница
0x18 3 E граница
0x1B 3 S граница
0x1E 3 W граница
0x21 4 Смещение начала уровней
0x25 4 Размер данных уровней
0x29 4 Смещение начала групп
0x2D 4 Размер данных групп
0x31 4 Смещение начала копирайтов
0x35 4 Размер данных копирайтов
0x39 2 Размер отдельного блока копирайта (= 03 00)
0x3B 2 Нули
0x3D 2 Нули
0x3F 4 Смещение данных ?
0x43 4 Размер данных ?
0x47 2 01 00
0x49 1 Нули
0x4A 4 Смещение начала ломаных
0x4E 4 Размер данных ломаных
0x52 2 Размер записи об отдельной ломаной
0x54 2 Нули
0x56 2 Нули
0x58 4 Смещение начала полигонов
0x5С 4 Размер данных полигонов
0x60 2 Размер записи об отдельном полигоне
0x62 2 Нули
0x64 2 Нули
0x66 4 Смещение начала точек информации
0x6A 4 Размер данных точек информации
0x6E 2 Размер записи об отдельной точке информации
0x70 2 Нули
0x72 2 Нули
Дополнительные поля, не используемые WorldMap-99
0x74 4 Идентификатор карты

Данные уровней

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

Формат записи уровня
Смещение Размер Комментарий содержимого
0x00 1 4 бита Масштаб MapSource
3 бита Нули
1 бит Флаг отсутствия в уровне собственных данных (всё берется с предыдущего уровня)
0x01 1 Количество битов на координату
0x02 2 Количество групп данного уровня

Данные групп объектов

Данные групп объектов хранятся в записях внутри TRE, а битовые потоки самих объектов - в RGN. При этом группы выстроены не только по уровням (все группы одного уровня идут подряд в количестве указанном в записи уровня), но и по иерархии. Иерархия состоит в том, что менее подробная группа ссылается на список более подробных, покрывающих ту же область. Причем покрытая область не обязана быть идеально совпадающей с областью менее подробной группы. Более подробные группы просто описывают все те же элементы, который были в менее подробной с добавлением новых подробностей. Организуется иерархия наличием поля с номером первой группы списка и наличием флага конца списка. Ссылки на номера первых блоков начинаются с 1 а 0 означает отсутствие более подробных групп. Т.к. у групп на самом подробном уровне ссылка была бы всегда 0, данное поле в записи данных этих групп отсуттвует, из-за чего размер записи уменьшается на 2 байта. Перекрывание друг друга для групп одного уровня допустимо. В целом это похоже на R-дерево, в котором объекты содержатся не только на листьях, но и в узловых элементах, хотя и с меньшим уровнем подробности.

В конце данных групп находятся запись следующего формата:
Смещение Размер Комментарий содержимого
0x00 3 Смещение в RGN после битового потока последней группы
0x03 1 = 00
Формат записи группы объектов
Смещение Размер Комментарий содержимого
0x00 3 Смещение начала битового потока в RGN
0x03 1 Маска типов объектов, присутствующих в группе:
0x10 POI
0x20 Points
0x40 Polylines
0x80 Polygons
0x04 3 Координата X базовой точки в абсолютных координатах
0x07 3 Координата Y базовой точки в абсолютных координатах
0x0A 2 15 бит Ширина области группы в масштабе уровня
1 бит Флаг последней группы в списке, покрывающем область менее подробной группы
0x0C 2 Высота области группы в масштабе уровня
Поля не используемые группами самого подробного уровня, из-за чего не сохраняются в файле
0x0E 2 Номер первой более подробной группы из списка, покрывающего область данной группы. Номера начинаются с 1, а 0 означает отсутствие списка.

Данные копирайтов

Сами копирайты хранятся в LBL файле, а в RGN хранятся тройки байтов, описывающих смещение в LBL.

Файл RGN (объекты карты)

Смещение Размер Комментарий содержимого
0x15 4 Смещение начала данных
0x19 4 Размер данных

Файл содержит смещения для строк копирайтов и блоки данных для каждой из групп RGN файла.

Формат блока данных для группы

Блок данных для группы состоит из необязательного массива смещений и нескольких битовых потоков. Массив смещений используется для разграничения битовых потоков разнородных данных группы. При этом первый битовый поток не имеет записи в массиве смещений, а последующие - имеют 2-х байтную запись со смещением первого байта битового потока от начала блока данных группы. Битовые потоки разнородных объектов расположены в порядке приоритета вида объекта - POI, Points, Polylines, Polygons. Окончанием битового потока считается либо начало следующего битового потока данной группы, либо начало блока данных следующей группы, либо смещение из завершающей записи данных о группах.

Формат битового потока POI

Информационные точки хранятся в записяз следующего вида:
Смещение Размер Комментарий содержимого
0x00 1 Тип
0x01 22 бита Тип

Формат битового потока Point

Формат битового потока Polyline

Формат битового потока Polygon

Формат битового потока координат ломаной

знак смещения по X 0 переменный (+1 к размеру блока)
10 фиксированный положительный
11 отрицательный
знак смещения по Y 0 переменный (+1 к размеру блока)
10 фиксированный положительный
11 отрицательный
поток битов с координатами точек
Пара координат для каждой точки может предваряться одним дополнительным битом (неизвестного назначения ?).

Формат координаты

Если знак координаты фиксированный, то она всегда занимает один блок:
xx...x = знак(xx...x)
Если знак переменый, то она выглядит так (N - к-во блоков 100...0):
100...0 100...0 ... 0хх...х = N*(011...1)+(0xx...x)
100...0 100...0 ... 1хх...х = -N*(011...1)+((1xx...x)-2*(100...0))
Блоки 100...0 могут отсутствовать и тогда координата занимает только один блок.
Координаты хранятся в масштабе уровня объекта.

Файл LBL (надписи и другие дополнительные свойства объектов)

Смещение Размер Комментарий содержимого
0x15 4 Смещение начала данных текста/имен
0x19 4 Размер данных текста/имен
0x1D 1 Нули
0x1E 1 Вид кодирования символов: 6 - 6бит, 9 - SBCS, 10 - MBCS
0x1F 4 Смещение начала данных о странах
0x23 4 Размер данных о странах
0x27 4 Размер записи об отдельной стране
0x2B 2 Нули
0x2D 4 Смещение начала данных о регионах
0x31 4 Размер данных о регионах
0x35 4 Размер записи об отдельном регионе
0x39 2 Нули
0x3B 4 Смещение начала данных о городах
0x3F 4 Размер данных о городах
0x43 4 Размер записи об отдельном городе
0x47 2 (00 80) для R&R+MG Europe и (00 00) для обзорной карты
0x49 4 Смещение данных ?
0x4D 4 Размер данных ?
0x51 4 Размер отдельной записи ?
0x55 2 Нули
0x57 4 Смещение данных о дополнительных свойствах точек информации
0x5B 4 Размер данных о дополнительных свойствах точек информации
0x5F 4 (00 20 00 00), (00 1F 00 00) ?
0x63 1 Нули
0x64 4 Смещение данных ?
0x68 4 Размер данных ?
0x6C 4 Размер отдельной записи ?
0x70 2 Нули
0x72 4 Смещение данных ZIP кодов
0x76 4 Размер данных ZIP кодов
0x7A 4 Размер записи об отдельном ZIP коде
0x7E 2 Нули
0x80 4 Смещение данных о шоссе
0x84 4 Размер данных о шоссе
0x88 4 Размер записи об отдельном шоссе
0x8C 2 Нули
0x8E 4 Смещение данных о выходах
0x92 4 Размер данных о выходах
0x96 2 Размер записи об отдельном выходе
0x98 2 (00 00), (01 00), (05 00) ?
0x9A 2 Нули
0x9С 4 Смещение данных дополнительных свойств шоссе
0xA0 4 Размер данных дополнительных свойств шоссе
0xA4 4 Размер записи об дополнительных свойствах шоссе
0xA8 2 Нули
Дополнительные поля, не используемые WorldMap-99
0xAA 2 Кодовая страница
0xAC 2 ?
0xAE 2 ?
0xB0 4 Смещение информационной строки для сортировки
0xB4 4 Размер информационной строки для сортировки
0xB8 4 Смещение ?
0xBC 4 Размер ?
0xC0 2 Размер отдельной записи ?
0xC2 2 Нули
0xC4 4 Смещение ?
0xC8 4 Размер ?
0xCC 2 Размер отдельной записи ?
0xCE 2 Нули

Кодирование 6 бит

Символы преобразуются в блоки по 6 битов и записываются подряд в битовый поток.
Окончание имени формируется помещением 2-х битов 11 в битовый поток.
Новое имя всегда начинается с нового байта.
Символы Кодирование
'A'-'Z' [Ch-0x40]
пробел [0x00]
'0'-'9' [Ch-0x10]
межрегиональное шоссе [0x2A]
шоссе с щитом [0x2B]
шоссе с кругом [0x2C]
шоссе с малым сине-красным символом (шоссе E) [0x2D]
шоссе с большим символом (шоссе D) [0x2E]
шоссе с малым белым символом (международное) [0x2F]
разделитель на длинное и короткое имена [0x1D]
разделитель с видимой второй частью имени
при отображении полностью - заменяется пробелом
[0x1E]
разделитель с видимой первой частью имени
при отображении полностью - заменяется пробелом
[0x1F]
0x60, 'a'-'z' [0x1B][Ch-0x40]
маленькие '0'-'9' [0x1B][Ch-0x10]
разделитель с видимой второй частью имени
при отображении полностью - разделения нет
[0x1B][0x2B]
разделитель с видимой первой частью имени
при отображении полностью - разделения нет
[0x1B][0x2C]
'@' [0x1C][0x00]
'\'' [0x1C][0x02]
'!"#$%&'()*+,-./' [0x1C][Ch-0x20]
':;<=>?' [0x1C][Ch-0x20]
'[\]^_' [0x1C][Ch-0x30]

Кодирование 8 бит (SBCS)

Каждый символ занимает 1 байт, а окончание строки определяется по нулевому байту.
Символы Кодирование
межрегиональное шоссе [0x01]
шоссе с щитом [0x02]
шоссе с кругом [0x03]
шоссе с малым сине-красным символом (шоссе E) [0x04]
шоссе с большим символом (шоссе D) [0x05]
шоссе с малым белым символом (международное) [0x06]
разделитель на длинное и короткое имена [0x1D]
разделитель с видимой второй частью имени
при отображении полностью - заменяется пробелом
[0x1E]
разделитель с видимой первой частью имени
при отображении полностью - заменяется пробелом
[0x1F]
разделитель с видимой второй частью имени
при отображении полностью - разделения нет
???
разделитель с видимой первой частью имени
при отображении полностью - разделения нет
???

Данные стран

Данные стран хранятся в записях.

Формат записи страны

Смещение Размер Комментарий содержимого
0x00 3 Смещение имени страны

Данные регионов

Данные регионов хранятся в записях.

Формат записи региона

Смещение Размер Комментарий содержимого
0x00 2 Номер страны, к которой относится регион.
Номера начинаются с 1, а 0 означает отсутствие привязки к стране.
0x02 3 Смещение имени региона

Файл NET (дополнительные табличные свойства объектов)

Смещение Размер Комментарий содержимого
0x15 4 Смещение начала данных
0x19 4 Размер данных
0x1D 1 Нули
0x1E 4 Смещение ?
0x22 4 Размер ?
0x26 1 Нули
0x27 4 Смещение данных улиц, сортированных в алфавитном порядке
0x2B 4 Размер данных улиц
0x2F 4 Смещение ?
0x33 4 Размер ?
Дополнительные поля, не используемые WorldMap-99
0x37 4 ?

"...если объекты в RGN содержат ссылки на NET, то хранят их в том же самом месте, где обычно хранятся ссылки на LBL (на название объекта) - тогда ссылка на название объекта хранится в NET. Кроме того в NET живут данные со списком улиц (возможно, вообще ребра дорожного графа), данные для поиска улиц и перекрестков (впрочем, не уверен), нумерация домов вдоль улиц и т.д..." Константин Галичский (Форум gps.boston.ru)

Файл NOD (граф дорог для трассировки маршрута)

Смещение Размер Комментарий содержимого
0x15

данные для автопрокладки маршрута (судя по названию, вершины дорожного графа и их атрибуты)

Файл MDR (связь между многими листами карты для сквозного поиска)

Смещение Размер Комментарий содержимого
0x15

Файл SRT (таблица сортировки для MDR)

Смещение Размер Комментарий содержимого
0x15

Таблицы сортировки для национальных кодировок

online dating
HotLog
Hosted by uCoz