js lab 2017_mapbox gl: как работают современные интерактивные...

134
как работают современные векторные карты Владимир Агафонкин 25.03.2017 GL

Upload: geekslab-odessa

Post on 13-Apr-2017

23 views

Category:

Technology


9 download

TRANSCRIPT

Page 1: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

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

GL

Page 2: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 3: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 4: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Mapbox — open source

Page 5: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 6: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 7: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 8: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 9: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 10: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 11: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 12: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 13: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 14: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 15: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 16: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 17: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 18: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 19: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

Тайлы

Page 20: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 21: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

OpenLayers

Page 22: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 23: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

MAPS.ME

Page 24: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 25: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

GL

Page 26: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

open source

Page 27: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 28: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 29: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

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

Page 30: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

~

Page 31: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 32: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 33: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

времени

Page 34: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 35: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 36: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

любой объект на карте может быть интерактивным

Page 37: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 38: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 39: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 40: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 41: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

mapbox.com/studio

Page 42: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 43: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 44: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 45: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 46: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 47: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 48: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

less bandwidth

Page 49: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 50: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 51: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 52: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 53: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 54: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 55: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 56: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

WebGL — 3D API?

Page 57: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

2D API

Page 58: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 59: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

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

Page 60: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 61: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 62: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 63: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 64: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 65: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 66: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 67: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 68: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 69: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

соединения

Page 70: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 71: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 72: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 73: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

github.com/mapbox/earcut (JS) github.com/mapbox/earcut.hpp (C++)

Page 74: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 75: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 76: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

интервалы символов/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 77: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 78: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

SDFsigned distance fields

Page 79: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 80: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 81: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 82: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

mapbox/shelf-pack (JS) mapbox/shelf-pack-cpp (C++)

Page 83: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 84: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

icu4cC + Emscripten = JS

github.com/mapbox/mapbox-gl-rtl-text

Page 85: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 86: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 87: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

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

Page 88: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

/mapbox/pbf (JS)

/mapbox/protozero (C++)

Protocol Buffers

Page 89: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

в 3-4 раза компактнее JSON (gzip)

в 6-7 раз быстрее JSON.parse

Page 90: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

github.com/mapbox/ vector-tile-spec

Page 91: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 92: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

UI JS

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

UI

Page 93: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

UI

Worker JS

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

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

Page 94: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

UI

Worker JS

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

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

UIUI

Page 95: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

UI

processing

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

loading data

UIUImain thread

web worker

Page 96: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 97: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 98: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 99: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

R-tree

Page 100: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

github.com/mapbox/grid-indexgithub.com/mourner/rbush

Page 101: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 102: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

Ёханый бабай

Page 103: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

данных

Page 104: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

~

Page 105: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

mapbox/geojson-vt (JS)mapbox/geojson-vt-cpp (C++)

Page 106: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

кластеризация точек

Page 107: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

mapbox/supercluster (JS)mapbox/supercluter-hpp (C++)

Page 108: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 109: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 110: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 111: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

mapbox.com/studio

Page 112: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 113: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 114: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 115: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 116: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 117: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

Mapbox GL Native C++11

Android, iOS, macOS, Qt, Node

github.com/mapbox/ mapbox-gl-native

Page 118: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 119: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 120: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 121: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

mapbox/pixelmatch (JS)mapbox/pixelmatch-cpp (C++)

сравнение скриншотов с учетом антиалиасинга

Page 122: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

AppVeyor

Page 123: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

инструменты

Page 124: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

browserify watchify

Page 125: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

ES6 + Bublé

Page 126: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

ESLint

Page 127: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 128: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 129: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 130: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Page 131: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 132: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин

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

Leaflet? ^___^

Page 133: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин
Page 134: JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир Агафонкин