Валентин Коновалов "Кэш МЯК"
-
Upload
yandex -
Category
Technology
-
view
216 -
download
3
description
Transcript of Валентин Коновалов "Кэш МЯК"
Я.Субботник, Москва, 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 — факс
Валентин Коновалов
Вопросы?