Problem
Ich würde gerne wissen, wie man die Entfernung und Peilung zwischen 2 GPS-Punkten ermittelt . Ich habe über die Haversinformel recherchiert. Jemand sagte mir, dass ich das Lager auch mit denselben Daten finden könnte.
Bearbeiten
Alles funktioniert gut, aber das Lager funktioniert noch nicht ganz richtig. Das Lager ist negativ, sollte aber zwischen 0 und 360 Grad liegen. Die eingestellten Daten sollten das horizontale Lager bilden 96.02166666666666
und sind:
Start point: 53.32055555555556 , -1.7297222222222221
Bearing: 96.02166666666666
Distance: 2 km
Destination point: 53.31861111111111, -1.6997222222222223
Final bearing: 96.04555555555555
Hier ist mein neuer Code:
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))
ist das gleiche wieasin(sqrt(a))
Antworten:
Hier ist eine Python-Version:
quelle
import math
dann müssen Sie angebenmath.pi
,math.sin
etc. Mit erhaltenfrom math import *
Sie direkten Zugriff auf alle Modulinhalte. Überprüfen Sie "Namespaces" in einem Python-Tutorial (wie docs.python.org/tutorial/modules.html )Die meisten dieser Antworten "runden" den Radius der Erde. Wenn Sie diese mit anderen Entfernungsrechnern (z. B. Geopy) vergleichen, sind diese Funktionen deaktiviert.
Das funktioniert gut:
quelle
Es gibt auch eine vektorisierte Implementierung , die die Verwendung von 4 Numpy-Arrays anstelle von Skalarwerten für Koordinaten ermöglicht:
quelle
Die Lagerberechnung ist falsch, Sie müssen die Eingänge auf atan2 tauschen.
Dadurch erhalten Sie das richtige Lager.
quelle
haversine formula
Ich habe das zum ersten Mal gehört, danke.Sie können Folgendes versuchen:
quelle
Hier ist eine numpy vektorisierte Implementierung der Haversine-Formel von @Michael Dunn, die eine 10- bis 50-fache Verbesserung gegenüber großen Vektoren ergibt.
quelle
Sie können das negative Lagerproblem lösen, indem Sie 360 ° hinzufügen. Leider kann dies bei positiven Lagern zu Lagern führen, die größer als 360 ° sind. Dies ist ein guter Kandidat für den Modulo-Operator. Alles in allem sollten Sie also die Zeile hinzufügen
am Ende Ihrer Methode.
quelle
Das Y in atan2 ist standardmäßig der erste Parameter. Hier ist die Dokumentation . Sie müssen Ihre Eingänge umschalten, um den richtigen Peilwinkel zu erhalten.
quelle
Siehe diesen Link: /gis/84885/whats-the-difference-between-vincenty-and-great-circle-distance-calculations
Dies gibt tatsächlich zwei Möglichkeiten, um Distanz zu bekommen. Sie sind Haversine und Vincentys. Durch meine Recherchen habe ich erfahren, dass Vincentys relativ genau ist. Verwenden Sie auch die import-Anweisung, um die Implementierung durchzuführen.
quelle
Hier sind zwei Funktionen zur Berechnung von Entfernung und Peilung, die auf dem Code in früheren Nachrichten und https://gist.github.com/jeromer/2005586 basieren (der Übersichtlichkeit halber wurde für beide Funktionen ein Tupeltyp für geografische Punkte im Lat-Lon-Format hinzugefügt ). Ich habe beide Funktionen getestet und sie scheinen richtig zu funktionieren.
quelle