Трилатерация с помощью 3 точек широты и долготы и 3 расстояний

Там существует неизвестное целевое местоположение (широта и координаты долготы). У меня есть 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, я понимаю общий принцип, что с тремя кругами Вы понимаете точно одну мысль перекрытия. То, на чем я являюсь туманным, является математикой, должен был вычислить ту точку с этим входом.

24
задан Kara 18 March 2014 в 22:45
поделиться

4 ответа

Википедия дает довольно подробное обсуждение алгебры здесь: 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 находилась в плоскости XY.

Для перевода просто вычтите p0 из p1 и p2:

    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 (который идет по нашей оси y в системе координат "b").

Для этого нам нужен единичный вектор в направлении p1a, который равен p1a * (1 / d). Возьмите скалярное произведение этого единичного вектора (назовите его p1a_hat, если хотите) на p2a, и это координата X для p2b. В статье в Википедии это значение называется «I»

. Теперь с координатой Y легко. Длина от начала координат до p2 не может измениться при преобразовании координат.Итак, вычислите длину p2a, используя теорему Пифагора, а затем используйте теорему Пифагора «в обратном направлении», чтобы получить, какой должна быть координата Y для p2b, чтобы длина оставалась неизменной. Это переменная, которую Википедия называет «J». (Обратите внимание, есть двусмысленность, которую я оставлю вам, чтобы вы выяснили, является ли J положительным или отрицательным).

Теперь у вас есть три переменные d, I и J, которые в статье Википедии используются для вычислений. Теперь вы можете преобразовать их обратно в километры, умножив на радиус Земли. Отсюда

вы сможете произвести остальные вычисления (кстати, Википедия дает другой расчет для преобразования координат. Я предпочитаю избегать триггера, где это возможно).

41
ответ дан 28 November 2019 в 23:27
поделиться

Рассмотрим следующие 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, зная радиус Земли, и расстояния от изогнутого расстояния вдоль земной коры до прямого расстояния, а затем вы можете увидеть, какие из них пересекаются в общей точке. Не забудьте допустить небольшую погрешность из-за несовершенства поплавка.

0
ответ дан 28 November 2019 в 23:27
поделиться
1
ответ дан 28 November 2019 в 23:27
поделиться

Я задал этот вопрос на недавно созданной 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

2
ответ дан 28 November 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: