Полигоны в 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Для больших наборов данных часто применяется генерация полигона на серверной стороне с последующей передачей в оптимизированном виде.
Использование полигона как геозоны
Полигоны часто выступают как геозоны для определения бизнес-правил:
В таких сценариях проверка координат пользователя относительно полигона становится центральной логикой приложения, а сам объект карты выступает визуальным представлением правил.
Комбинирование с другими геометрическими объектами
Полигоны могут использоваться совместно с маркерами, линиями и кругами. Это позволяет строить комплексные визуализации:
Такой подход применяется в системах геоаналитики и транспортного моделирования.