Skip to content

Instantly share code, notes, and snippets.

@mkhatib
Created May 24, 2013 02:55
Show Gist options
  • Save mkhatib/5641004 to your computer and use it in GitHub Desktop.
Save mkhatib/5641004 to your computer and use it in GitHub Desktop.
A Javascript utility function to generate number of random Geolocations around a center location and in a defined radius.
/**
* Generates number of random geolocation points given a center and a radius.
* @param {Object} center A JS object with lat and lng attributes.
* @param {number} radius Radius in meters.
* @param {number} count Number of points to generate.
* @return {array} Array of Objects with lat and lng attributes.
*/
function generateRandomPoints(center, radius, count) {
var points = [];
for (var i=0; i<count; i++) {
points.push(generateRandomPoint(center, radius));
}
return points;
}
/**
* Generates number of random geolocation points given a center and a radius.
* Reference URL: http://goo.gl/KWcPE.
* @param {Object} center A JS object with lat and lng attributes.
* @param {number} radius Radius in meters.
* @return {Object} The generated random points as JS object with lat and lng attributes.
*/
function generateRandomPoint(center, radius) {
var x0 = center.lng;
var y0 = center.lat;
// Convert Radius from meters to degrees.
var rd = radius/111300;
var u = Math.random();
var v = Math.random();
var w = rd * Math.sqrt(u);
var t = 2 * Math.PI * v;
var x = w * Math.cos(t);
var y = w * Math.sin(t);
var xp = x/Math.cos(y0);
// Resulting point.
return {'lat': y+y0, 'lng': xp+x0};
}
// Usage Example.
// Generates 100 points that is in a 1km radius from the given lat and lng point.
var randomGeoPoints = generateRandomPoints({'lat':24.23, 'lng':23.12}, 1000, 100);
@cloudhx
Copy link

cloudhx commented Mar 20, 2023

This is exactly what I need, thank you for the sharing!

@Monoke7
Copy link

Monoke7 commented May 25, 2023

Thank you 😁

@arpkirill
Copy link

thanks!

@hh85
Copy link

hh85 commented Sep 30, 2024

Wonderful! Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment