Точечная геометрия в OpenLayers используется для описания объектов, которые не имеют площади или протяжённости на карте и задаются одной координатой. Это базовый тип геометрии, применяемый для отображения маркеров, событийных точек, объектов наблюдения, геолокации пользователей и любых дискретных сущностей.
В библиотеке OpenLayers точка реализуется через класс
Point, который является частью модуля геометрий
ol/geom. Каждая точка хранит координаты в виде массива
чисел, соответствующих системе координат карты.
import Point from 'ol/geom/Point';
const point = new Point([30.5, 50.45]);
Координаты интерпретируются в зависимости от проекции карты. Чаще всего используется EPSG:3857, поэтому при работе с географическими координатами (долгота/широта) требуется преобразование.
В OpenLayers точка почти никогда не используется изолированно. Она
оборачивается в объект Feature, который связывает геометрию
с атрибутами и стилем.
import Feature from 'ol/Feature';
import Point from 'ol/geom/Point';
const feature = new Feature({
geometry: new Point([30.5, 50.45]),
name: 'Объект наблюдения'
});
Feature выполняет роль контейнера, объединяющего:
Такой подход позволяет отделить геометрические данные от логики отображения и бизнес-данных.
OpenLayers оперирует координатами в разных проекциях, и точечная геометрия напрямую зависит от корректности преобразований.
Наиболее распространённый сценарий:
Преобразование выполняется через fromLonLat:
import Point from 'ol/geom/Point';
import { fromLonLat } from 'ol/proj';
const point = new Point(fromLonLat([69.6, 42.3]));
Игнорирование преобразования приводит к смещению объектов и некорректному позиционированию на карте.
Чтобы точка стала видимой, её необходимо добавить в векторный слой
(VectorLayer), который использует источник данных
(VectorSource).
import VectorLayer from 'ol/layer/Vector';
import VectorSource from 'ol/source/Vector';
const source = new VectorSource({
features: [feature]
});
const layer = new VectorLayer({
source: source
});
Векторный слой отвечает за:
Отображение точки на карте определяется стилем (Style).
Без явного стиля точка может быть невидимой.
import Style from 'ol/style/Style';
import CircleStyle from 'ol/style/Circle';
import Fill from 'ol/style/Fill';
import Stroke from 'ol/style/Stroke';
const style = new Style({
image: new CircleStyle({
radius: 6,
fill: new Fill({ color: 'blue' }),
stroke: new Stroke({
color: 'white',
width: 2
})
})
});
Применение стиля к объекту:
feature.setStyle(style);
Ключевые параметры:
radius — размер точки,fill — заливка,stroke — обводка.Также возможна динамическая стилизация через функцию, зависящую от
свойств Feature.
Стиль может быть вычисляемым, что позволяет изменять внешний вид точек в зависимости от данных.
feature.setStyle((feature) => {
const value = feature.get('value');
return new Style({
image: new CircleStyle({
radius: value > 50 ? 10 : 5,
fill: new Fill({
color: value > 50 ? 'red' : 'green'
})
})
});
});
Такой подход используется для:
Точечная геометрия может изменяться в реальном времени. Это важно для задач трекинга и динамических данных.
const geometry = feature.getGeometry();
geometry.setCoordinates(fromLonLat([70.0, 43.0]));
При обновлении координат слой автоматически перерисовывает объект без
необходимости пересоздания Feature.
OpenLayers поддерживает взаимодействия через Select и
обработку событий карты.
Пример выделения точечного объекта:
import Sel ect from 'ol/interaction/Select';
const select = new Select();
map.addInteraction(select);
select.on('select', (event) => {
const selected = event.selected;
});
Точечные объекты часто используются в сценариях:
При большом количестве точек применяется кластеризация для оптимизации отображения.
import Cluster fr om 'ol/source/Cluster';
const clusterSource = new Cluster({
distance: 40,
source: source
});
Кластеризация объединяет близко расположенные точки в один объект, уменьшая нагрузку на рендеринг и улучшая читаемость карты.
Каждая точка может содержать произвольные данные, связанные с объектом.
feature.set('id', 1);
feature.set('type', 'sensor');
feature.set('value', 72);
Эти атрибуты используются:
Несмотря на простоту, точка поддерживает базовые операции:
const coords = geometry.getCoordinates();
geometry.setCoordinates([10, 20]);
В отличие от сложных геометрий, точка не требует топологических вычислений, что делает её наиболее производительным типом геометрии.
Точки часто служат основой для пространственного анализа:
В таких задачах точка выступает минимальной единицей измерения пространственной информации, а дальнейшая обработка выполняется на уровне источников данных или дополнительных алгоритмов.