出于教育目的,我正在尝试编写一个 TS 函数,该函数将接受坐标数组并计算多边形的面积。
function getArea(lat_long: Array<LAT_LONG>){
lat_long.push(lat_long[0])
const n = lat_long.length
const cart = lat_long.map((point) => convertToCartesian(point));
let sum1 = 0;
let sum2 = 0;
cart.map((point, i, cart) => {
if(cart[i + 1]) {
const {X: lat1, Y: long1} = point;
const {X: lat2, Y: long2} = cart[i + 1]
sum1 += <number>lat1 * <number>long2
sum2 += <number>long1 * <number>lat2
}
})
return Math.abs(sum1 -sum2) / 2;
}
我正在使用鞋带算法成功计算多边形的面积。在运行算法之前,我将纬度/经度坐标转换为它们的笛卡尔格式。
[
-30.755695508016164,139.58931179712357,
-31.026745675780326,139.67720242212357,
-30.929020409557967,139.9243948049360,
-30.563139898321857,140.02052517602982,
-30.500447229869152,139.79530544946732,
])
Results in 774321690.7109375 from my function.
我将此与https://www.mathopenref.com/coordpolygonareacalc.html的结果进行了比较,该结果输出:774321690.7119141。
但是,当我将此与谷歌地图等工具进行比较时,它是不正确的(答案是 1513405095.71 平方米)。我应该应用地球的球形特性来获得准确的答案,但我不确定如何。我试过 S = [θ - (n - 2)π]R^2 其中 θ 是角度的总和,n 是角的数量。
任何帮助将不胜感激,谢谢!