首页 / Turf.js / API 文档
length
先看结论
计算线的总长度;传入面时返回所有环的周长之和。
turf.length(geojson, options) → number
参数
| 参数 | 类型 | 说明 |
|---|---|---|
geojson | LineString / MultiLineString / Polygon / Feature / FeatureCollection | 线要素,或面要素 |
options.units | string | 默认 kilometers |
返回值
一个数字,单位由 units 决定。空线返回 0。
示例
var route = turf.lineString([
[116.391263, 39.907359], // 天安门
[116.417600, 39.905200],
[116.455100, 39.909300],
[116.481200, 39.902800]
]);
console.log(turf.length(route, { units: 'kilometers' })); // 约 7.8
console.log(turf.length(route, { units: 'meters' })); // 约 7800
逐段长度
length 只给总和。需要每一段的里程时,
对相邻坐标点两两调用 distance,顺便可以找出最长段。
var coords = route.geometry.coordinates;
var segments = coords.slice(1).map(function (c, i) {
return turf.distance(
turf.point(coords[i]),
turf.point(c),
{ units: 'meters' }
);
});
console.log(segments.map(Math.round));
多段线自动累加
MultiLineString 的每一段分别测量后相加,不考虑段与段之间的空隙。
轨迹数据被切成多段时,总长度会小于实际行驶里程,
这是数据形态导致的,不是计算错误。用 turf.lineMerge
把相邻段拼成一条线再测量,可以避免断点造成的中断。
面的周长
传入 Polygon 时,外环与内环的周长都会被计入。
带洞的面想要只算外环,先取出
geometry.coordinates[0] 单独构造成线。
var polygon = turf.polygon([[
[116.30, 39.88], [116.42, 39.88], [116.42, 39.96], [116.30, 39.96], [116.30, 39.88]
]]);
var outerOnly = turf.lineString(polygon.geometry.coordinates[0]);
console.log(turf.length(outerOnly, { units: 'kilometers' }));
与投影平面长度的差异
length 用球面距离逐段累加。Web 墨卡托在地图上量出的长度
会随纬度放大,北纬 40 度附近误差约三成。如果需要与地图上的量测工具对齐,
用投影后的平面坐标计算,或者明确说明数据源是球面长度。
短距离、高精度场景注意精度。几米的线段用公里表示会得到 0.003 这样的小数,保留两位就变成 0。展示层统一用米,或调大保留位数。
经纬志(2026)。《length》。https://www.jingweizhi.com/turf/api/length.html(访问日期 2026-11-03)。