Home Drone Programming - Distance and Bearing calculation between two geo-locations using python
Post
Cancel

Drone Programming - Distance and Bearing calculation between two geo-locations using python

Navigation Systems like Global Positioning System (GPS) plays a crucial role in Manned Aircraft (Commercial & Military) and Unmanned Aircraft Systems. In GPS, the representation of positional data is in Geographic Coordinates System (Latitudes and Longitudes).

Due to the spherical structure of the earth, navigation between two points is complicated and this complexity can be reduced by using the haversine formula.

Around the world Image Credits: People illustrations by Storyset

The haversine formula is an equation important in navigation, giving great-circle distances between two points on a sphere from their longitudes and latitudes.

Program: Distance and bearing between two geographic locations

Below mentioned code is a simple python program named distance_bearing.py that returns the distance using haversine formula and the bearing angle between two geographic locations,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# Importing necessary Packages
import math

#Radius of earth in metres
R = 6371e3

def distance_bearing(homeLatitude, homeLongitude, destinationLatitude, destinationLongitude):

    """
    Simple function which returns the distance and bearing between two geographic location

    Inputs:
        1.  homeLatitude            -   Latitude of home location
        2.  homeLongitude           -   Longitude of home location
        3.  destinationLatitude     -   Latitude of Destination
        4.  destinationLongitude    -   Longitude of Destination

    Outputs:
        1. [Distance, Bearing]      -   Distance (in metres) and Bearing angle (in degrees)
                                        between home and destination

    Source:
        https://github.com/TechnicalVillager/distance-bearing-calculation
    """

    rlat1   =   homeLatitude * (math.pi/180) 
    rlat2   =   destinationLatitude * (math.pi/180) 
    rlon1   =   homeLongitude * (math.pi/180) 
    rlon2   =   destinationLongitude * (math.pi/180) 
    dlat    =   (destinationLatitude - homeLatitude) * (math.pi/180)
    dlon    =   (destinationLongitude - homeLongitude) * (math.pi/180)

    # Haversine formula to find distance
    a = (math.sin(dlat/2) * math.sin(dlat/2)) + (math.cos(rlat1) * math.cos(rlat2) * (math.sin(dlon/2) * math.sin(dlon/2)))
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))

    # Distance in metres
    distance = R * c

    # Formula for bearing
    y = math.sin(rlon2 - rlon1) * math.cos(rlat2)
    x = math.cos(rlat1) * math.sin(rlat2) - math.sin(rlat1) * math.cos(rlat2) * math.cos(rlon2 - rlon1)
    
    # Bearing in radians
    bearing = math.atan2(y, x)
    bearingDegrees = bearing * (180/math.pi)
    out = [distance, bearingDegrees]

    return out

def main():
    # Initializing an Empty Array
    dist_brng = []

    # Getting inputs from the user
    print ("+++++++++++++ Please Enter the values in decimals +++++++++++++")
    print ("Enter the Latitude of Current location: ")
    lat1 = float(input())
    print ("Enter the Longitude of Current location: ")
    lon1 = float(input())
    print ("Enter the Latitude of Destination: ")
    lat2 = float(input())
    print ("Enter the Longitude of Destination: ")
    lon2 = float(input())

    # Caluculating the Distance and Bearing 
    dist_brng = distance_bearing(lat1, lon1, lat2, lon2)

    # Displaying the Calculated Distance and Bearing
    print ('Distance between the home and destination is ', dist_brng[0], ' m')
    print ('Bearing angle between home and destination is ', dist_brng[1], 'degree')

if __name__ == "__main__":
    main()

Source: Link

Advertisement

Execution & Output

The program needs to be executed as below,

1
$ python distance_bearing.py

The following inputs are needed to be entered during the execution of the program,

  1. Home Latitude
  2. Home Longitude
  3. Destination Latitude
  4. Destination Longitude

The output of the above executed code is,

Output of the program Image Credits: Dhulkarnayn, Elucidate Drones

Conclusion

I’ve tried to explain the python program which calculates the distance and bearing between two geographic location with the acquired information from various sources. I’m expectantly waiting for your valuable feedback and suggestions regarding this topic.

At last, Sharing is Caring, feel free to share with your friends if you’ve liked this article. Thank you!

Advertisement

This post is licensed under CC BY-SA 4.0 by the author.

Advertisement

Contents

Advertisement

Dhulkarnayn - Elucidate Drones

Dhulkarnayn

I am 25 years old drone developer, holds a postgraduate degree in Avionics. I've worked on a few complex projects like drone swarms, drone light shows, autonomous landing of drones using computer-vision algorithms, etc. Since childhood, I'm much passionate about electronics, aerospace & engineering.

Please consider supporting this project!

If this article has been of help to you, and you feel generous at the moment, don’t hesitate to buy me a coffee. ☕

Buy me a coffee

Relationship between Drones and GPS

Drone Payloads - Definition, Types and their Importance