I have a set of GPS coordinates in decimal notation, and I'm looking for a way to find the coordinates in a circle with variable radius around each location.
Here is an example of what I need. It is a circle with 1km
radius around the coordinate 47,11
.
What I need is the algorithm for finding the coordinates of the circle, so I can use it in my kml file using a polygon. Ideally for python.
Use the formula for "Destination point given distance and bearing from start point" here:
http://www.movable-type.co.uk/scripts/latlong.html
with your centre point as start point, your radius as distance, and loop over a number of bearings from 0 degrees to 360 degrees. That will give you the points on a circle, and will work at the poles because it uses great circles everywhere.
see also Adding distance to a GPS coordinate for simple relations between lat/lon and short-range distances.
this works:
import math
# inputs
radius = 1000.0 # m - the following code is an approximation that stays reasonably accurate for distances < 100km
centerLat = 30.0 # latitude of circle center, decimal degrees
centerLon = -100.0 # Longitude of circle center, decimal degrees
# parameters
N = 10 # number of discrete sample points to be generated along the circle
# generate points
circlePoints = []
for k in xrange(N):
# compute
angle = math.pi*2*k/N
dx = radius*math.cos(angle)
dy = radius*math.sin(angle)
point = {}
point['lat']=centerLat + (180/math.pi)*(dy/6378137)
point['lon']=centerLon + (180/math.pi)*(dx/6378137)/math.cos(centerLat*math.pi/180)
# add to list
circlePoints.append(point)
print circlePoints
It is a simple trigonometry problem.
Set your coordinate system XOY at your circle centre. Start from y = 0
and find your x
value with x = r
. Then just rotate your radius around origin by angle a
(in radians). You can find the coordinates of your next point on the circle with Xi = r * cos(a)
, Yi = r * sin(a)
. Repeat the last 2 * Pi / a
times.
That's all.
UPDATE
Taking the comment of @poolie into account, the problem can be solved in the following way (assuming the Earth being the right sphere). Consider a cross section of the Earth with its largest diameter D
through our point (call it L
). The diameter of 1 km length of our circle then becomes a chord (call it AB
) of the Earth cross section circle. So, the length of the arc AB
becomes (AB) = D * Theta
, where Theta = 2 * sin(|AB| / 2)
. Further, it is easy to find all other dimensions.