Turf.js v6.5.0多边形面积计算异常:第二个多边形数值偏差极大
问题根源
Turf.js 的 turf.area() 函数默认将输入坐标解析为WGS84经纬度(单位:度),但你提供的是平面投影坐标(单位:米)——这类坐标数值远超出经纬度的合理范围(经度±180、纬度±90),直接计算会导致面积结果完全失真。
解决方案
使用 Turf.js 提供的 turf.planarArea() 函数,它专门用于计算平面坐标系下的多边形面积,无需转换坐标,直接适配米单位的投影坐标场景。
修正后的代码
const turf = require("@turf/turf"); var polygon1 = turf.polygon([ [ [499980.0, 3600000.0], [609780.0, 3600000.0], [609780.0, 3490200.0], [499980.0, 3490200.0], [499980.0, 3600000.0], ], ]); var polygon2 = turf.polygon([ [ [499981.0, 3599999.0], [533365.5903128482, 3599999.0], [505696.0943201342, 3490201.0], [499981.0, 3490201.0], [499981.0, 3599999.0], ], ]); // 改用平面面积计算 console.log(turf.planarArea(polygon1)); console.log(turf.planarArea(polygon2));
补充说明
- 原代码中
turf.area()计算的是椭球面上的面积,仅适用于经纬度坐标; - 如果需要基于椭球面计算投影坐标的面积,需先使用
proj4等工具将投影坐标转换为WGS84经纬度,再调用turf.area()。
内容的提问来源于stack exchange,提问作者devfubar
相关产品推荐
相关产品推荐

