0

出于教育目的,我正在尝试编写一个 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 是角的数量。

任何帮助将不胜感激,谢谢!

4

0 回答 0