检测两个GPS坐标边界框重叠

时间:2012-10-22 16:05:24

标签: java .net gps numbers

我有两个GPS位置。我为每个人创建了一个不同范围的边界框。 每个边界框都有最小/最大纬度和最小/最大经度。

需要实现一种方法来检测这两个框是否重叠(不介意重叠范围..只有true / false)。此外,这个方法将集成在一个长循环中,所以我正在寻找最有效的方法。

注意:当说重叠时我的意思是 - “地图上至少有一个点包含在两个边界框中”。

有什么想法吗?

2 个答案:

答案 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个边界框是否在经度上重叠

    • bondingbox1的左经度位于boundingbox2的longMin和longMax之间,或者bondbox1的右经度位于boundingbox2的longMin和longMax之间
  • 第2步:检查2个边界框是否在纬度上重叠

    • bondingbox1的顶部纬度位于boundingbox2的latMin和latMax之间,或者bondingbox1的底部经度位于boundingbox2的latMin和latMax之间
  • 如果步骤1和步骤2是正确的,那么2个边界框重叠

您可以在此处看到相应的草图:

答案 1 :(得分:0)

足以检查一个矩形的一个角是否在另一个矩形内。这两个持有的情况都是如此:

  • rect1.minX rect1.maxX介于rect2.minX和rect2.maxX之间
  • rect1.minY rect1.maxY介于rect2.minY和rect2.maxY之间

这项检查应该立即进行,因此效率不是问题。此外,参数的顺序无关紧要。