LineString в OpenLayers представляет собой
геометрический объект, описывающий ломаную линию, состоящую из
упорядоченного набора точек. В библиотеке OpenLayers он реализован
классом ol/geom/LineString и используется для отображения
маршрутов, треков, дорог, траекторий движения и любых линейных объектов
на карте.
Базовый способ создания линии заключается в передаче массива координат в конструктор:
import LineString from 'ol/geom/LineString';
const line = new LineString([
[30.5, 50.45],
[30.52, 50.46],
[30.55, 50.47]
]);
Каждая точка представляет собой массив [x, y], где
значения интерпретируются в зависимости от системы координат карты
(обычно EPSG:3857 или EPSG:4326).
LineString не хранит информацию о проекции, но полностью зависит от неё в контексте карты.
Наиболее распространённые системы:
Корректная работа с линиями требует согласования координат слоя и геометрии:
import {fromLonLat} from 'ol/proj';
const line = new LineString([
fromLonLat([30.5, 50.45]),
fromLonLat([30.52, 50.46])
]);
Класс LineString предоставляет набор методов для
управления координатами и анализа геометрии.
const coords = line.getCoordinates();
Возвращает массив координат текущей линии.
line.setCoordinates([
[0, 0],
[10, 10],
[20, 15]
]);
Полностью заменяет существующую геометрию.
line.appendCoordinate([25, 18]);
Добавляет новую вершину в конец линии.
line.insertCoordinate(1, [5, 5]);
Позволяет вставить точку в заданную позицию массива координат.
line.removeCoordinate([10, 10]);
Удаляет первую найденную координату.
LineString сам по себе не отображается на карте. Для визуализации он
помещается в Feature:
import Feature from 'ol/Feature';
import LineString from 'ol/geom/LineString';
const line = new LineString([
[0, 0],
[1000000, 1000000]
]);
const feature = new Feature({
geometry: line
});
Для отображения линии используется векторный слой:
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 Stroke from 'ol/style/Stroke';
const style = new Style({
stroke: new Stroke({
color: 'blue',
width: 3
})
});
feature.setStyle(style);
Параметры Stroke:
color — цвет линииwidth — толщинаlineDash — пунктирlineCap — форма концов линии (round,
square, butt)lineJoin — соединения сегментов (round,
bevel, miter)LineString поддерживает трансформации координат через функции
ol/proj:
import {transform} from 'ol/proj';
const transformed = new LineString(
line.getCoordinates().map(coord =>
transform(coord, 'EPSG:3857', 'EPSG:4326')
)
);
Чаще используется трансформация при создании или отображении данных из внешних источников (GeoJSON, API, GPS-треки).
Для расчёта реальной длины линии используется модуль
ol/sphere:
import {getLength} from 'ol/sphere';
const length = getLength(line);
Результат возвращается в метрах (при использовании EPSG:3857).
Особенности:
OpenLayers предоставляет интерактивное редактирование через
Modify interaction:
import Modify from 'ol/interaction/Modify';
const modify = new Modify({
source: source
});
map.addInteraction(modify);
Поддерживаются операции:
LineString часто используется для построения маршрутов в реальном времени:
const coords = [];
const line = new LineString(coords);
function addPoint(coord) {
coords.push(coord);
line.setCoordinates(coords);
}
При каждом обновлении геометрии слой автоматически перерисовывается.
При обработке длинных треков критично учитывать производительность:
Упрощение геометрии:
const simplified = line.simplify(100);
LineString напрямую совместим с форматом GeoJSON:
import GeoJSON from 'ol/format/GeoJSON';
const format = new GeoJSON();
const feature = format.readFeature({
type: 'Feature',
geometry: {
type: 'LineString',
coordinates: [
[30, 50],
[31, 51]
]
}
});
При экспорте:
const geojson = format.writeFeature(feature);
LineString может быть источником изменений при редактировании:
line.on('change', function () {
const coords = line.getCoordinates();
});
События позволяют отслеживать:
Между точками LineString строит прямые сегменты. Для кривых линий требуется дополнительная интерполяция:
LineString применяется для:
При работе с геометрией учитываются особенности: