116
Как работают современные интерактивные карты на WebGL Владимир Агафонкин, Mapbox [email protected] github.com/mourner @mourner

"Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

  • Upload
    fwdays

  • View
    379

  • Download
    1

Embed Size (px)

Citation preview

Page 1: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

Как работают современные интерактивные карты на WebGL

Владимир Агафонкин, Mapbox

[email protected] github.com/mourner @mourner

Page 2: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 3: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 4: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 5: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

100% моего кода за время работы в

Mapbox — open source

Page 6: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 7: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 8: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

карты сейчас везде

Page 9: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 10: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 11: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 12: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 13: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 14: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 15: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 16: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 17: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 18: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 19: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

традиционные карты

Page 20: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

Тайлы

Page 21: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 22: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

векторные карты

Page 23: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

Kothic JS2011:

Page 24: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 25: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 26: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

open source?

Page 27: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

открытый API?

Page 28: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

платформа для мобильных и браузеров?

Page 29: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

на основе открытых данных?

Page 30: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

GL

Page 31: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

плавное масштабирование

Page 32: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

повороты карты

Page 33: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 34: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 35: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

полный контроль над отображением данных в реальном

времени

Page 36: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 37: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 38: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 39: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 40: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

визуальный редактор карты

Page 41: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 42: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

вид в перспективе, 3D-возможности

Page 43: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 44: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

меньше трафика

Page 45: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

видео на картах

Page 46: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 47: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 48: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 49: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 50: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

почему так мало применений WebGL?

Page 51: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

делаем WebGL-приложение

Page 52: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

WebGL — 3D API?

Page 53: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

WebGL — низкоуровневый

2D API

Page 54: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 55: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

WebGL: технология очень быстрой отрисовки

треугольников

Page 56: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 57: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

vertex shader преобразовывает координаты

Page 58: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

fragment shader преобразовывает цвет пикселей

Page 59: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

отрисовка линий

Page 60: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 61: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

антиалиасинг

Page 62: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

6 треугольников

Page 63: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 64: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

атрибуты вершин

Page 65: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

2 треугольника

Page 66: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

соединения

Page 67: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

отрисовка полигонов

Page 68: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

триангуляция

Page 69: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

github.com/mapbox/earcut

Page 70: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

отрисовка текста

Page 71: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

шрифтовые текстуры

Page 72: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

интервалы символов/v4/fontstack/Arial Unicode MS Regular/0-255.pbf /v4/fontstack/Arial Unicode MS Regular/256-511.pbf /v4/fontstack/Arial Unicode MS Regular/512-767.pbf

Page 73: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 74: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

SDFsigned distance fields

Page 75: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 76: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 77: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

загрузка и обработка данных

Page 78: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 79: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

Protocol Buffersбинарный формат

компактной сериализации данных

Page 80: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

github.com/mapbox/ vector-tile-spec

Page 81: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

github.com/mapbox/pbf

Page 82: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

быстрее, чем JSON.parse

Page 83: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

в 3-4 раза меньше JSON

(gzip)

Page 84: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

UI JS

браузер залипает на объемных вычислениях

UI

Page 85: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

UI

Worker JS

браузер залипает на загрузке и пересылке данных

загрузка данных UI

Page 86: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

UI

Worker JS

браузер залипает на получении данных

загрузка данных

UIUI

Page 87: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

UI

Worker JS

браузер не залипает, если данные в ArrayBuffer

загрузка данных

UIUI

Page 88: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

размещение надписей

Page 89: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 90: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 91: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

R-tree

Page 92: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

github.com/mourner/rbush

Page 93: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 94: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

Ёханый бабай

Page 95: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

динамическая загрузка сторонних

данных

Page 96: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 97: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

github.com/mapbox/geojson-vt

Page 98: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

язык стиля карты

Page 99: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

github.com/mapbox/ mapbox-gl-style-spec

Page 100: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 101: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

мобильные устройства?

Page 102: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

Mapbox GL Native C++11

github.com/mapbox/ mapbox-gl-native

Page 103: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

тесты для рендеринга

Page 104: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 105: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

github.com/mapbox/ mapbox-gl-test-suite

Page 106: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

инструменты

Page 107: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

browserify watchify

transforms (glify, brfs, etc)

Page 108: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

ESLint

Page 109: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

тестирование: Tape

Istanbul

Page 110: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 111: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

continuous integration

Page 112: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

а что там на стороне сервера?

Page 113: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 114: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин

Вован, а когда ты сделаешь WebGL рендеринг в

Leaflet? ^___^

Page 115: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин
Page 116: "Как работают современные интерактивные карты на WebGL" Владимир Агафонкин