Я хочу узнать неизвестное местоположение цели (координаты широты и долготы). Существует 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. Я понимаю общий принцип, согласно которому с тремя такими кружками вы получаете ровно одну точку перекрытия. Что мне не нравится, так это математика, необходимая для вычисления этой точки с помощью этого ввода.
Ответы:
После некоторого осмотра Википедии и того же вопроса / ответа в StackOverflow , я подумал, что сделаю удар и попробую заполнить пробелы.
Во-первых, не уверен, где вы получили вывод, но, похоже, это неправильно. Я построил точки в ArcMap, разместил их в буфере на заданных расстояниях, пересек их с буферами и затем захватил вершину пересечения, чтобы получить решения. Ваш предложенный результат - точка зеленого цвета. Я рассчитал значение в окне выноски, которое составляет около 3 метров от того, что ArcMap дал для решения, полученного из пересечения.
Математика на странице википедии не так уж и плоха, просто нужно преобразовать ваши геодезические координаты в декартовую ECEF, которую можно найти здесь . члены a / x + h могут быть заменены автономным радиусом сферы, если вы не используете эллипсоид.
Вероятно, проще всего просто дать вам хорошо (?) Документированный код, так что вот он на python
источник
Я не уверен, что я наивен, но, если вы буферизуете каждую точку по размеру, а затем пересекаете все три круга, чтобы получить правильное местоположение?
Вы можете вычислить пересечение, используя пространственные API. Примеры:
источник
В следующих примечаниях используется планарифмическая геометрия (т.е. вам придется проецировать ваши координаты в соответствующую локальную систему координат).
Мои рассуждения с работающим примером на Python следующие:
Возьмите 2 точки данных (назовите их
a
иb
). Позвоните в нашу целевую точкуx
. Мы уже знаем расстоянияax
иbx
. Мы можем рассчитать расстояние,ab
используя теорему Пифагора.Теперь вы можете отработать углы этих линий:
К сожалению, у меня не хватает времени, чтобы завершить ответ за вас, однако теперь, когда вы знаете углы, вы можете рассчитать два возможных местоположения
x
. Затем, используя третью точку c, вы можете рассчитать, какое местоположение является правильным.источник
Это может сработать. Снова быстро в Python, вы можете поместить это в тело функции xN, yN = координаты точек, r1 & r2 = значения радиуса
Значения rx & ry - это возвращаемые значения (должны быть в массиве) двух точек пересечения на окружности, если это помогает прояснить ситуацию.
Сделайте это для первых 2 кругов, затем снова для первого и последнего. Если какой-либо из результатов первой итерации сравнивается с результатами второй (возможно, в пределах некоторого допуска), то у вас есть точка пересечения. Это не очень хорошее решение, особенно когда вы начинаете добавлять больше, чем просто точки в процесс, но это самое простое, что я вижу, не решая систему уравнений.
источник
Вы можете использовать пространственный API из postgis (функции St_Intersection, St_buffer). Как заметил fmark, вы также должны помнить, что Postgis использует плоские алгоритмы, но для небольших областей использование равноудаленной проекции не приводит к большой ошибке.
источник
GEOGRAPHY
тип, а неGEOMETRY
тип.Сделайте это на языке PHP:
источник