calculating a gps coordinate given a point, bearing and distance

242Eld picture 242Eld · Dec 25, 2010 · Viewed 10.6k times · Source

I have a problem which draws my back in some project for some time now.

I'm basically looking to trap a polygon using x,y points drawn by some script I've written. lat1,lon1 are the center GPS cords of the polygon and I'm looking for its surrounding polygon.

here is a part of my code in python:

def getcords(lat1,lon1,dr,bearing):
    lat2=asin(sin(lat1)*cos(dr)+cos(lat1)*sin(dr)*cos(bearing))
    lon2=lon1+atan2(sin(bearing)*sin(dr)*cos(lat1),cos(dr)-sin(lat1)*sin(lat2))
    return [lat2,lon2]

my input goes like this: lat1,lon1 - are given in decimal degrees. -dr is the angular computed by dividing the distance in miles by the earth's -radius(=3958.82) -bearing between 0-360 degrees.

However for the input:

 getcorsds1(42.189275, -76.85823, 0.5/3958.82, 30)

I get output: [-1.3485899508698462, -76.8576637627568], however [42.2516666666667, -76.8097222222222] is the right answer.

as for the angular distance, I calculate it simply by dividing the distance in miles by the earth's radius(=3958.82).

anybody?

Answer

eumiro picture eumiro · Dec 25, 2010

Why don't you use nice libraries?

from geopy import Point
from geopy.distance import distance, VincentyDistance

# given: lat1, lon1, bearing, distMiles
lat2, lon2 = VincentyDistance(miles=distMiles).destination(Point(lat1, lon1), bearing)

For lat1, lon1, distMiles, bearing = 42.189275,-76.85823, 0.5, 30 it returns 42.1955489, -76.853359.