Векторная линия в GeoJSON представляется как LineString,
где порядок координат определяет направление геометрии. Разворот линии
означает инверсию последовательности координат, при которой начальная
точка становится конечной, а конечная — начальной. Геометрически форма
линии не изменяется, но её направленность становится
противоположной.
В системах пространственного анализа направление играет критическую роль: маршрутизация, вычисление уклонов, построение профилей, анализ потоков и сетей часто зависят от ориентации линии.
В Turf.js для этой операции используется функция
lineReverse, входящая в набор утилит работы с линейной
геометрией.
GeoJSON LineString задаётся массивом координат:
{
"type": "LineString",
"coordinates": [
[lng1, lat1],
[lng2, lat2],
[lng3, lat3]
]
}
Порядок элементов массива определяет направление:
При реверсе происходит полная инверсия массива:
[A, B, C, D] → [D, C, B, A]
При этом геометрия остаётся идентичной в пространстве.
В Turf.js операция разворота реализуется через:
turf.lineReverse(line, options?)
Функция принимает объект Feature<LineString> и
возвращает новый объект с инвертированными координатами.
import { lineReverse } from "@turf/turf";
const line = {
type: "Feature",
geometry: {
type: "LineString",
coordinates: [
[30.5, 50.5],
[31.0, 51.0],
[32.0, 52.0]
]
}
};
const reversed = lineReverse(line);
console.log(reversed.geometry.coordinates);
Результат:
[
[32.0, 52.0],
[31.0, 51.0],
[30.5, 50.5]
]
Алгоритмически разворот линии представляет собой:
reverse() к массивуУпрощённая логика:
function lineReverse(feature) {
const coords = feature.geometry.coordinates;
const reversed = coords.slice().reverse();
return {
...feature,
geometry: {
...feature.geometry,
coordinates: reversed
}
};
}
Ключевой момент заключается в копировании массива: оригинальная геометрия не мутируется.
Turf.js следует принципу неизменяемости входных данных. Это важно при работе с большими геопространственными наборами:
Реверс всегда возвращает новый объект, даже если входная линия содержит тысячи точек.
Несмотря на визуальную идентичность линии после разворота, ряд характеристик меняется:
Любые операции, зависящие от направления, дают инвертированный результат:
Если исходная линия идёт из A в B, то:
bearing(A → B) = - bearing(B → A)
В системах навигации разворот линии используется для:
Линия, представляющая маршрут, после реверса становится обратным маршрутом без пересчёта геометрии.
lineReverse часто используется в цепочках
геообработки:
import { lineReverse, lineSlice, along } from "@turf/turf";
Пример сценария:
Маршруты, полученные из внешних сервисов, часто требуют унификации направления:
При отсутствии гарантированного направления используется проверка и условный реверс:
const normalizedLine =
shouldReverse ? lineReverse(route) : route;
Функция lineReverse работает только с
LineString. Для MultiLineString требуется
обработка каждого сегмента отдельно:
const reversed = {
...multiLine,
geometry: {
type: "MultiLineString",
coordinates: multiLine.geometry.coordinates.map(line =>
[...line].reverse()
)
}
};
Каждая подлиния сохраняет свою структуру, но инвертируется локально.
Разворот массива координат имеет сложность:
Факторы, влияющие на производительность:
Для больших данных критично избегать повторного реверса одной и той же геометрии.
Ошибочная реализация:
feature.geometry.coordinates.reverse();
Проблема:
Иногда возвращается только массив координат вместо GeoJSON Feature, что ломает совместимость с другими функциями Turf.js.
Направление линии используется не только визуально, но и как семантический параметр:
Реверс позволяет адаптировать одну и ту же геометрию под разные модели интерпретации данных.
При использовании функций вроде along или
lineSliceAlong направление определяет:
После реверса вся параметризация линии фактически меняется местами.
Если линия замкнута (первая и последняя точки совпадают), реверс сохраняет замкнутость, но изменяет порядок обхода:
A → B → C → A
становится:
A → C → B → A
При этом геометрическая форма полигона не изменяется, но направление обхода становится противоположным (важно для вычисления площади с ориентацией).
Хотя lineReverse предназначен для линий, он косвенно
влияет на:
В сложных системах обработки пространственных данных разворот линии применяется как промежуточная операция:
Реверс становится элементом стандартизации геометрий перед дальнейшим анализом.