Круги и эллипсы

Геометрические объекты на карте в JavaScript API платформы HERE Technologies реализуются как полноценные слои поверх базовой тайловой подложки и используются для визуализации пространственных областей. Среди наиболее часто применяемых примитивов — окружности и эллипсы, которые представляют собой параметризованные геозоны, зависящие от координат центра и метрических характеристик.

В экосистеме HERE Maps API for JavaScript данные фигуры относятся к объектам H.map.Object и интегрируются в карту через слой map.addObject(), что позволяет управлять их отображением, стилями и взаимодействием.


Круг в API реализуется через класс H.map.Circle. Его основой служит геодезическая модель, в которой радиус измеряется в метрах, а форма рассчитывается с учетом проекции карты.

Создание круга

const circle = new H.map.Circle(
  { lat: 52.5, lng: 13.4 },
  1000,
  {
    style: {
      strokeColor: 'rgba(55, 85, 170, 0.6)',
      fillColor: 'rgba(55, 85, 170, 0.3)',
      lineWidth: 2
    }
  }
);

map.addObject(circle);

Параметры конструктора:

  • центр — объект координат {lat, lng}
  • радиус — значение в метрах
  • style — визуальное оформление объекта

Геодезические особенности окружности

Круг в HERE Maps API не является евклидовой проекцией. Его форма корректируется в зависимости от широты:

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

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


Стилизация окружностей

Стили задаются через объект style и могут включать:

  • strokeColor — цвет границы
  • fillColor — заливка
  • lineWidth — толщина линии
  • lineDash — пунктирная линия

Пример динамического изменения стиля:

circle.setStyle({
  fillColor: 'rgba(200, 0, 0, 0.2)',
  strokeColor: 'rgba(200, 0, 0, 0.8)',
  lineWidth: 3
});

Изменения применяются без необходимости пересоздания объекта, что важно для интерактивных сценариев.


Обработка событий на круге

Круги поддерживают стандартные события карты:

circle.addEventListener('tap', function (evt) {
  console.log('Круг выбран');
});

Событийная модель наследуется от H.mapevents, что позволяет использовать единый механизм взаимодействия для всех объектов.


Эллипсы в HERE Maps API

Эллиптические области реализуются через класс H.map.Ellipse. Они применяются для моделирования направленных зон покрытия, например:

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

Создание эллипса

const ellipse = new H.map.Ellipse(
  { lat: 52.5, lng: 13.4 },
  2000,
  1000,
  45,
  {
    style: {
      fillColor: 'rgba(0, 150, 136, 0.3)',
      strokeColor: 'rgba(0, 150, 136, 0.8)',
      lineWidth: 2
    }
  }
);

map.addObject(ellipse);

Параметры эллипса

Эллипс задается набором геометрических характеристик:

  • центр — координаты {lat, lng}
  • semiMajorAxis — большая полуось (в метрах)
  • semiMinorAxis — малая полуось (в метрах)
  • orientation — угол поворота в градусах относительно северного направления

Геометрический смысл

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

Применение эллипсов в пространственных задачах

Эллипсы используются там, где требуется учитывать направленность процессов:

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

Сравнение кругов и эллипсов

Круг

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

Эллипс

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

Работа с объектами на карте

И круги, и эллипсы являются интерактивными объектами слоя карты:

map.addObject(circle);
map.addObject(ellipse);

map.removeObject(circle);

Объекты можно комбинировать с группами:

const group = new H.map.Group();
group.addObjects([circle, ellipse]);
map.addObject(group);

Геофенсинг на основе окружностей

Окружности часто используются для реализации геозон:

function isInside(point, circle) {
  const center = circle.getCenter();
  const radius = circle.getRadius();
  const distance = map.geo.distance(center, point);
  return distance <= radius;
}

Такие проверки применяются в:

  • логистике
  • трекинге транспорта
  • уведомлениях о входе/выходе из зоны

Визуальная оптимизация больших наборов окружностей

При работе с десятками и сотнями кругов:

  • рекомендуется использовать кластеризацию объектов
  • снижать детализацию stroke при отдалении
  • избегать частого пересоздания объектов
  • использовать батчевое добавление через группы

Динамическое изменение радиуса

Круги могут изменяться в реальном времени:

circle.setRadius(1500);

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

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

Комбинирование геометрий

Круги и эллипсы часто применяются совместно:

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

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