Java 检测两个GPS坐标包围盒重叠

Java 检测两个GPS坐标包围盒重叠,java,.net,gps,numbers,Java,.net,Gps,Numbers,我有两个GPS定位。对于每一个,我在不同的范围内创建一个边界框。 每个边界框都有最小/最大纬度和最小/最大经度 需要实现一种方法来检测这两个框是否重叠(不要介意重叠范围..仅限true/false)。此外,此方法将集成在一个长循环中,因此我正在寻找最有效的方法 注意:当说重叠时,我的意思是“地图上至少有一个点包含在两个边界框中” 有什么想法吗?检查一个矩形的一个角是否在另一个矩形内就足够了。这两种观点都是如此: rect1.minX或rect1.maxX介于rect2.minX和rect2.m

我有两个GPS定位。对于每一个,我在不同的范围内创建一个边界框。 每个边界框都有最小/最大纬度和最小/最大经度

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

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


有什么想法吗?

检查一个矩形的一个角是否在另一个矩形内就足够了。这两种观点都是如此:

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

这项检查根本不需要时间,所以效率不是问题。另外,参数的顺序是不相关的。

检查一个矩形的一个角是否在另一个矩形内就足够了。这两种观点都是如此:

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

这项检查根本不需要时间,所以效率不是问题。另外,论点的顺序也不相关。

我面临同样的问题,前面的解决方案是不够的

此图显示了已覆盖和未覆盖的案例

我发现此网页提供了解决问题的正确方法: 以下是此解决方案的实现:

函数DoBoundingBoxesInsect(bb1、bb2){

//第一个边界框,左上角,右下角
var ATLx=bb1.TopLeftLatLong.Longitude;
var ATLy=bb1.TopLeftLatLong.lation;
var ABRx=bb1.BottomRightLatLong.Longitude;
var ABRy=bb1.5L长纬度;
//第二个边界框,左上角,右下角
var BTLx=bb2.TopLeftLatLong.Longitude;
var BTLy=bb2.TopLeftLatLong.lation;
var BBRx=bb2.BottomRightLatLong.Longitude;
var BBRy=bb2.BottomRightLatLong.Latitude;
var rabx=数学绝对值(ATLx+ABRx–BTLx–BBRx);
var raby=Math.abs(ATLy+ABRy–BTLy–BBRy);
//rAx+rBx
var raxPrbx=ABRx–ATLx+BBRx–BTLx;
//射线+rBy
var rayPrby=ATLy–ABRy+BTLy–BBRy;

如果(rabx我面临同样的问题,而之前的解决方案是不够的

此图显示了已覆盖和未覆盖的案例

我发现此网页提供了解决问题的正确方法: 以下是此解决方案的实现:

函数DoBoundingBoxesInsect(bb1、bb2){

//第一个边界框,左上角,右下角
var ATLx=bb1.TopLeftLatLong.Longitude;
var ATLy=bb1.TopLeftLatLong.lation;
var ABRx=bb1.BottomRightLatLong.Longitude;
var ABRy=bb1.5L长纬度;
//第二个边界框,左上角,右下角
var BTLx=bb2.TopLeftLatLong.Longitude;
var BTLy=bb2.TopLeftLatLong.lation;
var BBRx=bb2.BottomRightLatLong.Longitude;
var BBRy=bb2.BottomRightLatLong.Latitude;
var rabx=数学绝对值(ATLx+ABRx–BTLx–BBRx);
var raby=Math.abs(ATLy+ABRy–BTLy–BBRy);
//rAx+rBx
var raxPrbx=ABRx–ATLx+BBRx–BTLx;
//射线+rBy
var rayPrby=ATLy–ABRy+BTLy–BBRy;

如果(rabx,但要小心跨越日期线或极点的边界框!但要小心跨越日期线或极点的边界框!你能从你所指的站点添加一些内容吗(保留链接作为参考)?此帖子仍然没有提供明确的答案。因此您很有可能再次删除此帖子。您以前的评论被删除,因为它只提供了链接答案。链接可能会更改,并且与您的答案无关。我将帮助您获得答案上的图像,但请添加解释,而不仅仅是“我也是”回答。请引用您提供的链接中的文本以避免答案被关闭。不,这不是侵犯版权。请这样做:
“xxxxxx”-正如本网站所说http://example.com
这仍然不是一个答案-正如其他人已经提到的,您必须包含解决方案(而不仅仅是链接到它)你能从你正在引用的网站中添加一些内容吗(保留链接作为引用)?此帖子仍然没有提供明确的答案。因此您很有可能再次删除此帖子。您以前的评论被删除,因为它只提供了链接答案。链接可能会更改,并且与您的答案无关。我将帮助您获得答案上的图像,但请添加解释,而不仅仅是“我也是”回答。请引用您提供的链接中的文本以避免答案被关闭。不,这不是侵犯版权。请这样做:
“xxxxxx”-正如本网站所说http://example.com
这仍然不是一个答案-正如其他人已经提到的,您必须包含解决方案(而不仅仅是链接到它)
            //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;