mysql 地图运算_百度地图 - 基础学习(9): 区域重叠面积计算及绘制重叠区域边界线...

百度地图 - 基础学习(9): 区域重叠面积计算及绘制重叠区域边界线

搞定了 百度地图 - 基础学习(8): 折线构成闭合图形面积计算 又引出一个新问题,两块区域完全重叠或部分重叠,那这个重叠区域的面积又如何计算,以及重叠区域的边界线。

既然是重叠,那首要问题是确定重叠区域,以及重叠部分的关键坐标点。

一、完全重叠

如果是完全重叠的话,就简单很多了:

第一步:各自计算两个区域的面积

第二步:判定较小面积区域的各个关键点是否都在较大面积区域内(虽然是完全重叠,但不能靠嘴皮去说,靠眼睛去看,还是需要鉴定,得到一个确实的结果)

第三步:如果真的是完全重叠,则给较小面积区域新增一个多边形覆盖物以示区分function pointCmp(pointA, pointB, center) {if (pointA.lng >= 0 && pointB.lng  pointB.lat;//向量OA和向量OB的叉积let det =  (pointA.lng - center.lng) * (pointB.lat - center.lat) -  (pointB.lng - center.lng) * (pointA.lat - center.lat);if (det  0) return false;//向量OA和向量OB共线,以距离判断大小let d1 =  (pointA.lng - center.lng) * (pointA.lng - center.lng) +  (pointA.lat - center.lat) * (pointA.lat - center.lat);

let d2 =  (pointB.lng - center.lng) * (pointB.lng - center.lat) +  (pointB.lat - center.lat) * (pointB.lat - center.lat);return d1 > d2;

}      //若点a大于点b,即点a在点b顺时针方向,返回true,否则返回false  var center = {};      // 计算重心  let x = 0,

y = 0;

let pointListLen = pointList.length;      for (let i = 0; i 

x += pointList[i].lng;

y += pointList[i].lat;

}

center.lng = x / pointListLen;

center.lat = y / pointListLen;      //冒泡排序  for (let i = 0; i 

let tmp = pointList[j];

pointList[j] = pointList[j + 1];

pointList[j + 1] = tmp;

}

} else {if (pointCmp(pointList[j], pointList[0], center)) {

let tmp = pointList[j];

pointList[j] = pointList[0];

pointList[0] = tmp;

}

}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值