проблема
Я хотел бы знать, как определить расстояние и азимут между двумя точками GPS . Я исследовал формулу гаверсина. Кто-то сказал мне, что я могу найти подшипник, используя те же данные.
редактировать
Все работает нормально, но подшипник пока не работает. Подшипник выдает отрицательный сигнал, но должен находиться в диапазоне 0 - 360 градусов. Установленные данные должны составлять горизонтальный пеленг 96.02166666666666
и составляют:
Start point: 53.32055555555556 , -1.7297222222222221
Bearing: 96.02166666666666
Distance: 2 km
Destination point: 53.31861111111111, -1.6997222222222223
Final bearing: 96.04555555555555
Вот мой новый код:
from math import *
Aaltitude = 2000
Oppsite = 20000
lat1 = 53.32055555555556
lat2 = 53.31861111111111
lon1 = -1.7297222222222221
lon2 = -1.6997222222222223
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * atan2(sqrt(a), sqrt(1-a))
Base = 6371 * c
Bearing =atan2(cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lon2-lon1), sin(lon2-lon1)*cos(lat2))
Bearing = degrees(Bearing)
print ""
print ""
print "--------------------"
print "Horizontal Distance:"
print Base
print "--------------------"
print "Bearing:"
print Bearing
print "--------------------"
Base2 = Base * 1000
distance = Base * 2 + Oppsite * 2 / 2
Caltitude = Oppsite - Aaltitude
a = Oppsite/Base
b = atan(a)
c = degrees(b)
distance = distance / 1000
print "The degree of vertical angle is:"
print c
print "--------------------"
print "The distance between the Balloon GPS and the Antenna GPS is:"
print distance
print "--------------------"
atan2(sqrt(a), sqrt(1-a))
совпадает сasin(sqrt(a))
Ответы:
Вот версия Python:
источник
import math
вы должны указатьmath.pi
иmath.sin
т. Д.from math import *
Вы получите прямой доступ ко всему содержимому модуля. Ознакомьтесь с «пространствами имен» в учебнике по Python (например, docs.python.org/tutorial/modules.html )Большинство из этих ответов «округляют» радиус Земли. Если вы сравните их с другими калькуляторами расстояний (такими как геопия), эти функции будут отключены.
Это хорошо работает:
источник
Также существует векторизованная реализация , которая позволяет использовать 4 массива numpy вместо скалярных значений для координат:
источник
Расчет пеленга неверен, нужно поменять входы на atan2.
Это даст вам правильный подшипник.
источник
haversine formula
я впервые это слышу, спасибо.Вы можете попробовать следующее:
источник
Вот многократная векторизованная реализация формулы Хаверсина, данная @Michael Dunn, дает улучшение в 10-50 раз по сравнению с большими векторами.
источник
Вы можете решить проблему отрицательного подшипника, добавив 360 °. К сожалению, это может привести к тому, что для положительных подшипников угол поворота больше 360 °. Это хороший кандидат для оператора по модулю, поэтому в целом вам следует добавить строку
в конце вашего метода.
источник
Y в atan2 по умолчанию является первым параметром. Вот документация . Вам нужно будет переключить ваши входы, чтобы получить правильный угол пеленга.
источник
Перейдите по этой ссылке: /gis/84885/whats-the-difference-between-vincenty-and-great-circle-distance-calculations
на самом деле это дает два способа увеличения расстояния. Это Хаверсин и Винсентис. Из своего исследования я узнал, что Винсентис относительно точен. Также используйте оператор импорта для реализации.
источник
Вот две функции для вычисления расстояния и пеленга, которые основаны на коде из предыдущих сообщений и https://gist.github.com/jeromer/2005586 (добавлен тип кортежа для географических точек в формате lat, lon для обеих функций для ясности. ). Я протестировал обе функции, и, похоже, они работают правильно.
источник