Валентин Коновалов "Кэш МЯК"

21
Я.Субботник, Москва, 27 марта 2010 года Разработчик Java для мобильных Валентин Коновалов Кэш МЯК

description

Валентин Коновалов "Кэш МЯК" Я.Субботник по мобильным технологиям, Москва

Transcript of Валентин Коновалов "Кэш МЯК"

Page 1: Валентин Коновалов "Кэш МЯК"

Я.Субботник, Москва, 27 марта 2010 года

Разработчик Java для мобильных Валентин Коновалов

Кэш МЯК

Page 2: Валентин Коновалов "Кэш МЯК"

1. Возможности кеша

2

Page 3: Валентин Коновалов "Кэш МЯК"

1.1. Быстрый кеш

• Кеш для МЯК работает очень быстро(чтение до 1000 тайлов в секунду)

• Производительность не зависит от его размера

3

Page 4: Валентин Коновалов "Кэш МЯК"

1.2. Большой кеш

Кеш для МЯК может хранить терабайты данных

Если полностью заполнить кеш картами, то его размер составит примерно 70 ТБ.

4

Page 5: Валентин Коновалов "Кэш МЯК"

1.3. Зачем нужно знать формат?

5

1. Для записи и накладывания своих карт2. Для нанесения своих объектов и схем3. Для изменения существующих карт

Page 6: Валентин Коновалов "Кэш МЯК"

2. Преобразования координат

6

Page 7: Валентин Коновалов "Кэш МЯК"

1.1. Земля – эллипсоид WGS84,карта – квадрат

85.084

-85.084

0.000

-180 0 1807

Page 8: Валентин Коновалов "Кэш МЯК"

1.2. Широта/долгота и меркатор

8

Эксцентриситет

Радиус

Page 9: Валентин Коновалов "Кэш МЯК"

1.3. Внутренняя проекция МЯК

Меркатор

Внутренняя проекция

Меркатор → внутренняя проекция (Z23)

9

Page 10: Валентин Коновалов "Кэш МЯК"

1.4. Координаты тайлов

Любой тайл карты задается четырьмя цифрами:

увеличение; тип; i, j:

0,0

0,1

1,0

1,1

10

Page 11: Валентин Коновалов "Кэш МЯК"

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

Page 12: Валентин Коновалов "Кэш МЯК"

2. Работа с кешем

12

Page 13: Валентин Коновалов "Кэш МЯК"

2.1. В каком файле?

Тайлзум 17

i 0x26B02j 0x14104

лежит в файле

/yandexmaps/cache/17/21/64/B11(/yandexmaps/cache/зум/XY/XY/XYтип)

13

Page 14: Валентин Коновалов "Кэш МЯК"

2.2. Что внутри?

Размер Содержимое

Заго

лово

к

4 байт YNDX – “магическое число”

2 байт зарезервированное место

4 байт Размер заголовка (HEADSIZE)

3 байт “Автор” кеша (JME, RIM, SYM, AND, WIN, 0x000000)

HEADSIZE-13

зарезервированное место, HEADSIZE ≥ 1024

ТС TABLESIZE Таблица смещений и размеров тайловТайлы До 300 МБ Сами тайлы

порядок байт – Little Endian для любого числа

14

Page 15: Валентин Коновалов "Кэш МЯК"

2.2.1. Таблица смещений и размеров тайлов

TABLESIZE = zoom > 6 ? 65536*6 : (2^(2*(zoom + 1)))*6

В таблице лежат записи длиной по 6 байт:

Размер Данные

4 байт Смещение в файле от начала файла до данных тайла

2 байт Размер тайла в байтах

15

Page 16: Валентин Коновалов "Кэш МЯК"

2.2.2. Поиск нужного тайла в файле

Номер записи в таблице смещений равен мортоновскомухэшу от чисел 0x02 и 0x04, здесь №36

16

0x26B020x14104

Page 17: Валентин Коновалов "Кэш МЯК"

2.2.3. Хэш Мортона

Мортоновский хэш двух чисел получается чередованием битов этих чисел, например, хyxyxy.

17

Page 18: Валентин Коновалов "Кэш МЯК"

2.3. Записываем новый тайл

1. Запомнить длину файла

2. Дописать новый тайлик в конце файла

3. В таблицу смещений и размеров (в ячейку номер 36) записать запомненное значение длины файла и размер тайла

18

Page 19: Валентин Коновалов "Кэш МЯК"

2.4. PROFIT!

19

Page 20: Валентин Коновалов "Кэш МЯК"

20

Page 21: Валентин Коновалов "Кэш МЯК"

Разработчик Java для мобильных

119021, Россия, Москва,ул. Льва Толстого, 16.

+7 (495) 739-00-00+7 (495) 739-70-70 — факс

[email protected]

Валентин Коновалов

Вопросы?