Легенда |
|
неизвестно |
|
ещё не описано |
Файл 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 |
отрицательный |
поток битов с координатами точек |
Пара координат для каждой точки может предваряться одним дополнительным битом
(неизвестного назначения ?).
Формат координаты
Если знак координаты фиксированный, то она всегда занимает один блок:
Если знак переменый, то она выглядит так (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 |
|
|
|
|
|
Таблицы сортировки для национальных кодировок