我有两个 GPS 位置。对于每一个我都在不同的范围内创建一个边界框。每个边界框都有最小/最大纬度和最小/最大经度。
需要实现一种方法来检测这两个框是否重叠(不要介意重叠范围......只有真/假)。此外,此方法将集成在一个长循环中,因此我正在寻找最有效的方法。
注意:当说重叠时,我的意思是-“地图上至少有一个点包含在两个边界框中”。
有任何想法吗?
我面临同样的问题,以前的解决方案还不够。
此图显示了涵盖和未涵盖的案例
我发现这个网页给出了解决问题的正确方法:https ://rbrundritt.wordpress.com/2009/10/03/determining-if-two-bounding-boxes-overlap/ 这是实现这个解决方案:
函数 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 个边界框是否在纬度上重叠
如果 step1 和 step 2 正确,则 2 boundingbox 重叠
你可以在这里看到相应的草图:
检查一个矩形的一个角是否在另一个矩形内就足够了。这两个持有是真实的:
这个检查应该不需要任何时间,所以效率不是问题。此外,参数的顺序无关紧要。