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

length

先看结论

计算线的总长度;传入面时返回所有环的周长之和。

最后验证 2026-11-03 · Turf.js 7.x · 更新 2026-10-27 · 引用本文
turf.length(geojson, options) → number

参数

参数类型说明
geojsonLineString / MultiLineString / Polygon / Feature / FeatureCollection线要素,或面要素
options.unitsstring默认 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)。