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

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

Upload: yandex

Post on 25-May-2015

216 views

Category:

Technology


3 download

DESCRIPTION

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

TRANSCRIPT

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]

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

Вопросы?