首页 / Turf.js / API 文档
lineOffset
先看结论
把线沿法向平移一段距离,得到平行线,用于道路双侧边线、河道岸线等场景。
turf.lineOffset(geojson, distance, options?) → Feature<LineString | MultiLineString>
参数
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
geojson | Geometry | Feature<LineString | MultiLineString> | — | 输入线 |
distance | number | — | 偏移距离,负值偏向另一侧 |
options.units | string | kilometers | miles、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)。