百度地图 - 基础学习(9): 区域重叠面积计算及绘制重叠区域边界线
搞定了 百度地图 - 基础学习(8): 折线构成闭合图形面积计算 又引出一个新问题,两块区域完全重叠或部分重叠,那这个重叠区域的面积又如何计算,以及重叠区域的边界线。
既然是重叠,那首要问题是确定重叠区域,以及重叠部分的关键坐标点。
一、完全重叠
如果是完全重叠的话,就简单很多了:
第一步:各自计算两个区域的面积
第二步:判定较小面积区域的各个关键点是否都在较大面积区域内(虽然是完全重叠,但不能靠嘴皮去说,靠眼睛去看,还是需要鉴定,得到一个确实的结果)
第三步:如果真的是完全重叠,则给较小面积区域新增一个多边形覆盖物以示区分
function pointCmp(pointA, pointB, center) { if (pointA.lng >= 0 && pointB.lng < 0) return true; // if (pointA.lng == 0 && pointB.lng == 0) return pointA.lat > 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 true; 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 < pointListLen; i++) { x += pointList[i].lng; y += pointList[i].lat; } center.lng = x / pointListLen; center.lat = y / pointListLen; //冒泡排序 for (let i = 0; i < pointListLen - 1; i++) { for (let j = 0; j < pointListLen; j++) { if (j < pointListLen - 1) { if (pointCmp(pointList[j], pointList[j + 1], center)) { 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)