gpt4 book ai didi

geocoding - 使用 3 个纬度和经度点以及 3 个距离进行三边测量

转载 作者:行者123 更新时间:2023-12-02 20:16:57 35 4
gpt4 key购买 nike

存在未知的目标位置(纬度和经度坐标)。我有 3 个纬度和经度坐标对,每对坐标到目标位置的距离(以公里为单位)。如何计算目标位置的坐标?

例如,假设我有以下数据点

37.418436,-121.963477   0.265710701754km
37.417243,-121.961889 0.234592423446km
37.418692,-121.960194 0.0548954278262km

我想要的是,将其作为输入并返回 37.417959,-121.961954 作为输出的函数的内部结构是什么样的?

我了解如何计算两点之间的距离,来自 http://www.movable-type.co.uk/scripts/latlong.html我理解的一般原则是,三个圆圈就可以得到一个重叠点。我不清楚的是用这个输入计算该点所需的数学。

最佳答案

维基百科在这里对代数进行了相当彻底的讨论: http://en.wikipedia.org/wiki/Trilateration

第一步,维基百科条目中没有真正涵盖,是将纬度/经度坐标转换为笛卡尔坐标:

x0 = cos( lon0 ) * cos( lat0 ) , y0 = sin( lon0 ) * cos( lat0 ) , z0 = sin( lat0 )
x1 = cos( lon1 ) * cos( lat0 ) , y1 = sin( lon1 ) * cos( lat1 ) , z1 = sin( lat1 )
x2 = cos( lon2 ) * cos( lat0 ) , y2 = sin( lon2 ) * cos( lat2 ) , z2 = sin( lat2 )

(为了使计算简单,我捏造了一些东西,因此我们使用“地球半径”而不是公里为单位)

对于你的数据,我得到

         p0            p1           p2
X -0.420442596 -0.420430618 -0.42040255
Y -0.67380418 -0.673826567 -0.673825967
Z 0.607631426 0.607614889 0.607634975

维基百科文章中介绍的下一步是简化坐标,方法是平移点,使 p0 位于原点,然后旋转,使 p1 位于 X 轴,p2 位于 X-Y 轴上飞机。

对于翻译,只需从 p1 和 p2 中减去 p0:

    p0a      p1a          p2a
X 0 1.19779E-05 4.00462E-05
Y 0 -2.23864E-05 -2.17865E-05
Z 0 -1.65372E-05 3.5486E-06

旋转并不困难。 p1b 得到 (x,y) = (d,0),其中 d 就是从原点到 p1a 的距离(毕达哥拉斯定理)

对于 p2b,我们需要将 p2a 解析为两个分量:一个平行于 p1a(位于我们的 x 轴上),另一个垂直于 p1a(位于“b”坐标系中的 y 轴上)。

为此,我们需要一个 p1a 方向的单位向量,即 p1a * ( 1/d )。将该单位向量(如果您愿意,可以将其称为 p1a_hat)与 p2a 进行点积,这就是 p2b 的 X 坐标。维基百科文章将此值称为“I”

现在 Y 坐标就很容易了。从原点到p2的长度在坐标变换下不会改变。因此,使用勾股定理计算 p2a 的长度,然后“向后”使用勾股定理来获得 p2b 的 Y 坐标以保持长度相同。这就是维基百科称之为“J”的变量。 (请注意,我将留下一个歧义,让您弄清楚 J 是正数还是负数)。

现在您已经获得了维基百科文章用于计算的三个变量 d、I 和 J。您现在可以通过乘以地球半径将它们转换回公里。您应该能够从这里完成其余的计算

(顺便说一句,维基百科对坐标变换给出了不同的计算。我喜欢尽可能避免三角函数)。

关于geocoding - 使用 3 个纬度和经度点以及 3 个距离进行三边测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2813615/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com