百度地图 - 基础学习(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;
}
}
}
}