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);
@pdhoward
Copy link

pdhoward commented Aug 1, 2020

Very helpful. Thanks for posting this super useful function!

@khaledadrani
Copy link

Hello, this was critically helpful, man! This is exactly what I needed! I re-implemented it in Python and it works like charm! Thank you again!

@ngioldasis
Copy link

Thanks for this elegant utility. It is of great help for me...

@hamzaAbuOthman
Copy link

thanks man its working good

@lucawen
Copy link

lucawen commented Apr 27, 2021

in the open source days, a Star is a 'thanks'.

@emmbyiringiro
Copy link

Thanks for make our life easier

@MohannadET
Copy link

Thanks alot. <3

@webb24h
Copy link

webb24h commented Nov 3, 2021

Very nice thank you very much!

@salsaverde123
Copy link

salsaverde123 commented Nov 4, 2021 via email

@transybao1393
Copy link

Thank you

@ecesar88
Copy link

thanks!

@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 😁

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