13. 2.1. В каком файле?
Тайл
зум 17
i 0x26B02
j 0x14104
лежит в файле
/yandexmaps/cache/17/21/64/B11
(/yandexmaps/cache/зум/XY/XY/XYтип)
13
14. 2.2. Что внутри?
Размер Содержимое
4 байт YNDX – “магическое число”
2 байт зарезервированное место
Заголовок
4 байт Размер заголовка (HEADSIZE)
3 байт “Автор” кеша (JME, RIM, SYM, AND, WIN, 0x000000)
HEADSIZE- зарезервированное место, HEADSIZE ≥ 1024
13
ТС TABLESIZE Таблица смещений и размеров тайлов
Тайлы До 300 МБ Сами тайлы
порядок байт – Little Endian для любого числа
14
15. 2.2.1. Таблица смещений и
размеров тайлов
TABLESIZE = zoom > 6 ? 65536*6 : (2^(2*(zoom + 1)))*6
В таблице лежат записи длиной по 6 байт:
Размер Данные
4 байт Смещение в файле от начала файла до данных тайла
2 байт Размер тайла в байтах
15
16. 2.2.2. Поиск нужного тайла в
файле
Номер записи в таблице
0x26B02 смещений равен мортоновскому
0x14104 хэшу от чисел 0x02 и 0x04,
здесь №36
16
17. 2.2.3. Хэш Мортона
Мортоновский хэш двух чисел получается
чередованием битов этих чисел, например, хyxyxy.
17
18. 2.3. Записываем новый тайл
1. Запомнить длину файла
2. Дописать новый тайлик в конце файла
3. В таблицу смещений и размеров (в ячейку номер 36)
записать запомненное значение длины файла и
размер тайла
18