24
Графика на карте в API 2.0 Антон Корзунов, разработчик интерфейсов API Яндекс.Карт APIшник Яндекс.Карт , Москва, 26 апреля 2012

Антон Корзунов "Графика на карте в API 2.0"

  • Upload
    yandex

  • View
    1.918

  • Download
    0

Embed Size (px)

DESCRIPTION

APIшник Яндекс.Карт, Москва, 26.04.2012 Рассказ Антона Корзунова (разработчика интерфейсов API Яндекс.Карт) о графике в API 2.0.

Citation preview

Page 1: Антон Корзунов "Графика на карте в API 2.0"

Графика на карте в API 2.0

Антон Корзунов,разработчик интерфейсов API Яндекс.Карт

APIшник Яндекс.Карт, Москва, 26 апреля 2012

Page 2: Антон Корзунов "Графика на карте в API 2.0"

Когда мы в первый раз слышим про графику

1

Page 3: Антон Корзунов "Графика на карте в API 2.0"

Потом мы осознаем, что так не получится

2

Page 4: Антон Корзунов "Графика на карте в API 2.0"

И даже так

3

Page 5: Антон Корзунов "Графика на карте в API 2.0"

Начиналось все очень хорошо

4

— VML

— VRML

— ActiveX

— Java

Правда не было никаких «ускорителей»

Page 6: Антон Корзунов "Графика на карте в API 2.0"

Графику использовать было нельзя

5

— Отображение 10 полигонов убивало браузер

— Анимация противопоказана

— Мало кто умел готовить

Page 7: Антон Корзунов "Графика на карте в API 2.0"

К сожалению на несколько лет мирзабыл про графику в интернете.

*2 секунды молчания*6

100500 Gflops

3dfx Voodoo

DirectX 10

GeForce

Shaders

Oblivion

WoW

LA 2 Open GL 2

А тем временем в неинтернете:

Page 8: Антон Корзунов "Графика на карте в API 2.0"

API 1.x

7

— VML, SVG, SSG

— Polyline, Polygon

— Цвет, ширина обводки

— Сложный клиппинг

Page 9: Антон Корзунов "Графика на карте в API 2.0"

Не будем оригинальны

8

Page 10: Антон Корзунов "Графика на карте в API 2.0"

API 2.0

9

— VML, SVG, Canvas

— Polyline, Polygon, Circle, Rectangle, Image

— Цвет, ширина контура, стиль контура,

— множественная прозрачность

— Оптимизация для высокодетализированных

— данных

Page 11: Антон Корзунов "Графика на карте в API 2.0"

Мультфильмы!

10

Page 12: Антон Корзунов "Графика на карте в API 2.0"

1. Определить геометрию:geometry.Polyline([[x,y],[x,y]])

geometry.Polygon([[[x,y],[x,y]]])

geometry.Rectangle([[x,y],[x,y]])

geometry.Circle([x,y],radius)

geometry.Point([x,y])

2. Создать геообъект: new ymaps.GeoObject(feature)

3. Добавить на карту

4. ?????

5. Profit!

Как готовить

11

Page 13: Антон Корзунов "Графика на карте в API 2.0"

Добавляем метки на Canvas

12

new ymaps.GeoObject({ geometry: { type: 'Point', coordinates: [x ,y] }}, { preset: 'twirl#blueIcon', overlayFactory: ymaps.geoObject.overlayFactory.interactiveGraphics

});

Page 14: Антон Корзунов "Графика на карте в API 2.0"

Очень много меток

13

Page 15: Антон Корзунов "Графика на карте в API 2.0"

Умная графика

14

— Полигональная симплификация

— Оптимизация под viewport

— СSG

— Оптимизация рендеринга

— Быстрая математика

— Различные технологии одновременно

Page 16: Антон Корзунов "Графика на карте в API 2.0"

Симплификация

15

— На этапе вычисления PixelGeometry

— Выполняется в 2 этапа:

1. Отброс соседних вершин

2. Симплификация контура

Page 17: Антон Корзунов "Графика на карте в API 2.0"

Оптимизация под viewport

16

— RenderManager = ObjectManager в API 1.x

— graphics.Pane умеет клипаться

— graphics.Shape отбрасывает из себя крупные

— куски, которые не помещаются на карте

— Мы используем Sutherland-Cohen. Графика

— справляется с многоконтурными объектами

Page 18: Антон Корзунов "Графика на карте в API 2.0"

ConstructiveSolidGeometry

17

— Если fillRule = evenOdd, контуры полигона

— вырезаются друг из друга

— Нативно для VML и SVG. Обучили Canvas

— Если сложный полигон, алгоритмически

— вырезаем дырку

— А VML не умеет fillRule = nonZero

Page 19: Антон Корзунов "Графика на карте в API 2.0"

Оптимизация рендеринга

18

— И у вас Canvas, а у нас?

— А у нас тайловый Canvas

Page 20: Антон Корзунов "Графика на карте в API 2.0"

И многое другое

19

— Математика на основе монотонов

— Бинарный поиск

— Сложные графические фигуры

— Поддерживает интерактивность, анимации,

— любой браузер

Page 21: Антон Корзунов "Графика на карте в API 2.0"

Еще быстрее можно?

20

Если нужна скорость, используйте

overlay.staticGraphics напрямую

Его, кстати, можно добавить в любой IPane

(можно получить ускорение до двух раз, а можно и наоборот)

Page 22: Антон Корзунов "Графика на карте в API 2.0"

Лучшее, конечно, впереди

21

Page 23: Антон Корзунов "Графика на карте в API 2.0"

Помните!

22