Трилатерация с использованием трех точек широты и долготы и трех расстояний.

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


person nohat    schedule 11.05.2010    source источник
comment
На самом деле кажется, что это трилатерация en.wikipedia.org/wiki/Trilateration, поскольку в триангуляции используются углы   -  person nohat    schedule 11.05.2010
comment
Решение: gis.stackexchange.com/questions/66/   -  person zengr    schedule 03.10.2013


Ответы (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 находился в плоскости X-Y.

Для перевода просто вычтите 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. В статье в Википедии это значение называется «Я».

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

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

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

person Dan Menes    schedule 19.05.2010
comment
Немного покопавшись сегодня утром, я понял, что обычный способ преобразования широты и долготы в декартовы координаты (называемый ECEF) состоит в том, чтобы сделать X функцией cos (lon), а Y функцией sin (lon). Я поменял их местами. Это не имеет значения для окончательного расчета - это просто означает, что я использовал нетрадиционную систему координат для промежуточного шага. Но теперь я исправил уравнения до более обычного вида. - person Dan Menes; 19.05.2010
comment
Похоже, я тоже поменял местами cos (лат) и sin (лат). Было поздно. Прости. Теперь исправлено. (Я действительно сделал расчет правильно, но облажался с расшифровкой уравнений) - person Dan Menes; 19.05.2010
comment
Спасибо, это примерно 90% того, что я искал, очень полезно, и вы заслуживаете награды. На основе этого ответа я смогу получить то, что мне нужно. - person nohat; 20.05.2010
comment
Этот пост мне очень помог. Большое Вам спасибо. Просто небольшая проблема. Точка, которую я получаю, находится в декартовых координатах. Мне просто интересно, как мне преобразовать их в локальную систему координат, чтобы разместить на карте? Есть ли какая-нибудь формула? - person Pow; 17.06.2011
comment
Можете ли вы предоставить нам книгу, в которой я смогу найти то, что вы сделали? Спасибо - person Suisse; 27.07.2017

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

person nohat    schedule 04.08.2010

На страницах Геометрия Пола Бурка

пересечение двух кругов

person Martin Beckett    schedule 12.05.2010
comment
Это неработающая ссылка. - person zengr; 25.09.2013

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

person corsiKa    schedule 11.05.2010
comment
Я уже знаю, какой радиус совпадает с каким центром; мне нужны формулы для расчета точки пересечения с учетом данных широты и долготы в качестве входных данных - person nohat; 11.05.2010