Подтвердить что ты не робот

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

4b9b3361

Ответ 1

Википедия дает довольно подробное обсуждение алгебры здесь: http://en.wikipedia.org/wiki/Trilateration

Первый шаг, который не был полностью включен в запись в Википедии, состоит в том, чтобы преобразовать ваши координаты lat/long в декартовы координаты:

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

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

Ответ 2

Я задал этот вопрос на недавно сформированной биржевой бирже ГИС и получил там хорошие ответы.

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

Ответ 4

Рассмотрим следующие 9 кругов Точки A, B, C и расстояния d1, d2, d3

  • Центр А, радиус d1
  • Центр А, радиус d2
  • Центр А, радиус d3
  • Центр В, радиус d1
  • Центр В, радиус d2
  • Центр В, радиус d3
  • Центр C, радиус d1
  • Центр C, радиус d2
  • Центр С, радиус 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}

Вы должны иметь возможность преобразовать lat/long в X, Y, Z, зная радиус земли, и расстояния от изогнутого расстояния по земной коре до прямого расстояния, а оттуда вы можете увидеть, какой из они пересекаются в общей точке. Не забывайте допускать небольшие погрешности ошибки из-за неровности поплавка.