如何检查lng / lat边界框是否与另一个相交?

时间:2015-10-15 18:56:43

标签: java

假设我有几个带有4个坐标对的边界框(仅限长/纬),每个边框代表一个方框的4个角。如何检查其中2个框是否相交?

我知道我可以使用Open your console.来检查2个矩形是否相交,但问题是它是使用X / Y /宽度/高度而不是坐标来计算的。

有人可以给我一些关于如何进行此计算的指示吗?

感谢。

修改

我想要完成的是由this库代表的。

基本上它会计算给定点周围的方形边界框,并检查(虚)方格是否相互交叉,如下图所示:

enter image description here

到目前为止,我已经能够计算每个标记的角落,现在我需要以某种方式检查它们是否相互交叉。我该怎么做这个交叉计算?

编辑2

这是我计算角落的方式:

java.awt.Rectangle

其中RADIUS = 6378.1且角度= 45/135/225/315(右上角,右下角,左下角和左上角)。

Example output

1 个答案:

答案 0 :(得分:1)

我假设在你的“纬度/长边框”中,每一边都遵循经度和纬度不变的线 - 换句话说,顶边跟随恒定纬度线,左边是恒定线经度。

虽然这实际上并不是现实生活中的矩形,但实际上它可以被视为一个用于我们目的的矩形。在数学上你可以把它想象为将边界框转换为“纬度/长度”空间,其中形状实际上是一个矩形。如果这没有意义,你可能不得不接受我的话。无论如何它可以表明,当且仅当矩形在弯曲空间中相交时,真实空间中的弯曲形状才会相交。

这个的简短版本是:如果你对矩形交叉进行标准测试(使用Java Rectangle类代码,并使用纬度和经度作为矩形边界)你将得到正确的结果。

示例

您有两个区域,定义为:

  1. 50到52度N和75和77度E之间的区域
  2. 51至53度N和76度与79度E之间的区域
  3. 您可以通过执行以下操作正确测试其交叉点:

    Rectangle r1 = new Rectangle(75,50,2,2);
    Rectangle r2 = new Rectangle(76,51,2,3);
    boolean intersects = r1.insersects(r2);
    

    欧几里德空间中的矩形不是矩形无关紧要。

    P.S。如果你的一个矩形实际上包含北极或南极,这将不起作用。在这种情况下,您需要将每个矩形分成两个,一个在杆的两侧。您需要将所有内容标准化为+/- 90纬度和+/- 180经度。如果一个或多个矩形与+/- 180经度线重叠,则需要做一些聪明的事情。