用于确定2个地理点(纬度,经度)的线形是否与地理区域(圆)相交的公式?

时间:2009-02-19 20:54:37

标签: algorithm math geometry

它不需要非常准确。有谁知道这样做的好方法?

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:5)

当您说“它不需要非常准确”时,您不会说 如何准确无法接受的解决方案。此外,您没有说出所考虑的地理区域可能有多大。这两个标准对需要采取的方法有很大的不同。

对于一个较小的区域(比如几公里),平面近似可能足够好(例如,墨卡托投影),其他一些响应会告诉您如何做到这一点。对于较大的区域,您必须考虑地球的球形度。如果你想要不准确度不到百分之一左右,你需要考虑地球的偏心率。

我将假设为了这个答案的目的,球面近似足够好,并且你的点数足够高,我们不需要担心它们的高度。

您可以使用转换将地理点(ψ,λ)转换为笛卡尔地球中心坐标

(ψ,λ)→(cos(ψ)cos(λ),cos(ψ)sin(λ),sin(ψ))

其中a是地球的平均半径(6,371 km)。所以我们假设你的线的两个点是p 0和p 1;那么通过p 0和p 1的最短线是一个大圆,它定义了一个将地球切成两半的平面,正常n = p 0×p 1。

现在我们需要找到圆形区域的边界。假设该区域的中心位于c并且该区域的表面半径为s。然后该区域的直线半径是r = sin(s / a)。我们还需要圆形区域的真正中心,c'= c cos(s / a)。 (这一点埋在地下深处!)

我们想要将两个圆相交并求解交点。不幸的是,由于数值不精确,很可能这个程序永远找不到任何解决方案,因为不精确的圆圈会在3个维度上相互错过。所以我建议采用以下步骤:将两个圆的平面相交,得到如下所示的虚线(除非c'×n = 0,在这种情况下,两个圆是平行的,c'= o,在这种情况下它们是重合的,否则他们不相交)。然后将线与圆形区域相交。

这个两步程序可以将问题缩小到两个维度,并保证即使数值不精确也会找到解决方案,但两个圆圈在3维中都会错过。

如果您需要更高的准确度,则可能需要在参考椭球上使用geodetic coordinates,例如WGS 1984

答案 1 :(得分:2)

我会说find the closest point on the line to the center of the circle,然后确定该点是否在圆圈内(即所讨论的距离小于或等于圆的半径)。

答案 2 :(得分:1)

解决问题的概要:假设地球是一个以原点为中心的半径球。将所有三个lat,lon点转换为3D坐标。线的两个点加上原点定义了一个平面;将该半平面的球体与另一个点的中心相交。如果没有平面 - 球体交点,则答案是该线与该区域不相交。如果存在平面 - 球面交点,则问题被简化为使得由平面 - 球面交叉定义的圆形区域与在线的端点之间并且以原点为中心的平面上的最短圆弧相交。如果转换为平面的坐标系,这是一个简单的2D问题。

答案 3 :(得分:1)

这个问题太模糊,无法准确回答。

是什么意思?
  

2个地理点(纬度,经度)的线形式

这可以是通过它们的great circle(也称为正统)或者它可以是球坐标的线性函数(loxodrome)。

顺便说一句,我假设你的圆圈是球体表面上的一个圆圈,对吗?

答案 4 :(得分:0)

假设线由点(x1,y1)和(x2,y2)形成,并且圆的半径为r,原点为(0,0):

计算: 发生率= r ^ 2 * [(x2 - x1)^ 2 +(y2 - y1)^ 2] - (x1 * y2 - x2 * y1)^ 2

然后,根据Incidence的值,我们可以确定以下内容: 发病率< 0:没有交集 发生率= 0:正切(圆上1点的交点) 发病率> 0:交叉点

你的圆圈可能不在原点(0,0),所以要解决这个问题,只需在上面的等式中添加原点坐标。因此,如果圆位于(x3,y3),则上述等式中的x1将变为x1 + x3。同样,y1将是y1 + y3,x2和y2也是如此。

有关详细信息,请查看此link