经纬志
首页 / Turf.js / API 文档

lineOffset

先看结论

把线沿法向平移一段距离,得到平行线,用于道路双侧边线、河道岸线等场景。

最后验证 2026-11-03 · Turf.js 7.x · 更新 2026-10-29 · 引用本文
turf.lineOffset(geojson, distance, options?) → Feature<LineString | MultiLineString>

参数

参数类型默认说明
geojsonGeometry | Feature<LineString | MultiLineString>—输入线
distancenumber—偏移距离,负值偏向另一侧
options.unitsstringkilometersmiles、kilometers、degrees、radians、meters 等

返回的线与输入线顶点数大致相同,但坐标已被重新计算, 原始属性不会自动带过来。

示例

var road = turf.lineString([
  [116.30, 39.91],
  [116.36, 39.90],
  [116.42, 39.92],
  [116.48, 39.95]
], { name: '主干道' });

var left = turf.lineOffset(road, 30, { units: 'meters' });
var right = turf.lineOffset(road, -30, { units: 'meters' });

left.properties = { name: '北侧边线' };
right.properties = { name: '南侧边线' };

正负值分别把线推向两侧,因此同一段道路配两条偏移线就能画出双侧边线。 距离单位必须显式给出,默认按公里计算。

与 buffer 的区别

函数结果用途
lineOffset一条平移后的线平行边线、护栏、航线
buffer闭合的面影响范围、走廊分析

需要「距道路 30 米内的区域」时用 buffer; 需要「距道路 30 米的那条线」时用 lineOffset。

拐角与自交

偏移距离大于相邻线段长度时,尖角处的平行线会自交, 形成一个小环。结果仍然是合法线串,但看起来像打了个结。 拐角很急的道路可以先把距离调小,或在线段密集处抽稀后再偏移。

var simplified = turf.simplify(road, {
  tolerance: 0.00005,
  highQuality: true
});

var edge = turf.lineOffset(simplified, 12, { units: 'meters' });

多段线

输入 MultiLineString 时,每段独立偏移, 返回仍是 MultiLineString。相邻段的偏移线不会自动接合, 需要连续边界时先合并成单条线再处理。

偏移方向依赖顶点的行进方向。 同一条几何反转坐标顺序后,同样参数得到的偏移线会落在另一侧。 数据入库时统一线方向,比在代码里判断方向更可靠。

引用本文

经纬志(2026)。《lineOffset》。https://www.jingweizhi.com/turf/api/line-offset.html(访问日期 2026-11-03)。