Векторные и растровые карты

Точки над i для тех, кто не очень понимает или искренне заблуждается. Всё достаточно банально, никаких откровений.

С понятием векторной графики предлагаю ознакомиться самостоятельно. Совсем кратко: растровая графика — это когда у нас в файле записаны цвета каждой точки на картинке, а векторная — это когда у нас записано описание: «в таких-то координатах у нас синий круг радиуса 20 с красной каймой толщины 2, а из таких координат в такие идёт зелёная пунктирная линия». Далее речь пойдёт только о векторных картах, в которых обычно применяются только два с половиной примитива: точка и ломаная (замкнутая и нет).

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

С одной стороны, все современные карты изначально векторные (разумеется, к Генштабу и прочим анахронизмам это не относится) т.к. готовятся в современной цифровом мире, где рисовать карту как окончательную растровую картинку никому уже не придёт в голову (её будет крайне проблематично модифицировать). С другой, финально на экране компьютера/телефона любая карта является растром т.к. экраны на всех этих устройствах растровые (кто слышал о существовании векторных экранов — молодцы, возьмите пряник, но сейчас это к делу не относится).

Так что деление на векторные и растровые традиционно проводят по тому, в какой момент карта растеризуется (преобразуется из вектора в растр): если на пользовательское устройство загружается растр и устройство тупо его рисует на экране as is — это растровая карта. Если на пользовательское устройство загружаются векторные данные и растеризация выполняется уже силами пользовательского устройства в момент отображения карты — это векторная карта.

Далее термины «векторная / растровая карта» следует понимать именно в соответствии с таким делением.

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

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

Преимущества

Растровые:

  • минимальная нагрузка на процессор пользовательского устройства
  • простота разработки софта для пользовательского устройства
  • более-менее стандартизованное между разными сервисами тайловое представление

Векторные:

  • многократно меньший объём.
  • возможность менять стиль карты / отображаемые элементы прямо на пользовательском устройстве.

Недостатки — строго наоборот:

Растровые:

  • очень большой объём, в случае jpeg-тайликов — замыливание.
  • на карте ничего нельзя изменить, это готовая картинка.

Векторные:

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

Историческое развитие

Все карты, которые начинали свою жизнь в Вебе изначально поставлялись пользователям растровыми т.к. расретизация на стороне пользователя прямо в браузере была технически невозможна (ну или неоправданно трудно реализуема). Таковы OSM, Я.Карты, Google Maps. Пользуясь последними достижениями веб-стандартов, некоторые из них смогли стать векторными даже в Вебе — в первую очередь это Google Maps, плюс не так давно стала развиваться векторная доставка OSM: то, что вы видите на openstreetmap.org — разумеется, ещё растр, а векторное представление можете пощупать, например, на openmaptiles.org

С некоторыми картами, которые шли в комплекте с отображающей их оболочкой, пользователи изначально знакомы как с векторными: таковы, например, карты Navitel и 2GIS (в те времена, когда это была только программа под Windows). Все эти карты, когда стали выходить в Веб, вынуждены были обзавестись server-side растеризацией (и то, что вы видите на 2gis.ru — это уже растровая карта).

Тайлы

В вебе растровые карты принято доставлять пользователю тайликами — небольшими квадратными картинками (чаще всего 256×256 пикселей). Этот формат подхватили все, под его отображение и работу с ним сделано много библиотек. Только благодаря этому мы можем цеплять к Locus`у много разных карт. С векторными картами так никогда не будет.

Векторные карты раньше всегда поставлялись «кусками территории» (город, область, страна) в одном файле. Но в современном мире перманентного онлайна назрела потребность поставлять карту пользователю очень маленькими кусками (зачем ему грузить всю область, если он только два ближайших квартала на экране телефона намерен пролистать?) и стали появляться векторные тайлы. Форматы у всех свои, отображение возможно только в родном софте. Повторю ещё раз, появление альтернативных программ для отображения векторных Яндекс.Карт / Google Maps и всех прочих крайне маловероятно.

Так кто векторный, а кто растровый?

OSM:

  • в вебе почти всегда растровый (реально сайтов использующих векторный OSM пока полторы штуки).
  • в Locus`е, когда это тайловые растеризации (стандартный стиль Carto/Mapnik, OpenCycleMap, OpenTopoMap etc) — это, очевидно, растр. А вот родные для Locus`а LoMaps или OpenAndroMaps (и всё прочее формата MapsForge) — это векторные карты.
  • в OsmAnd`е всё аналогично Locus`у.
  • MapsMe — прекрасная реализация отображения векторного OSM.

Важно понимать, что в OSM очень много данных. Обычно ни в один формат доставки векторного OSM пользователю, не упаковывают всё, что есть в OSM. Для LoMaps и для OpenAndroMaps набор упаковываемых в файл OSM-тегов различен (но у обоих представлено всё основное — разница в мелочах). Далее, не всё, что упаковано в файл вы увидите на экране — это будет зависеть от используемой вами визуальной темы (что позволяет выбирать тему по вкусу / под конкретную задачу). Ну а все растровые представления OSM также показывают разный набор объектов по разным правилам — и именно тем, а не использованными цветами, в первую очередь и отличаются.

Яндекс.Карты:

  • в вебе растровые.
  • в Locus`е / OsmAnd`е / SAS Planet — растровые.
  • в мобильном приложении уже более года как векторные (в Я.Навигаторе — векторные с момента его публичного запуска).

Google Maps:

  • в вебе в современном браузере — векторные.
  • в Locus`е / OsmAnd`е / SAS`е — растровые (и доступны нам т.к. сервера Google всё ещё генерят растровые тайлы для старых браузеров и прочей обратной совместимости).
  • в мобильном приложении уже очень давно векторные.

2GIS, Bing, Apple Maps и прочие-прочие-прочие — растровые в вебе и векторные в родном мобильном приложении.

Ах, да, ещё Garmin. Родные карты и тот OSM, который многие берут c GIS-Lab (или с прочих сайтов, берущих из этого первоисточника) — это векторные карты. Листая их на Garmin`е, каждый может проникнуться ресурсоёмкостью растеризации на пользовательском устройстве ;) А вот, что пользователи готовят сами и заливают в формате jnx — это растр. То, что заливается в kml, не смотря на неспешность работы на устройстве — тоже растр.

Posted on | Метки: