Карта в браузере: путь от спутникового снимка до...

Preview:

Citation preview

Путь карты от спутникового снимка до пользователя

Илья Таратухин, 2ГИС

План● Терминология● Сбор и подготовка данных● Backend● Frontend

Терминология

ТерминологияКарты

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

ТерминологияГеообъекты:

● точечные● линейные● площадные

ТерминологияГеокодирование

● прямое (объекты)● обратное (координаты)

ТерминологияAPI карт - Библиотека для работы с картографическими данными

● Тайлы● Слои (overlay)

○ Маркер○ Балун (каллаут)○ POI

● Проекции

ТерминологияСистемы координат (проекции)

● Географическая● Проекция меркатора (UTM, эллипсоид WGS84)

○ Проекция EPSG:3857 (тайлы)○ Проекция EPSG:4326 (данные)

Сбор и подготовка данных

Сбор и подготовка данных● Спутниковые снимки● Выверка пешими специалистами● Обзвон компаний● GPS треки

Как стать самым востребованной ГИС?

Актуальность и полнота данных!

Backend

BackendЗадачи бекенда

● прямое и обратное геокодирование● поиск точек интереса (POI)● отдача статики

BackendИнструменты для работы с динамическими данными

● Большой комбайн за деньги● Дайте OpenSource, яжпрограммист

BackendИнструменты для работы с динамическими данными

● PostgreSQL + PostGIS● MySQL + Spatial Data● Можно написать свои

BackendПроблемы статики

● файлов много● файлы маленькие (1-15кб)● на файловой системе хочется положить много файлов рядом● файлов реально много (68 719 476 736 на zoom 18)● очень много маленьких файлов, которые занимают места меньше

размера кластера, просят указатель и которые хочется положить в один каталог

BackendИнструменты для работы со статикой

● Распределенная ФС (например Ceph)● Squashfs● NoSQL (MongoDB + MongoFS)● Nginx + ФС

BackendРаздать статику с помощью FS? Реализуемо!

● отключаем журналирование● уменьшаем размер кластера● разворачиваем пути, например /z/x/y.png можно разложить в /hash[4]

/hash[3]/hash[2]/hash[1]/hash[0].png (mod_tile от OSM)

Backend/hash[4]/hash[3]/hash[2]/hash[1]/hash[0].png

// We attempt to cluster the tiles so that a 16x16 square of tiles will be in a single directory// Hash stores our 40 bit result of mixing the 20 bits of the x & y co-ordinates// 4 bits of x & y are used per byte of output

unsigned char i, hash[5];for (i=0; i<5; i++) { hash[i] = ((x & 0x0f) << 4) | (y & 0x0f);

x >>= 4;y >>= 4;

}

https://github.com/openstreetmap/mod_tile/blob/master/src/store_file_utils.c

Frontend

FrontendЗадачи фронтенда

● Визуализация данных● Взаимодействие с пользователем

FrontendИнструменты

● Leaflet● OpenLayers

Крупнейшие игроки на рынке● Cloudmate● Mapbox● OpenStreetMap● Google

Вопросы?

Recommended