В библиотеке MapLibre GL JS система единиц измерения не является однородной: она распределена между географическими координатами, экранными пикселями, условными мировыми координатами проекции и параметрами камеры. Понимание того, в какой системе выражено каждое значение, критично для корректной работы со стилями, источниками данных и камерой карты.
Базовая система координат — это долгота и широта в градусах:
Эти значения относятся к географической системе WGS84 и используются для задания центра карты, точек, источников данных и геометрии.
Ключевая особенность: градусы здесь не являются линейной метрикой расстояния. Один градус долготы на экваторе и один градус в высоких широтах соответствуют разным физическим расстояниям.
Внутри рендеринга используется проекция Web Mercator projection. Она переводит сферические координаты в плоское пространство.
После преобразования появляются world coordinates:
Важно: эти “метры” не являются физическими метрами. Это математическая проекция, позволяющая равномерно отображать карту на плоскости.
На уровне отображения ключевой единицей становятся пиксели:
line-width)text-size)*-translate)circle-radius)Пиксель в MapLibre GL JS — это логический пиксель, привязанный к устройству отображения, но масштабируемый через DPR (device pixel ratio).
Фактически вся система стилей ориентирована на пиксель как базовую единицу визуального результата.
Параметр zoom не имеет физической размерности:
Это логарифмическая шкала:
Таким образом, zoom связывает мировые координаты и экранные пиксели.
Понятие meters per pixel используется косвенно через вычисления:
На экваторе при zoom 0 один пиксель соответствует огромному расстоянию, тогда как при zoom 20 — доли метра.
Эта нелинейность является следствием проекции и фиксированной плиточной системы.
В основе рендеринга лежит тайловая сетка:
Тайлы формируют дискретную структуру, где:
Таким образом, вся карта разбивается на равномерные пиксельные блоки, независимо от реальных расстояний.
В стиле MapLibre GL JS существует разделение на две группы свойств:
Работают на этапе размещения объектов:
text-field, symbol-placementtext-sizeicon-sizeЗдесь используются:
Определяют визуализацию:
line-widthfill-opacitycircle-radiusОсновная единица — пиксель, но значения могут быть интерполированы по zoom.
Одна из ключевых особенностей — масштабирование свойств по zoom:
Пример логики:
Это создаёт эффект «физического» увеличения объектов при приближении.
Параметры камеры используют собственные единицы:
Градусы здесь применяются только для угловых характеристик, а не для расстояний.
MapLibre GL JS одновременно оперирует несколькими слоями единиц:
Каждая система используется строго в своём контексте и не подменяет другую.
Источники данных (GeoJSON, vector tiles) всегда хранят геометрию в географических координатах. При рендеринге происходит трансформация:
При этом геометрия остаётся неизменной, меняется только представление.
Размеры объектов в MapLibre GL JS не привязаны к физическим единицам:
Таким образом, визуальная консистентность достигается не через физические единицы, а через систему масштабирования рендера.
Географические единицы описывают положение на поверхности Земли, но не расстояние на экране. Экранные единицы описывают визуальное представление, но не реальную географию.
Между ними находится промежуточный слой Web Mercator, который обеспечивает стабильную математическую связь между двумя мирами.
Система измерений в MapLibre GL JS формируется как многоуровневая модель:
Такое разделение позволяет одновременно работать с глобальной картографией и детализированным интерактивным рендерингом без потери согласованности между уровнями представления.