24

存在未知的目标位置(纬度和经度坐标)。我有 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我了解三个圆圈的一般原则,你得到一个重叠点。我模糊的是用这个输入计算那个点所需的数学。

4

4 回答 4

43

维基百科在这里对代数进行了非常彻底的讨论: 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

Wikipedia 文章中介绍的下一步是简化坐标,通过平移点使 p0 位于原点,然后旋转使 p1 在 X 轴上,而 p2 在 XY 平面上。

对于翻译,只需从 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 坐标。维基百科的文章称这个值“我”

现在 Y 坐标很容易。从原点到 p2 的长度在坐标变换下是不能改变的。所以使用勾股定理计算 p2a 的长度,然后使用勾股定理“向后”得到 p2b 的 Y 坐标必须保持长度不变。这就是维基百科称之为“J”的变量。(请注意,我会留下一个模棱两可的地方,让您弄清楚 J 是正数还是负数)。

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

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

于 2010-05-19T03:44:04.387 回答
3

我在新成立的 GIS Stack Exchange 上问了这个问题,并在那里得到了一些很好的答案。

https://gis.stackexchange.com/questions/66/trilateration-using-3-latitude-and-longitude-points-and-3-distances

那里接受的答案在Python中有一个(大概)可行的解决方案:

https://gis.stackexchange.com/questions/66/trilateration-using-3-latitude-and-longitude-points-and-3-distances/415#415

于 2010-08-04T22:19:27.947 回答
1

Paul Bourke 几何页面上

两个圆的交点

于 2010-05-12T02:10:30.390 回答
0

考虑以下 9 个圆点 A、B、C 和距离 d1、d2、d3

  • A的中心,半径d1
  • A的中心,半径d2
  • A的中心,半径d3
  • B 中心,半径 d1
  • B 中心,半径 d2
  • B 中心,半径 d3
  • C的中心,半径d1
  • C的中心,半径d2
  • C 中心,半径 d3

这些是你可能的圈子。现在我们可以剔除这些,因为我们知道如果 d1 用在 A 上,它就不会用在 B 上。

这使您可以输入,其中 A1 表示以 A 为中心、以 D1 为半径的圆:

  • {A1、B2、C3}
  • {A1、B3、C2}
  • {A2、B1、C3}
  • {A2、B3、C1}
  • {A3、B1、C2}
  • {A3、B2、C1}

您应该能够将纬度/经度转换为 X、Y、Z,知道地球的半径,以及从沿着地壳的弯曲距离到直线距离的距离,从那里您可以看到它们中的哪一个相交一个共同点。记住要允许由于浮动缺陷而产生的小误差。

于 2010-05-11T19:27:39.070 回答