Инструменты пользователя

Инструменты сайта


development:containers_open

Это старая версия документа.


Упаковка тайлов GMXTiles, версия 1

Расширение

  • .gmxtiles или .tiles - первый файл контейнера
  • .gmxtiles.N или .tiles.N - дополнительный файл контейнера с номером N>=2

Описание формата заголовка контейнера тайлов

Заголовок контейнера полностью записывается в начале первого файла. Если контейнер разбит на несколько файлов, то файлы, начиная со второго, содержат только данные тайлов.

Номера байтов, начиная с 0Описание данныхТипы
0-3Заголовок файла: «GMTC» (GeoMixer Tile Container)char[4]
4-7Максимальный размер одного файла контейнера (MAX_VOLUME_SIZE) в байтах. Если равно 0, то без ограничений. Если не равно 0, то контейнер может быть разбит на несколько файлов.unsigned int32
8Версия формата упаковки = 1byte
9Проекция тайлов: 0 - EPSG:3395 (World_Mercator), 1 - EPSG:3857 (Web_Mercator)byte
10количество дополнительных метатеговbyte
11Тип тайлов: 0,8 - jpeg, 1 - png, 2 - gif, 4 - tiff, 5 - произвольный (определяется дополнительным байтом в индексе), 16 - JP2 (JPEG2000)byte
12-523Граничные номера тайлов в упаковке для зумов с 0 по 31. Формат перечисления: z0:{minx,miny,max,maxy}, z1:{minx,miny,max,maxy},…,z31:{minx,miny,max,maxy}. minx - минимальный номер тайла в упаковке по x для данного зума, miny - минимальный номер тайла по y для данного зума, maxx - максимальный номер тайла по x + 1, maxy - максимальный номер тайла по y + 1. Если minx=miny=maxx=maxy=0, то для данного зума в контейнере нет тайловunsigned int32[128]
524 - 524+(13*max_tiles)-1заголовок для каждого тайла по порядку от 0 до max_tiles-1. Формат заголовка для тайла: {offset,size,flags}, где offset - отступ от начала первого файла контейнера, size - размер тайла в байтах, flags - задаёт формат тайла, если установлен произвольный формат. max_tiles - максимально возможное количество тайлов в контейнере, формулу для вычисления max_tiles см. ниже{unsigned int64, unsigned int32, byte}[num_tiles]
524+(13*max_tiles) - … Дополнительные метаданные контейнера в формате: {metatag_name,data_size,data}. Примеры значений metatag_name: HIST - гистограмма, STAT - статистика. Формат данных внутри поля data определяется отдельным описанием по каждому типу метаданных. Количество тегов указано в байте номер 10 {byte[4], unsigned int32, byte[data_size]}

Вычисление max_tiles - максимального количества тайлов в контейнере

unsigned int calc_max_tiles_in_container () 
{
  unsigned int max_tiles = 0;  
  for (int z=0; z<32;z++)
      if (maxx[z]!=0) max_tiles+=(maxx[z]-minxx[z])*(maxy[z]-miny[z]);
  return max_tiles;  
} 

Вычисление номера тайла в контейнере

unsigned int calc_tile_num (int x, int y, int z) 
{
  unsigned int tile_num = 0;  
  for (int i=0; i<z;i++)
  {
     tile_num+=(maxx[i]-minxx[i])*(maxy[i]-miny[i]);
  }
  tile_num+=(y-miny[z])*(maxx[z]-minx[z]) + x – minx[z];
  return tile_num;  
}

Вычисление номера тома по координатам тайла

unsigned int calc_volume_num (int x, int y, int z) 
{
  return (MAX_VOLUME_SIZE == 0) ? return 0 : offset[calc_tile_num(x,y,z)]/MAX_VOLUME_SIZE;  
}

Описание структуры метатега STAT (статистика)

Номера байтов, начиная с 0Описание данныхТипы
0-3num_bands - количество каналовunsigned int32
4 - (4 + 32*num_bands-1){минимальное значение в канале, максимальное значение, среднее значение, стандартное отклонение}double[num_bands][4]

Описание структуры метатега HIST (гистограмма)

Номера байтов, начиная с 0Описание данныхТипы
0-3num_bands - количество каналовunsigned int32
4-11min_val - минимальное значение в гистограммеdouble
12-19step - шаг гистограммыdouble
20-23num_vals -количество значение в гистограммеunsigned int32
24-(24+ 4*num_bands*num_vals -1)частоты по всем значениям и по всем каналам (количество пиксел в растре в данном интервале)float32[num_bands][num_vals]

*для значений гистограммы будем использовать double (min_val + n*step) как универсальный вариант, который подходит для всех типов растровых данных: byte, uint16, float32. Количество пиксел (частота) записывается в виде float32 для экономии места. По смыслу частота (количество пиксел) - это целочисленная величина, но она для больших растров теоретически может быть больше 2^32, тогда бы пришлось использовать тип int64, что накладно с точки зрения общего размера гистограммы для 16-битных изображений. Для скорости работы с гистограммой в оперативной памяти после считывания данных из файла следует перевести частоты в int64.

Описание структуры метатега NODV (nodata value)

Номера байтов, начиная с 0Описание данныхТипы
0-7nodata_value - значение пиксела, если которое обозначает отсутствие данных double
development/containers_open.1405949689.txt.gz · Последние изменения: 2014/07/21 17:34 — michigan