Валентин Коновалов "Кэш МЯК"
DESCRIPTION
Валентин Коновалов "Кэш МЯК" Я.Субботник по мобильным технологиям, МоскваTRANSCRIPT
Я.Субботник, Москва, 27 марта 2010 года
Разработчик Java для мобильных Валентин Коновалов
Кэш МЯК
1. Возможности кеша
2
1.1. Быстрый кеш
• Кеш для МЯК работает очень быстро(чтение до 1000 тайлов в секунду)
• Производительность не зависит от его размера
3
1.2. Большой кеш
Кеш для МЯК может хранить терабайты данных
Если полностью заполнить кеш картами, то его размер составит примерно 70 ТБ.
4
1.3. Зачем нужно знать формат?
5
1. Для записи и накладывания своих карт2. Для нанесения своих объектов и схем3. Для изменения существующих карт
2. Преобразования координат
6
1.1. Земля – эллипсоид WGS84,карта – квадрат
85.084
-85.084
0.000
-180 0 1807
1.2. Широта/долгота и меркатор
8
Эксцентриситет
Радиус
1.3. Внутренняя проекция МЯК
Меркатор
Внутренняя проекция
Меркатор → внутренняя проекция (Z23)
9
1.4. Координаты тайлов
Любой тайл карты задается четырьмя цифрами:
увеличение; тип; i, j:
0,0
0,1
1,0
1,1
10
1.5. Расчет тайла для Красной площадиLat/lon 55.754, 37.6205
Меркатор 4187894, 7474249
x, y 1298156798, 673222277
i = (x>>(23-zoom))/128 = 158466
j =(y>>(23-zoom))/128 = 82180
11
2. Работа с кешем
12
2.1. В каком файле?
Тайлзум 17
i 0x26B02j 0x14104
лежит в файле
/yandexmaps/cache/17/21/64/B11(/yandexmaps/cache/зум/XY/XY/XYтип)
13
2.2. Что внутри?
Размер Содержимое
Заго
лово
к
4 байт YNDX – “магическое число”
2 байт зарезервированное место
4 байт Размер заголовка (HEADSIZE)
3 байт “Автор” кеша (JME, RIM, SYM, AND, WIN, 0x000000)
HEADSIZE-13
зарезервированное место, HEADSIZE ≥ 1024
ТС TABLESIZE Таблица смещений и размеров тайловТайлы До 300 МБ Сами тайлы
порядок байт – Little Endian для любого числа
14
2.2.1. Таблица смещений и размеров тайлов
TABLESIZE = zoom > 6 ? 65536*6 : (2^(2*(zoom + 1)))*6
В таблице лежат записи длиной по 6 байт:
Размер Данные
4 байт Смещение в файле от начала файла до данных тайла
2 байт Размер тайла в байтах
15
2.2.2. Поиск нужного тайла в файле
Номер записи в таблице смещений равен мортоновскомухэшу от чисел 0x02 и 0x04, здесь №36
16
0x26B020x14104
2.2.3. Хэш Мортона
Мортоновский хэш двух чисел получается чередованием битов этих чисел, например, хyxyxy.
17
2.3. Записываем новый тайл
1. Запомнить длину файла
2. Дописать новый тайлик в конце файла
3. В таблицу смещений и размеров (в ячейку номер 36) записать запомненное значение длины файла и размер тайла
18
2.4. PROFIT!
19
20
Разработчик Java для мобильных
119021, Россия, Москва,ул. Льва Толстого, 16.
+7 (495) 739-00-00+7 (495) 739-70-70 — факс
Валентин Коновалов
Вопросы?