Прямоугольники

Работа с прямоугольными областями в HERE Maps API строится вокруг географических границ (bounds), которые задаются двумя точками: юго-западным и северо-восточным углами. Такой подход позволяет эффективно описывать зоны интереса, зоны поиска, области отображения данных и пользовательские выделения на карте без необходимости строить полноценные многоугольники.

В основе прямоугольника лежит объект ограничивающего прямоугольника (bounding box). Он определяется парой координат:

  • юго-западная точка (south-west)
  • северо-восточная точка (north-east)

Эти координаты формируют минимальный прямоугольник, параллельный осям широты и долготы.

В терминах API используется структура наподобие:

const bounds = new H.geo.Rect(
  55.70, // северная граница (lat)
  37.80, // восточная граница (lng)
  55.60, // южная граница (lat)
  37.60  // западная граница (lng)
);

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

Объект H.geo.Rect и его особенности

Класс H.geo.Rect в HERE Maps API представляет прямоугольную географическую область и используется как базовый строительный блок для:

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

Внутренне объект хранит четыре границы:

  • top (north latitude)
  • bottom (south latitude)
  • left (west longitude)
  • right (east longitude)

Проверка принадлежности точки к прямоугольнику выполняется через метод:

const isInside = bounds.containsLatLng(55.65, 37.70);

Результат операции основан на сравнении координат без необходимости геометрических вычислений высокой сложности.

Создание прямоугольника из карты

Часто прямоугольная область создаётся на основе текущего viewport карты:

const rect = map.getViewModel().getLookAtData().bounds;

Этот подход используется для:

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

Прямоугольник становится синхронизированным с текущим состоянием камеры.

Отрисовка прямоугольника на карте

Визуальное представление прямоугольника реализуется через H.map.Rect, который является графическим слоем поверх географического объекта H.geo.Rect.

const rect = new H.map.Rect(bounds, {
  style: {
    fillColor: 'rgba(0, 128, 255, 0.2)',
    strokeColor: '#0077ff',
    lineWidth: 2
  }
});

map.addObject(rect);

Здесь разделяются два уровня:

  • геометрия (H.geo.Rect)
  • визуальный объект (H.map.Rect)

Такое разделение позволяет переиспользовать геометрию без привязки к рендерингу.

Изменение размеров прямоугольника

Изменение области осуществляется через обновление границ:

rect.setBoundingBox(new H.geo.Rect(
  55.75,
  37.85,
  55.55,
  37.55
));

При изменении границ автоматически пересчитывается:

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

Это позволяет реализовывать динамические инструменты выделения.

Работа с событиями

Прямоугольники поддерживают стандартную модель событий карты HERE Maps API:

rect.addEventListener('tap', function (evt) {
  console.log('Прямоугольник выбран');
});

События включают:

  • tap — выбор объекта
  • pointerenter — наведение
  • pointerleave — уход курсора

Обработка событий происходит на уровне интерактивного слоя карты.

Геометрические операции

Прямоугольные области часто используются как ускоренный инструмент пространственных вычислений.

Проверка пересечения

const overlap = rect1.getBoundingBox().intersectsRect(rect2.getBoundingBox());

Используется для:

  • кластеризации объектов
  • проверки пересечения зон доставки
  • анализа плотности данных

Получение центра

const center = bounds.getCenter();

Центральная точка вычисляется как среднее значение широты и долготы границ.

Использование в фильтрации данных

Прямоугольники активно применяются при работе с геоданными. Например, при запросе объектов в пределах видимой области:

const bbox = map.getViewModel().getLookAtData().bounds;

service.search({
  at: `${bbox.getCenter().lat},${bbox.getCenter().lng}`,
  limit: 50
});

Логика фильтрации часто переносится на серверную сторону, где bounding box используется как ограничитель выборки.

Преобразование координат

Работа с прямоугольниками требует согласования экранных и географических координат.

const geoPoint = map.screenToGeo(x, y);
const screenPoint = map.geoToScreen(lat, lng);

Эти преобразования используются при:

  • построении интерактивного выделения
  • рисовании drag-box
  • анализе пользовательского ввода

Интерактивное выделение области

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

Логика включает:

  1. фиксацию стартовой точки
  2. отслеживание движения курсора
  3. пересчёт bounds
  4. обновление визуального объекта
let start;

map.addEventListener('dragstart', (e) => {
  start = map.screenToGeo(e.currentPointer.viewportX, e.currentPointer.viewportY);
});

map.addEventListener('drag', (e) => {
  const end = map.screenToGeo(e.currentPointer.viewportX, e.currentPointer.viewportY);

  const bounds = new H.geo.Rect(
    Math.max(start.lat, end.lat),
    Math.max(start.lng, end.lng),
    Math.min(start.lat, end.lat),
    Math.min(start.lng, end.lng)
  );

  rect.setBoundingBox(bounds);
});

Такой подход используется в инструментах анализа данных и георазметки.

Производительность и оптимизация

Прямоугольники считаются одной из наиболее дешёвых геометрий с точки зрения вычислений:

  • проверка точки: O(1)
  • пересечение: O(1)
  • обновление bounds: O(1)

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

В HERE Maps API это делает прямоугольники предпочтительными для:

  • тайловой фильтрации
  • поиска в области
  • предварительного отбора данных

Ограничения модели

Несмотря на эффективность, прямоугольники имеют ряд ограничений:

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

При работе с глобальными зонами используется нормализация долготы и разбиение области на несколько сегментов.

Практические сценарии применения

Прямоугольные области используются как базовый инструмент в различных задачах:

  • выделение зоны доставки в логистике
  • ограничение поиска POI
  • визуализация статистики по регионам
  • контроль области загрузки данных
  • построение heatmap-сегментов

Каждый сценарий опирается на простую модель bounds без необходимости сложной геометрической обработки.

Связь с другими геометриями

Прямоугольники часто выступают промежуточным слоем между точками и полигонами:

  • точка → проверка попадания в bounds
  • bounds → фильтрация кандидатов
  • polygon → точная геометрическая проверка

Такой каскад позволяет балансировать точность и производительность при работе с картографическими данными в HERE Maps API