Растровые IMG

Как известно, IMG-карты в формате Bluechart G2 Vision могут содержать растровые слои.
Данный документ представляет собой попытку частично документировать назначение различных полей в заголовках таких карт IMG.

В сети имеется несколько очень хороших источников информации о формате IMG и его отдельных подблоков.
Вот основные:

К сожалению, эти источники не содержат какой-либо информации о хранении растра в IMG-картах.

Попробуем разобрать основные поля заголовков карты на примере файла 00355951.GMP, наименьшей по объему и количеству изображений части свободно доступной для скачивания карты острова Isle of Man.

Смещение от
начала файла
Смещение от
начала блока
Содержимое из 00355951.GMPНазначение
0000 GMP + 000 0035 'GARMIN GMP' 0001 07DA 07 15 09 37 3A Заголовок блока GMP
0015 GMP + 015 00000000
0019 GMP + 019 000000E8 TRE
001D GMP + 01D 000001F2 RGN
0021 GMP + 021 0000027D LBL
0025 GMP + 025 00000000 NET
0029 GMP + 029 00000000 NOD
002D GMP + 02D 00000000 DEM
0031 GMP + 031 00000000 MAR
0035 GMP + 035 'Copyright'... Копирайт
 
00E8 TRE + 000 00D3 'GARMIN TRE' 0001 07DA 07 15 09 37 3A Заголовок блока TRE
00FD TRE + 015 2693EA FCE8F4 2693CA FCE81A Координаты границ карты
0109 TRE + 021 00000508 00000020 TRE1, секция уровней
0111 TRE + 029 00000486 00000082 TRE2, секция групп
0119 TRE + 031 0000047D 00000009 0003 TRE3, секция копирайтов
0123 TRE + 03B 00 00 00 00
0127 TRE + 03F 01 Флаги
0128 TRE + 040 0014 Приоритет отрисовки
012A TRE + 042 10 01 08 24 00 01 00 00 Флаги
0132 TRE + 04A 00000528 00000000 0002 00 00 00 00 TRE4
0140 TRE + 058 00000528 00000000 0002 00 00 00 00 TRE5
014E TRE + 066 00000528 00000000 0003 00 00 00 00 TRE6
015C TRE + 074 007E6E07 Map ID
0160 TRE + 078 00 00 00 00
0164 TRE + 07C 0000052E 00000020 0004 01 00 00 00 TRE7, секция растровых слоев
0172 TRE + 08A 00000528 00000006 0003 00 00 02 00 00 00 TRE8
0182 TRE + 09A 1C 72 78 19 89 72 44 BB 1B 72 71 BB 1B 72 71 BB Хэш Map ID
0192 TRE + 0AA 00 00 00 00
0196 TRE + 0AE 0000054E 00000000 0000 00 00 00 00 TRE9
01A4 TRE + 0BC 0000054E 00000000 0001 00 00 00 00 TRE10
01B2 TRE + 0CA 00 00 00 00 00
01B7 TRE + 0CF 00056E6F Номер, совпадающий с именем файла карты (0x00056E6F = 00355951)
 
01BB TRE + 0D3 'Isle of Man Copyright'... Название карты
 
01F2 RGN + 000 007D 'GARMIN RGN' 0001 07DA 07 15 09 37 3A Заголовок блока RGN
0207 RGN + 015 0000054E 00000000 RGN1
020F RGN + 01D 0000054E 000001A4 RGN2
0217 RGN + 025 02 00 00 00 00 00 00 00 FF 00 00 20 FD FC 03 00
00 00 00 00
022B RGN + 039 000006F2 00000000 RGN3
0233 RGN + 041 00 00 00 00 00 00 00 00 3F 00 00 20 FD 0F 00 00
00 00 00 00
0247 RGN + 055 000006F2 00000000 RGN4
024F RGN + 05D 00 00 00 00 00 00 00 00 FF 07 00 20 3F F7 3F 00
00 00 00 00
0263 RGN + 071 000006F2 00000070 E3 00 00 00 RGN5
 
026F 000E 000006F2 00000000 00 00 00 00 RGNEXT
 
