Problème
J'aimerais savoir comment obtenir le distance et relèvement entre 2 points GPS . J'ai fait des recherches sur la formule de l'haversine. Quelqu'un m'a dit que je pouvais aussi trouver le roulement en utilisant les mêmes données.
Modifier
Tout fonctionne bien mais le roulement ne fonctionne pas encore correctement. La sortie du relèvement est négative alors qu'elle devrait être comprise entre 0 et 360 degrés. Les données définies devraient faire en sorte que le relèvement horizontal 96.02166666666666
et l'est :
Start point: 53.32055555555556 , -1.7297222222222221
Bearing: 96.02166666666666
Distance: 2 km
Destination point: 53.31861111111111, -1.6997222222222223
Final bearing: 96.04555555555555
Voici mon nouveau 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 "--------------------"
0 votes
L'implémentation de Python haversine peut être trouvée codecodex.com/wiki/ . Cependant, pour les calculs de courte distance, il existe des moyens très simples. Maintenant, quelle est votre distance maximale prévue ? Pouvez-vous obtenir vos coordonnées dans un système de coordonnées cartésiennes local ?
0 votes
Quelques implémentations en python : - code.activestate.com/recipes/ - platoscave.net/blog/2009/oct/5/
1 votes
James Dyson : avec des distances comme 15km, le cercle de créature ne compte pas. Ma suggestion : trouvez d'abord la solution avec les distances euclidiennes ! Cela vous donnera une solution fonctionnelle et plus tard, si vos distances sont beaucoup plus longues, adaptez votre application. Merci
0 votes
Puis-je également trouver le roulement à partir de cette équation ?
1 votes
James Dyson : Si votre commentaire ci-dessus s'adressait à moi (et à ma suggestion précédente), la réponse est sûrement (et assez "trivialement" aussi). Je peux peut-être vous donner un exemple de code, mais il n'utilisera pas la trigonométrie, plutôt la géométrie (donc je ne suis pas sûr qu'il vous aidera du tout). Etes-vous familier avec le concept de vecteur ? Dans votre cas, les positions et les directions pourraient être traitées de la manière la plus simple avec des vecteurs).
0 votes
Désolé que ce message ne vous soit pas parvenu avant... Oui, ce serait merveilleux si vous pouviez me donner un exemple de code utilisant le concept de vecteur. Non, je ne suis pas encore familier avec le concept de vecteur.
1 votes
atan2(sqrt(a), sqrt(1-a))
est la même chose queasin(sqrt(a))