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

area

先看结论

计算多边形的球面面积,返回值固定以平方米为单位。

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

参数

参数类型说明
geojsonPolygon / MultiPolygon / Feature / FeatureCollection面要素;集合会累加所有面的面积

返回值

平方米。没有 units 参数,也不能指定公里。 换算:平方公里除以 1e6,公顷除以 1e4,亩除以 666.6667。

示例

var block = turf.polygon([[
  [116.300, 39.950], [116.360, 39.950], [116.360, 39.990],
  [116.300, 39.990], [116.300, 39.950]
]]);

var m2 = turf.area(block);
console.log(m2.toFixed(0));            // 约 22 800 000
console.log((m2 / 1e6).toFixed(2));    // 约 22.8 平方公里
console.log((m2 / 1e4).toFixed(0));    // 约 2280 公顷
console.log((m2 / 666.6667).toFixed(0)); // 约 34 200 亩

球面面积的意义

算法把多边形顶点投影到球面,用球面多边形公式求面积, 与地图投影无关。因此同一块地在不同底图下、不同缩放级别下, 面积结果一致。这也是它和「屏幕上框选后按像素估算」最本质的区别。

带洞面

洞的面积会被扣除,不需要自己处理环方向。 洞的顶点多于外环时计算量稍大,但结果正确。 多面则累加每个子面的面积。

var withHole = turf.polygon([
  [[116.30, 39.95], [116.38, 39.95], [116.38, 40.00], [116.30, 40.00], [116.30, 39.95]],
  [[116.33, 39.97], [116.35, 39.97], [116.35, 39.985], [116.33, 39.985], [116.33, 39.97]]
]);

console.log(turf.area(withHole) < turf.area(block));   // true

面积为什么会是 0 或负数

  • 环未闭合:面积按未闭合折线计算,结果偏小甚至为负。
  • 顶点少于 4 个(含闭合点):无法构成面。
  • 自相交:面积在交叉处相互抵消。
  • 经纬度写反:多边形变成另一块区域,数值看着正常但对不上实际地块。

拿到异常值时,先用 turf.bbox 检查范围是否符合预期, 再用 turf.kinks 检查自相交。

与平面面积测算对齐

甲方给的控制面积通常来自投影坐标(如 CGCS2000 高斯投影)下的平面计算。 与本函数结果相差千分之几属于正常范围,差异主要来自椭球与正球体假设。 要求严格一致时,用同一套投影参数在专业软件里算,Turf 只用于交互预览。

面积单位统一在展示层处理。数据层一律保留平方米, 只在格式化时转成平方公里或公顷,避免在业务里散落各种量纲的数值。

引用本文

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