SlideShare a Scribd company logo
как работают
современные векторные
карты
Vladimir Agafonkin
16.02.2017
100% моего кода
за время работы в
Mapbox — open source
Тайлы
OpenLayers
MAPS.ME
open source
платформа для
мобильных и
браузеров
на основе
открытых данных
плавное
масштабирование и
поворот карты
~
полный контроль
над отображением
данных в реальном
времени
любой объект на
карте может
быть
интерактивным
визуальный
редактор карты
mapbox.com/studio
вид в перспективе,
3D-возможности
меньше трафика
less bandwidth
видео на картах
почему так мало
применений
WebGL?
делаем WebGL-приложение
WebGL — 3D API?
WebGL —
низкоуровневый
2D API
WebGL:
технология очень
быстрой отрисовки
треугольников
vertex shader
преобразовывает координаты
fragment shader
преобразовывает цвет пикселей
отрисовка линий
антиалиасинг
6 треугольников
атрибуты вершин
2 треугольника
соединения
отрисовка полигонов
триангуляция
github.com/mapbox/earcut (JS)
github.com/mapbox/earcut.hpp (C++)
отрисовка текста
шрифтовые
текстуры
интервалы символов
/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
signed distance fields
mapbox/shelf-pack (JS)
mapbox/shelf-pack-cpp (C++)
icu4c
C + Emscripten
github.com/mapbox/mapbo
x-gl-rtl-text
загрузка и обработка
данных
Protocol Buffers
бинарный формат
компактной сериализации
данных
/mapbox/pbf (JS)
/mapbox/protozero (C++)
Protocol Buffers
в 3-4 раза компактнее
JSON (gzip)
в 6-7 раз быстрее
JSON.parse
github.com/mapbox/
vector-tile-spec
UI JS
браузер залипает
на объемных
вычислениях
UI
UI
Worker JS
браузер залипает на загрузке
и пересылке данных
загрузка
данных UI
UI
Worker JS
браузер залипает
на получении данных
загрузка
данных
UIUI
UI
processing
браузер не залипает,
если данные в ArrayBuffer
loading data
UIUI
main
thread
web worker
размещение
надписей
R-tree
github.com/mapbox/grid-index
github.com/mourner/rbush
Ёханый
бабай
динамическая
загрузка сторонних
данных
~
mapbox/geojson-vt (JS)
mapbox/geojson-vt-cpp (C++)
кластеризация
точек
mapbox/supercluster (JS)
mapbox/supercluter-hpp (C++)
язык стиля карты
github.com/mapbox/
mapbox-gl-style-spec
mapbox.com/studio
мобильные
устройства?
Mapbox GL Native
C++11
Android, iOS, macOS, Qt, Node
github.com/mapbox/
mapbox-gl-native
тесты для
рендеринга
mapbox/pixelmatch (JS)
mapbox/pixelmatch-cpp (C++)
сравнение скриншотов
с учетом антиалиасинга
AppVeyor
инструменты
browserify
watchify
transforms (glify, brfs, etc)
ES6 + Bublé
ESLint
тестирование:
Tape
Nyc
а что там на
стороне сервера?
Вован,
а когда ты сделаешь
WebGL рендеринг в
Leaflet? ^___^
Mapbox GL: как работают современные векторные карты
Mapbox GL: как работают современные векторные карты

More Related Content

Similar to Mapbox GL: как работают современные векторные карты

Василика Климова
Василика КлимоваВасилика Климова
Василика Климова
CodeFest
 
Интерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центровИнтерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центров
Агентство AlterEGO
 
Технология предметно ориентированного программирования гетерогенных многоядер...
Технология предметно ориентированного программирования гетерогенных многоядер...Технология предметно ориентированного программирования гетерогенных многоядер...
Технология предметно ориентированного программирования гетерогенных многоядер...
CEE-SEC(R)
 
Расчетная работа
Расчетная работаРасчетная работа
Расчетная работаMestniy
 
Artec 3D web player
Artec 3D web playerArtec 3D web player
Artec 3D web player
Vasilika Klimova
 
100 % самоучитель Macromedia Flash MX
100 % самоучитель Macromedia Flash MX100 % самоучитель Macromedia Flash MX
100 % самоучитель Macromedia Flash MX
StAlKeRoV
 
Go Mobile! Windows Phone 7 for all
Go Mobile! Windows Phone 7 for all Go Mobile! Windows Phone 7 for all
Go Mobile! Windows Phone 7 for all
SoftServe
 
разработка Metro style приложений
разработка Metro style приложенийразработка Metro style приложений
разработка Metro style приложений
Олег Винников
 
