Il peut être utilisé lors du pilotage d'une fusée ou d'un hélicoptère radiocommandé avec GPS attaché, ou lors de la création de données à partir des informations GPS d'un objet volant. Comment calculer ** distance, angle azimut, angle d'élévation ** à partir des informations GPS ** latitude / longitude, altitude **. Il est pratique d'utiliser la bibliothèque pyproj de python, alors comment l'utiliser.
Installez pyproj
pip install pyproj
Ou
python setup.py build
python setup.py install
Soit p1 le point de référence et obj la cible volante. Utilisez la méthode inv () de la classe Geod du package pyproj pour trouver la distance et l'azimut depuis la latitude et la longitude de p1 et obj. La distance est la distance sur la carte et la distance linéaire entre le point de référence et l'objet. De plus, l'angle d'élévation (angle en regardant vers le haut) est calculé à l'aide de math.atan2 (), y compris l'altitude de obj.
geod_sample.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import math
from pyproj import Geod
#Point de référence(p1)Latitude(p1_latitude),longitude(p1_longitude)
#L'unité est le degré
p1_latitude = 35.3524
p1_longitude = 135.0302
#Les objets volants sont la latitude(obj_latitude),longitude(obj_longitude), Altitude(obj_altitude)Est à
obj_latitude = 35.3532
obj_longitude = 135.0305
obj_altitude = 1000 #Unités(m)
#ellps est le rayon équatorial. Le GPS utilise WGS84. La distance est de 6,378,137m
g = Geod(ellps='WGS84')
# inv() method
#L'argument est inv(longitude de p1,Latitude de p1,Longitude cible,Latitude cible, radians=False)
#La sortie change avec les radians. Non, ou si vous entrez Degré et Vrai dans Faux, il sera affiché en Radian
#La valeur de retour est l'angle azimutal(azimuth), Angle anti-directionnel(back_azimuth),distance(distance_2d)Commande
azimuth, back_azimuth, distance_2d = g.inv(p1_longitude, p1_latitude, obj_longitude, obj_latitude)
#Si vous ne voulez que ce dont vous avez besoin, vous pouvez faire ce qui suit
result = g.inv(p1_longitude, p1_latitude, obj_longitude, obj_latitude)
azimuth = result[0]
back_azimuth = result[1]
distance_2d = result[2]
# inv()Si vous connaissez la distance obtenue en, l'angle d'élévation sera combiné avec l'altitude GPS.(elevation)Comprendre
# math.degrees()Est-ce que les maths.atan2()La valeur de retour de est Radian, donc Degré(°)Est en cours de conversion.
elevation = math.degrees(math.atan2(obj_altitude, distance_2d)
#Distance directe à un objet volant(distance_3d)Utilise les mathématiques pour le théorème de Pitagolas
# math.Requis par pypot.
distance_3d = math.hypot(distance_2d, obj_altitude)
print 'La distance sur la carte entre la position de référence et l'objet volant est' + str(distance_2d) + "m"
print 'La distance linéaire entre la position de référence et l'objet volant est' + str(distance_3d) + "m"
print 'L'angle azimutal de la position de référence à l'objet volant est' + str(azimuth) + "°"
print 'L'angle anti-directionnel entre la position de référence et l'objet volant est' + str(back_azimuth) +"°"
print 'L'angle d'élévation de la position de référence à l'objet volant est' + str(elevation) + "°"