Accepted answer and derivatives didn't work for me. Results were very inaccurate. Correct implementation in javascript: function pointAtDistance(inputCoords, distance) { const result = {} const coords = toRadians(inputCoords) const sinLat = Math.sin(coords.latitude) const cosLat = Math.cos(coords.latitude) /* go a fixed distance in a random direction*/ const bearing = Math.random() * TWO_PI const theta = distance/EARTH_RADIUS const sinBearing = Math.sin(bearing) const cosBearing = Math.cos(bearing) const sinTheta = Math.sin(theta) const cosTheta = Math.cos(theta) result.latitude = Math.asin(sinLat*cosTheta+cosLat*sinTheta*cosBearing); result.longitude = coords.longitude + Math.atan2( sinBearing*sinTheta*cosLat, cosTheta-sinLat*Math.sin(result.latitude ) ); /* normalize -PI -> +PI radians (-180 - 180 deg)*/ result.longitude = ((result.longitude+THREE_PI)%TWO_PI)-Math.PI return toDegrees(result) } function pointInCircle(coord, distance) { const rnd = Math.random() /*use square root of random number to avoid high density at the center*/ const randomDist = Math.sqrt(rnd) * distance return pointAtDistance(coord, randomDist) } [Full gist here][1] In the accepted answer - I found that points are distributed in an ellipse with its width 1.5 times its height (in Panama) and 8 times its height (in the north of Sweden). If I removed the x coord adjustment from @whuber's answer the ellipse is distorted the other way, 8 times higher than its width. The code in my answer was based on algorithms from [here][2] Below you can see two jsfiddles that show the problem with the stretching ellipse [Correct algorithm][3] [Distorted algorithm][4] [1]: https://gitlab.com/snippets/28591 [2]: http://www.movable-type.co.uk/scripts/latlong.html [3]: http://jsfiddle.net/hoolymama/56wzdtax/ [4]: http://jsfiddle.net/hoolymama/h9e9goox/1/