Михаил Черномордиков Ie9
Михаил Черномордиков   Ie9Михаил Черномордиков   Ie9
Михаил Черномордиков Ie9Siel01
 
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014it-people
 
Presentation zwcad2011
Presentation zwcad2011Presentation zwcad2011
Presentation zwcad2011ZWCAD Support
 
городские панорамы на основе лазерного сканирования
городские панорамы на основе лазерного сканированиягородские панорамы на основе лазерного сканирования
городские панорамы на основе лазерного сканированияihelgi
 
Alexey semenov
Alexey semenovAlexey semenov
Alexey semenov
journalrubezh
 
Моделирование затопление территорий и ArcGIS
Моделирование затопление территорий и ArcGISМоделирование затопление территорий и ArcGIS
Моделирование затопление территорий и ArcGIS
ООО "ИНТРО-ГИС"
 
Cocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений СафроновCocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений Сафронов
Yandex
 
Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"
Yandex
 
Introduction to ArcCatalog
Introduction to ArcCatalogIntroduction to ArcCatalog
Introduction to ArcCatalog
gisproject
 
Опыт использования инновационных технологий линейки продуктов Autodesk IDS ...
Опыт использования  инновационных технологий линейки продуктов Autodesk IDS  ...Опыт использования  инновационных технологий линейки продуктов Autodesk IDS  ...
Опыт использования инновационных технологий линейки продуктов Autodesk IDS ...RnD_SM
 
Обзор и анализ инструментов проектирования и прототипирования интерфейсов
Обзор и анализ инструментов проектирования и прототипирования интерфейсовОбзор и анализ инструментов проектирования и прототипирования интерфейсов
Обзор и анализ инструментов проектирования и прототипирования интерфейсов
Rustem Gayfutdinov
 

Similar to Mapbox GL: как работают современные векторные карты (20)

Василика Климова
Василика КлимоваВасилика Климова
Василика Климова
 
Интерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центровИнтерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центров
 
Технология предметно ориентированного программирования гетерогенных многоядер...
Технология предметно ориентированного программирования гетерогенных многоядер...Технология предметно ориентированного программирования гетерогенных многоядер...
Технология предметно ориентированного программирования гетерогенных многоядер...
 
Расчетная работа
Расчетная работаРасчетная работа
Расчетная работа
 
Artec 3D web player
Artec 3D web playerArtec 3D web player
Artec 3D web player
 
100 % самоучитель Macromedia Flash MX
100 % самоучитель Macromedia Flash MX100 % самоучитель Macromedia Flash MX
100 % самоучитель Macromedia Flash MX
 
3dweb
3dweb3dweb
3dweb
 
Go Mobile! Windows Phone 7 for all
Go Mobile! Windows Phone 7 for all Go Mobile! Windows Phone 7 for all
Go Mobile! Windows Phone 7 for all
 
разработка Metro style приложений
разработка Metro style приложенийразработка Metro style приложений
разработка Metro style приложений
 
Михаил Черномордиков Ie9
Михаил Черномордиков   Ie9Михаил Черномордиков   Ie9
Михаил Черномордиков Ie9
 
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014
С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014
 
Presentation zwcad2011
Presentation zwcad2011Presentation zwcad2011
Presentation zwcad2011
 
городские панорамы на основе лазерного сканирования
городские панорамы на основе лазерного сканированиягородские панорамы на основе лазерного сканирования
городские панорамы на основе лазерного сканирования
 
Alexey semenov
Alexey semenovAlexey semenov
Alexey semenov
 
Моделирование затопление территорий и ArcGIS
Моделирование затопление территорий и ArcGISМоделирование затопление территорий и ArcGIS
Моделирование затопление территорий и ArcGIS
 
Cocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений СафроновCocaine: погружение в облака — Евгений Сафронов
Cocaine: погружение в облака — Евгений Сафронов
 
Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"
 
Introduction to ArcCatalog
Introduction to ArcCatalogIntroduction to ArcCatalog
Introduction to ArcCatalog
 
Опыт использования инновационных технологий линейки продуктов Autodesk IDS ...
Опыт использования  инновационных технологий линейки продуктов Autodesk IDS  ...Опыт использования  инновационных технологий линейки продуктов Autodesk IDS  ...
Опыт использования инновационных технологий линейки продуктов Autodesk IDS ...
 
Обзор и анализ инструментов проектирования и прототипирования интерфейсов
Обзор и анализ инструментов проектирования и прототипирования интерфейсовОбзор и анализ инструментов проектирования и прототипирования интерфейсов
Обзор и анализ инструментов проектирования и прототипирования интерфейсов
 

