Как стать автором
Обновить

Рендеринг мира

Время на прочтение3 мин
Количество просмотров7K
Ведущий программист компании MapBox Юнг Хан (Young Hahn) опубликовал стенограмму своей презентации с конференции FOSS4G.

Компания MapBox известна как разработчик open source картографической дизайн-студии TileMill и тайлового сервера TileStream. Недавно они выпустили новую систему MapBox Streets — аналог Google Streets, но на открытых картах OpenStreetMap. Это глобальный картографический сервис с зуммированием до уровня отдельных домов, тоннелей, станций метро и т.д.

В презентации, названной «Рендеринг мира» (Rendering the World) ведущий программист компании рассказывает, как им удалось сгенерировать тайлы на таком уровне зуммирования для всей планеты.



Если посчитать количество необходимых тайлов в глобальном масштабе, то объёмы данных выходят астрономические. В этой системе масштаб z0 соответствует одному тайлу на всю мировую карту, на уровне z1 карта состоит из четырёх фрагментов, на уровне z2 — 16 фрагментов и так далее. В общем, количество тайлов на каждом уровне z равняется 4z.

Если предположить совершенно высокую производительность сервера, скажем 1000 тайлов в секунду, и минимальный размер тайлов 400 байт, то уже на уровне z17 нам нужно 200 дней рендеринга, а объём картографических данных составляет 10,3 терабайта.



С такими цифрами даже сильная оптимизация рендеринга не даёт решающего эффекта. Если ускорить его вдвое, то время рендеринга увеличится всего лишь с 200 до 100 дней, что в обоих случаях неприемлемо.

Другим вариантом проблемы может быть простое увеличение количество серверов для рендеринга в реальном времени по конкретным запросам пользователям, поступающим в данный момент.



Но в реальности подобную систему трудно масштабировать. Подобные серверы медленные и дорогие в обслуживании, и для рендеринга в реальном времени требуется большое их количество, в то время MapBox — маленькая компания и не может себе этого позволить.

Как же они смогли сделать рендеринг всего мира на уровне z17? Они подошли к делу с умом. Анализ географических данных показывает, что больше половины земной поверхности на самом деле вообще не нужно рендерить. Около 60% тайлов представляют собой простые синие квадратики — территория мирового океана. В школе учат, что океан занимает 70-80% поверхности, но на самом деле синих квадратиков около 60%, потому что Антарктида и Гренландия покрывают гигантскую площадь.



Это как буквы в алфавите, 50% которых можно удалить из текста, и от этого текст не потеряет смысловой нагрузки.

Оптимизируя задачу дальше, разработчики MapBox начали анализировать, каков процент земной поверхности не несёт информационной нагрузки и может быть проигнорирован. Кроме океана, они выделили территорию суши, которая не находится рядом с береговой линией. Оказалось, что почти всегда это тоже однородные «пустые» тайлы. В общем, на береговую территорию приходится всего 2% тайлов. А если взять города, дороги и любые объекты человеческой жизнедеятельности, то они заметны всего лишь на 1% территории Земли!



Таким образом, количество тайлов на уровне z уже не равно 4z, поскольку при 1% полезной территории на каждом уровне масштаба нужно сгенерировать один единственный полезный тайл.



Система хранения тайлов MBTiles, созданная MapBox, позволяет хранить тайлы с учётом избыточности, то есть одинаковые тайлы не дублируются, а просто ссылаются на один образец. Так что вместо 10,3 терабайта вся территория Земли на уровне z17 в этой системе занимает 200 гигабайт. А вместо 200 дней работы тайл-сервера рендеринг 2% полезной территории занимает всего 4 дня.
Теги:
Хабы:
+42
Комментарии24

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн