gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:10:11 24 4
gpt4 key购买 nike

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

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

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

有什么想法吗?

最佳答案

我遇到了同样的问题,之前的解决方案还不够。

此图显示了涵盖和未涵盖的案例

我发现这个网页提供了解决问题的正确方法: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 之间,或者bondingbox1 的右经度位于boundingbox2 的longMin 和longMax 之间
  • 第 2 步:检查 2 个边界框在纬度上是否重叠

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

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

关于java - 检测两个 GPS 坐标边界框重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13015312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com