首页 > 其他 > 详细

百度地图 - 基础学习(7): 折线构成闭合图形面积计算

时间:2021-01-08 18:20:49      阅读:28      评论:0      收藏:0      [点我收藏+]

前面  GeoUtils 类可以很好的计算密闭多边形、矩形框出的区域面积,但没有解决折线自相交框出的区域面积计算,这就需要开发人员自己去解决了。

度娘了几篇文章,最终找到了一个计算方法,经实测效果不错,结果也比较精准。

// 计算图形面积
// path:[{lat:,lng:}],[{lat:,lng:}],[{lat:,lng:}]  路劲坐标点数组
computeSignedArea(path) {
  let radius = 6370996.81; // 地球平均半径
  let len = path.length;
  if (len < 3) return 0;
  let total = 0;
  let prev = path[len - 1];
  let prevTanLat = Math.tan((Math.PI / 2 - (prev.lat / 180) * Math.PI) / 2);
  let prevLng = (prev.lng / 180) * Math.PI;
  for (let i = 0; i < len; i++) {
    let tanLat = Math.tan(
      (Math.PI / 2 - (path[i].lat / 180) * Math.PI) / 2
    );
    let lng = (path[i].lng / 180) * Math.PI;
    total += this.polarTriangleArea(tanLat, lng, prevTanLat, prevLng);
    prevTanLat = tanLat;
    prevLng = lng;
  }
  return Math.abs(total * (radius * radius));
},


// 计算图形面积
polarTriangleArea(tan1, lng1, tan2, lng2) {
  let deltaLng = lng1 - lng2;
  let t = tan1 * tan2;
  return 2 * Math.atan2(t * Math.sin(deltaLng), 1 + t * Math.cos(deltaLng));
}

 

方法使用也比较简单,直接将自相交折线 各个点的坐标组成一个数组,传入 computeSignedArea(path) 就行。

由于方法返回的面积是以平方米作为单位的,所以需要处理下(毕竟地图区域那么大,以平方米计算,数字显得很大,但区域却不见得有多大。故用平方千米作为单位,以此来和我大中国960万平方千米比较,显得你这个区域有多大点)

geoUtilsValue = that.computeSignedArea(overlayList) / 1000000 + "平方千米";

技术分享图片

 

参考博文链接:https://blog.csdn.net/qq_38615014/article/details/89207005

百度地图 - 基础学习(7): 折线构成闭合图形面积计算

原文:https://www.cnblogs.com/dihong/p/14242552.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!