判断2个地理点(经纬度)形成的直线是否与地理区域(圆)相交的公式?

问题描述 投票:0回答:5

不需要非常准确。有谁知道有什么好方法吗?

非常感谢任何帮助。

algorithm math geometry
5个回答
6
投票

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

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

为了这个答案的目的,我假设球形近似足够好,并且您的点处于足够相似的高度,我们不需要担心它们的高度。

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

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

其中 a 是地球的平均半径(6,371 公里)。因此,我们假设定义直线的两个点是 p₀ 和 p₁;那么通过 p₀ 和 p₁ 的最短线是一个大圆,它定义了一个将地球切成两半的平面,法线 n = p₀ × p₁。

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

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

这个两步过程将问题简化为二维,并保证即使数值不精确导致两个圆在 3 维中丢失,也能找到解决方案。

如果您需要比这更高的精度,那么您可能需要在参考椭球体上使用 大地坐标,例如 WGS 1984


2
投票

我会说找到直线上距离圆心最近的点,然后确定该点是否在圆内(即所讨论的距离小于或等于圆的半径)。


1
投票

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


1
投票

这个问题太模糊,无法准确回答。你说的是什么意思

由 2 个地理点(纬度、经度)组成的线

这可以是一个穿过它们的大圆(也称为正交坐标),也可以是球坐标的线性函数(loxodrome)。

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


0
投票

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

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

然后,根据 Incidence 的值,我们可以确定以下内容: 发生率 < 0: No intersection Incidence = 0: Tangent (intersection at 1 point on circle) Incidence > 0:交叉点

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

欲了解更多信息,请查看此链接

© www.soinside.com 2019 - 2024. All rights reserved.