027D LBL + 000 0200 'GARMIN LBL' 0001 07DA 07 15 09 37 3A Заголовок блока LBL
0292 LBL + 015 00000773 000000FB 00 09 LBL1
029C LBL + 01F 00000870 00000000 0000 00 00 00 00 LBL2
02AA LBL + 02D 00000870 00000000 0006 01 00 00 00 LBL3
02B8 LBL + 03B 00000870 00000000 0007 01 00 00 80 LBL4
02C5 LBL + 049 00000870 00000000 0000 00 00 00 00 LBL5
02D4 LBL + 057 00000870 00000000 00 00 00 00 00 LBL6
02E1 LBL + 064 00000870 00000000 0000 00 00 00 00 LBL7
02EF LBL + 072 00000870 00000000 0003 00 00 00 00 LBL8
02FD LBL + 080 00000870 00000000 0006 00 00 00 00 LBL9
030B LBL + 08E 00000870 00000000 0004 02 00 00 00 LBL10
0319 LBL + 09C 00000870 00000000 0003 00 00 00 00 04E4 LBL11
07 00 02 80
032D LBL + 0B0 00000762 00000011 LBL12, описание способа сортировки
0335 LBL + 0B8 0000086E 00000000 0000 00 00 LBL13
0341 LBL + 0C4 00000870 00000000 0000 00 00 LBL14
034D LBL + 0D0 00000870 00000000 002E 01 00 00 00 LBL15
035B LBL + 0DE 0000086E 00000002 0000 00 00 00 00 LBL16
0369 LBL + 0EC 00000870 00000000 0000 00 00 00 00 LBL17
0377 LBL + 0FA 00000870 00000000 0000 00 00 00 00 LBL18
0385 LBL + 108 00000870 00000000 000C 00 00 00 00 LBL19
0393 LBL + 116 0000086E 00000000 0003 00 00 00 00 LBL20
03A1 LBL + 124 00000870 00000000 0000 00 00 00 00 LBL21
03AF LBL + 132 00000870 00000000 0000 00 00 00 00 LBL22
03BD LBL + 140 00000870 00000000 0000 00 00 00 00 LBL23
03CB LBL + 14E 00000870 00000000 0000 00 00 LBL24
03D7 LBL + 15A 00000870 00000000 0000 00 00 00 00 LBL25
03E5 LBL + 168 00000870 00000000 0000 00 00 00 00 LBL26
03F3 LBL + 176 00000870 00000000 0000 00 00 00 00 LBL27
0401 LBL + 184 00000870 00000008 0004 00 00 00 00 LBL28, смещения до отдельных изображений JPEG относительно LBL29
040F LBL + 192 00000878 000005C8 LBL29, начало блока изображений
0417 LBL + 19A 00000870 00000000 0000 00 00 LBL30
0423 LBL + 1A6 00000870 00000000 0000 00 00 LBL31
042F LBL + 1B2 00000E40 00000000 0000 00 00 LBL32
043B LBL + 1BE 00000E40 00000000 0000 00 00 LBL33
0447 LBL + 1CA 00000870 00000000 0000 00 00 00 00 LBL34
0455 LBL + 1D8 00000870 00000000 0000 00 00 00 00 LBL35
0463 LBL + 1E6 0000086E 00000000 0000 00 00 LBL36
046F LBL + 1F2 00000878 00000000 0000 00 00 00 00 LBL37
 
047D TRE3 00000C Смещения до строк относительно LBL1
0480 000032
0483 000093
 
0486 TRE2 000000 00 FCE880 269380 8001 0001 0002 Группы уровней
000000 00 FCE880 2693C0 8002 0001 0003
000000 00 FCE880 2693E0 8004 0001 0004
000000 00 FCE880 2693E0 8008 0002 0005
000000 00 FCE888 2693D8 800F 0003 0006
000000 00 FCE888 2693DC 801C 0005 0007
000000 00 FCE886 2693DA 8037 0009 0008
000000 00 FCE887 2693DA 806D 0010
00 00 00 00
 
0508 TRE1 87 11 0001 Уровни
06 12 0001
05 13 0001
04 14 0001
03 15 0001
02 16 0001
01 17 0001
00 18 0001
 
0528 TRE8 130606 Параметры типов объектов. Первый - растровые тайлы.
01060D Второй - DATA_BOUNDS.
 
052E TRE7 00000000 Смещения описаний растровых слоев относительно RGN2
0532 0000002E
0536 0000005C
053A 0000008A
053E 000000B8
0542 000000F3
0546 00000169
054A 000001A4
 
