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.

Revisions

  1. mkhatib created this gist May 24, 2013.
    47 changes: 47 additions & 0 deletions geo.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,47 @@
    /**
    * 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);