all files / generate-random-points/ index.js

100% Statements 18/18
100% Branches 0/0
100% Functions 2/2
100% Lines 18/18
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54                  100×                         101× 101×     101×   101× 101×   101× 101× 101× 101×   101×   101×                  
/**
 * 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 'latitude' and 'longitude' attributes.
 * @param  {number} radius Radius in meters.
 * @return {Object} The generated random points as JS object with latitude and longitude attributes.
 */
function generateRandomPoint (center, radius) {
  var x0 = center.longitude
  var y0 = center.latitude
 
  // 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)
 
  return {
    latitude: y + y0,
    longitude: xp + x0
  }
}
 
module.exports = {
  generateRandomPoint: generateRandomPoint,
  generateRandomPoints: generateRandomPoints
}