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

Post on 25-May-2015

216 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

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 — факс

vkonovalov@yandex-team.ru

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

Вопросы?

top related