Класс Point в MapLibre GL JS представляет собой базовую математическую структуру для работы с двумерными координатами в экранном пространстве. Он используется на низком уровне для вычислений, связанных с отрисовкой карты, преобразованием координат, обработкой жестов, интерполяцией и геометрическими операциями внутри рендерингового конвейера.
Point применяется везде, где требуется представление позиции в пикселях или абстрактных 2D-векторах. В отличие от географических координат (longitude/latitude), Point оперирует декартовой системой координат, где:
x — горизонтальная ось (обычно в пикселях)y — вертикальная ось (обычно в пикселях)Эта структура критична для слоёв отрисовки, тайловой системы, обработки событий мыши и касаний, а также вычислений смещений камеры.
Point не связан напрямую с картографическими сущностями, такими как маркеры или слои, но используется как фундаментальный строительный блок для их поведения.
Базовая структура класса предельно минималистична:
x: numbery: numberЭти значения могут представлять:
Такой унифицированный подход позволяет использовать Point как универсальный векторный тип.
Создание объекта Point обычно происходит через передачу двух числовых значений:
const p = new Point(10, 20);
Где:
10 — координата по оси X20 — координата по оси YВнутри библиотеки такие объекты создаются массово, особенно при обработке тайлов, пересчёте позиций слоёв и взаимодействии с матрицами трансформации камеры.
Point реализует набор векторных операций, позволяющих рассматривать его как математический вектор в 2D-пространстве.
Операция сложения используется для объединения смещений:
p.add(q)
Результат:
x = p.x + q.xy = p.y + q.yПрименение:
p.sub(q)
Результат:
x = p.x - q.xy = p.y - q.yИспользуется для вычисления разницы между координатами, например:
p.mult(k)
Результат:
x = p.x * ky = p.y * kПрименение:
p.div(k)
Результат:
x = p.x / ky = p.y / kИспользуется в нормализации и усреднении значений.
Длина (или модуль) вычисляется как:
Эта операция важна для определения:
Нормализованный вектор имеет длину 1 и сохраняет направление:
p / |p|
Применяется при:
Расстояние между двумя Point используется в обработке взаимодействий:
Point фактически реализует поведение двумерного вектора, что позволяет использовать его в математических преобразованиях без дополнительных структур.
Основные свойства:
Это делает Point удобным для построения цепочек вычислений без промежуточных объектов.
Point активно применяется в нескольких ключевых подсистемах:
При работе с мышью и касаниями координаты событий преобразуются в Point:
Камера карты использует Point для:
При расчёте видимых тайлов используются Point для:
Во время отрисовки каждый слой может использовать Point для:
Point можно рассматривать как элемент векторного пространства ℝ². Это позволяет применять стандартные операции линейной алгебры:
Такой подход обеспечивает предсказуемость поведения при сложных трансформациях.
Point является легковесным объектом. В высоконагруженных участках кода:
Это важно для WebGL-рендеринга, где даже небольшие издержки в математических операциях могут влиять на плавность анимации.
Point часто используется как промежуточный тип в цепочках вычислений:
Такая композиционность позволяет строить сложные математические модели поведения карты из простых операций над точками.