当前位置: 首页 > Web前端 > HTML5

基于百度地图的区域重叠判断

时间:2023-04-05 01:02:36 HTML5

原文链接:Fyerl'sBlog前几天的一个小需求:用户在背景中绘制不规则区域,区域不能重叠。如图,判断分为两步:1.判断multi-morph中是否存在相交线段,如果没有则进行第二步判断(公式)2.判断是否存在包含关系顶点之间和多边形之间多边形(BMapLib.GeoUtils.isPointInPolygon)代码如下:/***Point:{lat:xxx,lng:xxx}*Line:[{lat:xxx,lng:xxx},{lat:xxx,lng:xxx}]*Surface:[{lat:xxx,lng:xxx},{lat:xxx,lng:xxx},{lat:xxx,lng:xxx}...]**/const{BMap,BMapLib}=window;/***线段是否相交*seg:[{lat:xxx,lng:xxx},{lat:xxx,lng:xxx}]**/functionisSegmentsIntersectant(segA,segB){constabc=(segA[0].lat-segB[0].lat)*(segA[1].lng-segB[0].lng)-(segA[0].lng-segB[0].lng)*(segA[1].lat-segB[0].lat);constabd=(segA[0].lat-segB[1].lat)*(segA[1].lng-segB[1].lng)-(segA[0].lng-segB[1].lng)*(segA[1].lat-segB[1].lat);如果(abc*abd>=0){返回假;}constcda=(segB[0].lat-segA[0].lat)*(segB[1].lng-segA[0].lng)-(segB[0].lng-segA[0].lng)*(segB[1].lat-segA[0].lat);constcdb=cda+abc-abd;返回!(cda*cdb>=0);}/***判断两个多边形边界是否相交*/functionisPolygonsIntersectant(plyA,plyB){for(leti=0,il=plyA.length;i{pA.push(newBMap.Point(item.lng,item.lat));});plyB.forEach((item)=>{pB.push(newBMap.Point(item.lng,item.lat));});让[a,b]=[假,假];a=pA.some(item=>BMapLib.GeoUtils.isPointInPolygon(item,newBMap.Polygon(pB)));if(!a){b=pB.some(item=>BMapLib.GeoUtils.isPointInPolygon(item,newBMap.Polygon(pA)));}返回一个||b;}/***判断多边形是否重叠**/导出函数isPolygonsOverlap(plyA,plyB){returnisPolygonsIntersectant(plyA,plyB)||isPointInPolygonBidirectional(plyA,plyB);}

最新推荐
猜你喜欢