More from EatDog

Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем? Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем?
EatDog
 
macOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizonsmacOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizons
EatDog
 
Dependency Injections in Kotlin
Dependency Injections in KotlinDependency Injections in Kotlin
Dependency Injections in Kotlin
EatDog
 
Быстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELKБыстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELK
EatDog
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous delivery
EatDog
 
Как мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системахКак мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системах
EatDog
 
Отказоустойчивый Redis кластер
Отказоустойчивый Redis кластерОтказоустойчивый Redis кластер
Отказоустойчивый Redis кластер
EatDog
 
Кодстайл и насилие.
Кодстайл и насилие. Кодстайл и насилие.
Кодстайл и насилие.
EatDog
 
Refactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project ReactorRefactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project Reactor
EatDog
 
GraphQL: APIs the New Way.
GraphQL: APIs the New Way.GraphQL: APIs the New Way.
GraphQL: APIs the New Way.
EatDog
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
EatDog
 
Microservices in a Wild.
Microservices in a Wild.Microservices in a Wild.
Microservices in a Wild.
EatDog
 
Dependency Rejection and TDD without Mocks
Dependency Rejection and TDD without MocksDependency Rejection and TDD without Mocks
Dependency Rejection and TDD without Mocks
EatDog
 
Стероиды для Дотнетчика
Стероиды для ДотнетчикаСтероиды для Дотнетчика
Стероиды для Дотнетчика
EatDog
 
Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.
EatDog
 
OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.
EatDog
 
Нельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование APIНельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование API
EatDog
 
Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим Гопей
EatDog
 
View models for component driven
View models for component drivenView models for component driven
View models for component driven
EatDog
 
Влияние UX на исходный код приложения. Валерий Сорокобатько
Влияние UX на исходный код приложения. Валерий СорокобатькоВлияние UX на исходный код приложения. Валерий Сорокобатько
Влияние UX на исходный код приложения. Валерий Сорокобатько
EatDog
 

More from EatDog (20)

Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем? Классифицируем текст в iOS без CoreML: как и зачем?
Классифицируем текст в iOS без CoreML: как и зачем?
 
macOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizonsmacOS app development for iOS devs: expand your horizons
macOS app development for iOS devs: expand your horizons
 
Dependency Injections in Kotlin
Dependency Injections in KotlinDependency Injections in Kotlin
Dependency Injections in Kotlin
 
Быстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELKБыстрый в имплементации и в работе мониторинг с использованием ELK
Быстрый в имплементации и в работе мониторинг с использованием ELK
 
Continuous integration / continuous delivery
Continuous integration / continuous deliveryContinuous integration / continuous delivery
Continuous integration / continuous delivery
 
Как мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системахКак мы экспериментируем в больших микросервисных системах
Как мы экспериментируем в больших микросервисных системах
 
Отказоустойчивый Redis кластер
Отказоустойчивый Redis кластерОтказоустойчивый Redis кластер
Отказоустойчивый Redis кластер
 
Кодстайл и насилие.
Кодстайл и насилие. Кодстайл и насилие.
Кодстайл и насилие.
 
Refactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project ReactorRefactor to Reactive With Spring 5 and Project Reactor
Refactor to Reactive With Spring 5 and Project Reactor
 
GraphQL: APIs the New Way.
GraphQL: APIs the New Way.GraphQL: APIs the New Way.
GraphQL: APIs the New Way.
 
Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.Большие проекты, архитектура и фреймворки.
Большие проекты, архитектура и фреймворки.
 
Microservices in a Wild.
Microservices in a Wild.Microservices in a Wild.
Microservices in a Wild.
 
Dependency Rejection and TDD without Mocks
Dependency Rejection and TDD without MocksDependency Rejection and TDD without Mocks
Dependency Rejection and TDD without Mocks
 
Стероиды для Дотнетчика
Стероиды для ДотнетчикаСтероиды для Дотнетчика
Стероиды для Дотнетчика
 
Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.Domain Driven Design – просто о сложном.
Domain Driven Design – просто о сложном.
 
OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.
 
Нельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование APIНельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование API
 
Выжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим ГопейВыжить с помощью ООП. Максим Гопей
Выжить с помощью ООП. Максим Гопей
 
View models for component driven
View models for component drivenView models for component driven
View models for component driven
 
Влияние UX на исходный код приложения. Валерий Сорокобатько
Влияние UX на исходный код приложения. Валерий СорокобатькоВлияние UX на исходный код приложения. Валерий Сорокобатько
Влияние UX на исходный код приложения. Валерий Сорокобатько
 

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