我有两个GPS位置。我为每个人创建了一个不同范围的边界框。 每个边界框都有最小/最大纬度和最小/最大经度。
需要实现一种方法来检测这两个框是否重叠(不介意重叠范围..只有true / false)。此外,这个方法将集成在一个长循环中,所以我正在寻找最有效的方法。
注意:当说重叠时我的意思是 - “地图上至少有一个点包含在两个边界框中”。
有什么想法吗?
答案 0 :(得分:3)
我面临同样的问题,以前的解决方案还不够。
此图片显示已涵盖且未涵盖的案例
我发现这个网页提供了正确的方法来回应问题:https://rbrundritt.wordpress.com/2009/10/03/determining-if-two-bounding-boxes-overlap/ 以下是此解决方案的实现:
function DoBoundingBoxesIntersect(bb1,bb2){
//First bounding box, top left corner, bottom right corner var ATLx = bb1.TopLeftLatLong.Longitude; var ATLy = bb1.TopLeftLatLong.Latitude; var ABRx = bb1.BottomRightLatLong.Longitude; var ABRy = bb1.BottomRightLatLong.Latitude; //Second bounding box, top left corner, bottom right corner var BTLx = bb2.TopLeftLatLong.Longitude; var BTLy = bb2.TopLeftLatLong.Latitude; var BBRx = bb2.BottomRightLatLong.Longitude; var BBRy = bb2.BottomRightLatLong.Latitude; var rabx = Math.abs(ATLx + ABRx – BTLx – BBRx); var raby = Math.abs(ATLy + ABRy – BTLy – BBRy); //rAx + rBx var raxPrbx = ABRx – ATLx + BBRx – BTLx; //rAy + rBy var rayPrby = ATLy – ABRy + BTLy – BBRy; if(rabx <= raxPrbx && raby <= rayPrby) { return true; } return false;
}
我们可以像这样调整解决方案:
第1步:检查2个边界框是否在经度上重叠
第2步:检查2个边界框是否在纬度上重叠
如果步骤1和步骤2是正确的,那么2个边界框重叠
您可以在此处看到相应的草图:
答案 1 :(得分:0)
足以检查一个矩形的一个角是否在另一个矩形内。这两个持有的情况都是如此:
这项检查应该立即进行,因此效率不是问题。此外,参数的顺序无关紧要。