algorithm - 确定由 2 个地理点(纬度、经度)构成的线是否与地理区域(圆)相交的公式?

标签 algorithm math geometry

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

非常感谢任何帮助。

最佳答案

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

对于小区域(比如几公里),平面近似可能就足够了(例如,墨卡托投影),其他一些响应会告诉您如何做到这一点。对于较大的区域,您必须考虑地球的球形度。如果您希望误差小于 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/

相关文章:

sql-server - 单词的 Damerau-Levenshtein 距离

python - 如何在 matplotlib 中以毫米为单位设置轴尺寸和位置?

python - 哪种数据结构适合这个?

algorithm - Mips函数数组

c++ - 如何在 C++ 中使用数学

javascript - 如何计算 Javascript CountUp Timer 中的毫秒数?

algorithm - 求两条线段之间的距离?

java - 将经度、纬度转换为来自 s2 geometry-library python 的 cell id

algorithm - 如何模拟以矩形交集开始的矩形并集

arrays - 求数组中 K 个连续项的最小总和