Выбираем формат карт для проекта

Выбираем формат карт для проекта

Векторные карты или растровые? Попробуем рассмотреть основные различия между этими двумя типами и обсудим, когда следует использовать одно или другое.

Растровые данные

Растровые данные, как правило, представляют из себя набор квадратных и равномерно расположенных растровых картинок (тайлов) формата PNG/JPEG. Представьте, что весь мир это поле, поделенное на множество квадратов, где каждый квадрат имеет значение X/Y/Z (долгота/широта/уровень зума).

Санкт-Петербург с высоты. Каждый тайл - это отдельная JPG-картинка 256x256 пикселей.
Санкт-Петербург с высоты. Каждый тайл - это отдельная JPG-картинка 256x256 пикселей.

Векторные данные

Примечание: здесь рассмотрен открытый стандарт векторных тайлов MVT. Большинство крупных коммерческих провайдеров картографии используют свои проприетарные (закрытые) форматы тайлов, но обычно они тоже векторные.

В случае с векторными данными все чуть сложнее. Вместо картинки каждый тайл содержит в себе различную геометрию (дорог/домов/границ и т. д.), которая привязана не к географическим координатам, а строго к векторным X/Y. Геометрия представлена в виде следующих типов фигур:

  • Точки — одна вершина, например, POI.
  • Линии — две или более вершин, при этом первая и последняя вершины не равны между собой. Например, дорога.
  • Полигоны — три или более вершин, при этом последняя вершина равна первой. Например, геометрия дома.

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

Стоит отметить, что сами тайлы содержат только информацию о геометрии, сгруппированную в слои. То есть у каждой геометрии есть текстовое поле «layer", в котором содержится имя слоя. Геометрия дорожной сети попадает в слой "roads», зданий — в «buildings» и так далее. Данная группировка по слоям не только упрощает использование информации, но и делает возможность в дальнейшем по-разному визуализировать каждый слой.

Очень упрощенный пример векторного тайла с двумя геометриями внутри.
Очень упрощенный пример векторного тайла с двумя геометриями внутри.

Важный момент: в векторном тайле обычно отсутствует информация о внешнем виде (цвета, тип заливки, текстура и т. д.), только сами данные. Внешний вид уже регулируется через стиль карты.

Стили карты

Стиль обычно представляет из себя большой JSON-документ с полным описанием того, какие слои как отображать, откуда брать сами тайлы (URL-адреса), тип проекции и прочая различная информация. Ниже пример описания слоя со зданиями:

Выбираем формат карт для проекта

А вот как выглядит этот же слой, но в визуальном редакторе карт:

Выбираем формат карт для проекта

Плюсы и минусы обоих типов

У нас в Старлайн Картах мы почти не используем растровые тайлы, исключение — спутниковые изображения и данные аэросъёмок. Ниже попробую собрать плюсы и минусы, которые, возможно, помогут в выборе подходящего формата.

👍 Плюсы растровых тайлов:

  • отрисовка на клиенте быстрее, потому что не нужно рассчитывать стили и геометрию
  • некоторые типы данных (например, изменение водных поверхностей) оптимально рисовать только растром
  • формат поддерживают всё старое железо и софт

👎 Минусы растровых тайлов:

  • датасет тайлов для всей планеты будет очень большим, в сравнении с векторным
  • отсутствие гибкости и интерактивности (тайлы нельзя перекрашивать/менять на лету)
  • генерация растровых тайлов занимает больше времени

👍 Плюсы векторных тайлов:

  • отличная гибкость и настраивамость любого элемента
  • быстрая конвертация из PostGIS или других источников
  • улучшенная точность гео-данных

👎 Минусы растровых тайлов:

  • требуется библиотека/SDK с поддержкой MVT
  • более высокий порог входа, из-за необходимости изучения документации к MVT и спецификации стилей
  • на "медленном" железе могут быть проблемы с производительностью отрисовки

Заключение

По состоянию на 2023 все основные библиотеки (Leaflet, MapLibre и OpenLayers) поддерживают оба типа данных. Однако, на нашем опыте векторный формат показал себя как более удобный и гибкий формат для отображения любого количество геоданных. Стоило бы также рассказать об открытых и закрытых источниках геоданных, но это, кажется, тема уже для отдельной статьи.

11
Начать дискуссию