В библиотеке Turf.js объединение линейных геометрий выполняется через
анализ топологии координат и последующее склеивание сегментов в
непрерывные цепочки. Основной инструмент для этой задачи —
turf.lineMerge, работающий с объектами типа
LineString и MultiLineString.
Линейные объекты в GeoJSON представляют собой последовательности координатных точек. При наличии нескольких линий задача объединения заключается в восстановлении непрерывных маршрутов, если конечные и начальные точки совпадают.
Объединение выполняется не по геометрическому пересечению в пространстве, а по совпадению координатных узлов. Это означает, что даже минимальные расхождения в координатах могут привести к тому, что линии не будут объединены.
Ключевое поведение:
Функция turf.lineMerge принимает
Feature<LineString | MultiLineString> и возвращает
максимально объединённые линейные цепочки.
import lineMerge from "@turf/line-merge";
const line = {
type: "Feature",
geometry: {
type: "MultiLineString",
coordinates: [
[[0, 0], [1, 1]],
[[1, 1], [2, 2]],
[[10, 10], [11, 11]]
]
}
};
const merged = lineMerge(line);
Результат:
Объединение зависит от строгого совпадения координат. Даже незначительные различия делают соединение невозможным:
[1, 1] ≠ [1.0000001, 1]Для подготовки данных используется нормализация координат.
Перед выполнением lineMerge часто выполняется очистка и
выравнивание координат.
import cleanCoords from "@turf/clean-coords";
const cleaned = cleanCoords(feature);
Удаляются повторяющиеся соседние координаты, которые могут мешать корректной топологии.
При работе с данными GPS полезно сглаживание координат:
import truncate from "@turf/truncate";
const normalized = truncate(feature, {
precision: 5
});
Это уменьшает влияние погрешностей измерений.
Для уменьшения количества точек применяется:
import simplify from "@turf/simplify";
const simplified = simplify(feature, {
tolerance: 0.0001,
highQuality: true
});
Снижение плотности координат облегчает последующую топологическую обработку.
Логика работы lineMerge основана на построении
графа:
Результат:
LineString при единственной цепочке;MultiLineString при нескольких независимых
компонентах.Если линии образуют развилки, объединение происходит частично:
Пример сценария — дорожная сеть с перекрёстками.
Направление координат влияет на соединение:
[A → B] и [B → C] объединяются;[B → A] и [B → C] могут потребовать
перестановки.При подготовке данных иногда требуется нормализация направления:
function normalize(line) {
const coords = line.geometry.coordinates;
if (coords[0][0] > coords[coords.length - 1][0]) {
coords.reverse();
}
return line;
}
Объединение не выполняется при наличии разрывов:
В таких случаях применяется “сшивание” через привязку к ближайшим точкам, но это уже отдельная операция пространственной коррекции.
Линейное объединение в Turf.js не связано с булевыми операциями:
turf.union работает только с полигонами;turf.lineMerge не выполняет геометрическое
пересечение;import lineMerge from "@turf/line-merge";
import cleanCoords from "@turf/clean-coords";
import simplify from "@turf/simplify";
const roads = cleanCoords({
type: "Feature",
geometry: {
type: "MultiLineString",
coordinates: [
[[0, 0], [1, 1], [2, 2]],
[[2, 2], [3, 3], [4, 4]],
[[10, 10], [11, 11]]
]
}
});
const optimized = simplify(roads, { tolerance: 0.00001 });
const merged = lineMerge(optimized);
Обработка включает:
Если вход содержит несколько несвязанных групп линий, результат сохраняет структуру:
LineString;MultiLineString.Объединение линий используется при обработке:
В каждом случае ключевым фактором остаётся корректная топология исходных данных и согласованность координатных узлов.