Полигоны

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

Основой работы с полигонами является набор координат, определяющих вершины фигуры. Эти координаты передаются в виде массива широты и долготы, формируя замкнутый контур. При этом последняя точка может явно совпадать с первой, однако в большинстве реализаций API замыкание происходит автоматически.


Инициализация карты и подготовка слоя объектов

Перед созданием полигона необходимо инициализировать карту и добавить слой, на котором будут отображаться геометрические объекты. В HERE Maps используется концепция объектов карты (Map Objects), где каждый геометрический элемент добавляется в отдельный слой.

const platform = new H.service.Platform({
  apikey: 'YOUR_API_KEY'
});

const defaultLayers = platform.createDefaultLayers();

const map = new H.Map(
  document.getElementById('map'),
  defaultLayers.vector.normal.map,
  {
    center: { lat: 48.8566, lng: 2.3522 },
    zoom: 12,
    pixelRatio: window.devicePixelRatio || 1
  }
);

const beh * avior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
const ui = H.ui.UI.createDefault(map, defaultLayers);

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


Создание полигона из набора координат

Полигоны в HERE Maps создаются через класс H.map.Polygon, которому передаётся геометрия в виде массива точек.

const polygonCoords = [
  { lat: 48.8600, lng: 2.3500 },
  { lat: 48.8650, lng: 2.3600 },
  { lat: 48.8600, lng: 2.3700 },
  { lat: 48.8550, lng: 2.3600 }
];

const polygon = new H.map.Polygon(
  new H.geo.Polygon(
    new H.geo.LineString(polygonCoords.map(p => [p.lat, p.lng]))
  ),
  {
    style: {
      fillColor: 'rgba(0, 128, 255, 0.4)',
      strokeColor: 'rgba(0, 128, 255, 1)',
      lineWidth: 2
    }
  }
);

map.addObject(polygon);

Внутренняя структура состоит из H.geo.LineString, который формирует контур, и H.geo.Polygon, который интерпретирует его как замкнутую область.


Стилизация полигона

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

  • fillColor — цвет внутренней области
  • strokeColor — цвет границы
  • lineWidth — толщина линии
  • lineJoin — тип соединения линий
  • lineDash — пунктирная линия

Пример сложной стилизации:

style: {
  fillColor: 'rgba(255, 0, 0, 0.25)',
  strokeColor: '
  lineWidth: 3,
  lineJoin: 'round',
  lineDash: [4, 4]
}

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


Полигоны с отверстиями

Расширенный сценарий — создание полигонов с внутренними вырезами (holes). Это полезно для отображения областей с исключениями, например парков с озёрами или зон с запрещёнными участками.

const outerRing = [
  { lat: 48.86, lng: 2.35 },
  { lat: 48.87, lng: 2.36 },
  { lat: 48.86, lng: 2.37 },
  { lat: 48.85, lng: 2.36 }
];

const hole = [
  { lat: 48.861, lng: 2.355 },
  { lat: 48.862, lng: 2.356 },
  { lat: 48.861, lng: 2.357 }
];

const polygonWithHole = new H.map.Polygon(
  new H.geo.Polygon(
    new H.geo.LineString(outerRing.map(p => [p.lat, p.lng])),
    [
      new H.geo.LineString(hole.map(p => [p.lat, p.lng]))
    ]
  ),
  {
    style: {
      fillColor: 'rgba(0, 200, 0, 0.3)',
      strokeColor: '#00aa00',
      lineWidth: 2
    }
  }
);

map.addObject(polygonWithHole);

Механизм отверстий основан на передаче массива внутренних контуров, которые вычитаются из основной области.


Динамическое изменение геометрии

Полигоны можно модифицировать после создания. Это важно для интерактивных редакторов карт и систем рисования зон.

const geometry = polygon.getGeometry();
const strip = geometry.getExterior();

strip.pushPoint({ lat: 48.858, lng: 2.365 });
geometry.setExterior(strip);

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


Обработка событий на полигонах

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

polygon.addEventListener('tap', function (evt) {
  const pointer = evt.currentPointer;
  console.log(pointer.viewportX, pointer.viewportY);
});

Часто события используются для отображения информации о зоне или запуска бизнес-логики (например, проверка попадания точки в область).


Проверка попадания точки в полигон

Геопространственная проверка является одной из ключевых операций. В HERE Maps используется метод containsLocation.

const point = { lat: 48.862, lng: 2.361 };

const isInside = polygon.getGeometry().containsLatLng(point.lat, point.lng);

Такая проверка применяется в задачах геофенсинга, логистики и аналитики перемещений.


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

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

  • сокращение числа точек без потери точности
  • использование упрощённых геометрий при малых масштабах
  • группировка объектов в ObjectLayer
  • отключение ненужных перерисовок карты

Для больших наборов данных часто применяется генерация полигона на серверной стороне с последующей передачей в оптимизированном виде.


Использование полигона как геозоны

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

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

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


Комбинирование с другими геометрическими объектами

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

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

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