它不需要非常准确。有谁知道这样做的好方法吗?
非常感谢任何帮助。
最佳答案
当您说“它不需要非常准确”时,您并不是说您准备接受的解决方案多么不准确。此外,您没有说所考虑的地理区域可能有多大。这两个标准对需要采取的方法有很大的不同。
对于小区域(比如几公里),平面近似可能就足够了(例如,墨卡托投影),其他一些响应会告诉您如何做到这一点。对于较大的区域,您必须考虑地球的球形度。如果您希望误差小于 1% 左右,则需要考虑地球的偏心率。
为了这个答案的目的,我假设球面近似已经足够好,并且你们的点处于足够相似的高度,我们不需要担心它们的高度。
您可以使用变换将地理点 (ψ, λ) 转换为笛卡尔地心坐标
(ψ, λ) → (a cos(ψ) cos(λ), a cos(ψ) sin(λ), a sin(ψ))
其中 a 是地球的平均半径(6,371 公里)。因此,让我们假设定义直线的两个点是 p₀ 和 p₁;那么通过 p₀ 和 p₁ 的最短线是一个大圆,它定义了一个将地球分成两半的平面,正常 n = p₀ × p₁。
现在我们需要找到圆形区域的边界。假设该区域的中心位于 c,该区域的表面半径为 s。那么该区域的直线半径为r = a sin(s/a)。我们还需要圆形区域的真正中心,c' = c cos(s/a)。 (这个点深埋在地下!)
我们想将两个圆相交并求解交点。不幸的是,由于数值不精确,这个过程很可能永远找不到任何解,因为不精确的圆会在 3 维中相互错过。所以我建议以下程序:将两个圆的平面相交,得到如下所示的虚线(除非 c' × n = 0 在这种情况下两个圆平行并且 c' = o,在这种情况下它们重合,否则它们不相交)。然后将直线与圆形区域相交。
这个两步过程将问题简化为二维,并保证即使数值不精确导致两个圆在 3 维中丢失,也能找到解决方案。
如果您需要比这更高的准确性,那么您可能需要使用 geodetic coordinates在引用椭球体上,例如 WGS 1984 .
关于algorithm - 确定由 2 个地理点(纬度、经度)构成的线是否与地理区域(圆)相交的公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/567104/