首页 / Turf.js / API 文档
area
先看结论
计算多边形的球面面积,返回值固定以平方米为单位。
turf.area(geojson) → number
参数
| 参数 | 类型 | 说明 |
|---|---|---|
geojson | Polygon / 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)。