054E RGN2 + 000 0D 01 FFFE 0000  07 1B 21 F8 Описания растровых слоев.
06 B3 FFFE 0000  07 1B 21 F8 Формат пока неизвестен.
BC 00 00
E0 2B 01
26940000 FCE90000 2693C000 FCE80000
00000278
057C RGN2 + 02E 0D 01 FFFD FFFF  07 23 22 78
06 B3 FFFD FFFF  07 23 22 78
BC 00 00
E0 2B 01
2693E000 FCE90000 2693C000 FCE82000
0000278
05AA RGN2 + 05C 0D 01 FFFA FFFF  07 05 80 0F
06 B3 FFFA FFFF  07 05 80 0F
BC 00 00
E0 2B 01
2693F000 FCE8F000 2693D000 FCE82000
0000278
05D8 RGN2 + 08A 0D 01 FFF2 FFFE  07 09 98 5E
06 B3 FFF2 FFFE  07 09 98 5E
BC 00 00
E0 2B 01
2693E800 FCE8F000 2693C800 FCE81800
0000278
0606 RGN2 + 0B8 0D 01 FFE5 FFFC  07 2B 42 F8
06 B3 FFE5 FFFC  07 2B 42 F8
DE 00 00
E0 2B 00
2693E800 FCE8F400 2693CC00 FCE81C00
00000350
0641 RGN2 + 0F3 0D 01 FFCB FFF9  07 33 04 DE
0D 01 FFCB FFF8  07 33 23 78
06 B3 FFCB FFF9  07 33 04 DE
DE 00 00
E0 2B 00
2693EA00 FCE8F400 2693CA00 FCE81C00
00000350
06 B3 FFCB FFF8  07 33 23 78
DE 00 00
E0 2B 00
2693EA00 FCE8F400 2693CA00 FCE81C00
00000350
06 33 FFCB FFF9  07 33 04 DE
BC 00 00
06 33 FFCB FFF8  07 33 23 78
BC 00 00
06B7 RGN2 + 169 0D 01 FF94 FFF1  07 3B 19 FC
06 B3 FF94 FFF1  07 3B 19 FC
DE 00 00
E0 2B 00
2693E900 FCE8F400 2693CB00 FCE81B00
00000350
06 33 FF94 FFF1  07 3B 19 FC
BC 00 00
 
06F2 RGN5 DF 14 06 02 20 0B Пока неизвестно
00 06 00 02 05 02
00 01 00 00 00  02 01 00 00 00
09 01 00 00 00  09 04 00 00 00
09 07 00 00 00  09 36 00 00 00
09 6C 00 00 00  09 D9 00 00 00
03 00 00 00 00  03 00 00 00 00
03 00 00 00 00  03 00 00 00 00
03 00 00 00 00  03 00 00 00 00
03 00 00 00 00  03 00 00 00 00
02 00 00 00   0F 00 00 00
0D 00 00 00   1B 00 00 00
1E 00 00 00
 
0762 LBL12 'Western Europeean' 00
 
0773 LBL1 + 000 00 'Raster Map' 00
077F LBL1 + 00C 'GARMIN LTD'...
07A5 LBL1 + 032 'Reproduced with permission'...
0806 LBL1 + 093 'Crown Coyright'...
082F 'OSGB_OS_N54143149W4533473-27M.JPG' 00
0851 'IOM_N54249345W4353571-3M.JPG' 00
 
086E LBL16 00 00
 
0870 LBL28 00000000 Смещения до изображений относительно LBL29
0874 00000350
 
0878 LBL29 + 000 Jpeg 000 Сами изображения
0BC8 LBL29 + 350 Jpeg 001

Для того, чтобы делать собственные растровые IMG осталось "всего лишь" разобраться с устройством областей TRE8, RGN2 и RGN5.

Немного информации про формат RGN2 имеется в документе exploring_img.pdf.

Рисованием непосредственно растровой картинки, судя по всему, занимается тип E0. К примеру, рассмотрим вот этот фрагмент из RGN2 + 169:

  E0 2B 00
  2693E900 FCE8F400 2693CB00 FCE81B00
  00000350

Здесь 2B некоторым образом определяет количество битов, которыми кодируется порядковый номер JPEG'а в таблице LBL29.
В рассматриваемом 00355951.GMP имеется всего 2 изображения, и здесь для индексации изображений достаточно одного байта.
А, скажем, в подфайле 00263430.GMP из карты "Lake District.img" хранится целых 896 изображений, за типом E0 следует код 25, и для индексации изображений используются уже два байта.

Далее, 2693E900 FCE8F400 2693CB00 FCE81B00 - это, очевидно, координаты отрисовки изображения, по 32 байта на каждую из координат.

00000350 - размер блока с изображением.


Пока всё. Надеюсь, что данный файл будет пополняться информацией о пока неисследованных областях.
Если у вас есть комментарии или дополнения, напишите, пожалуйста, автору.



Last modification: 15 Mar 2017
Яндекс.Метрика