Search code examples
javascriptarraysobjectgoogle-distancematrix-api

Calculate and return distances for each location in 2 arrays


I have 2 arrays with locations, I need to calculate the distance between each of the locations. I tried this but it returns only one distance for ("Lusaka, Zambia" to "Kitwe, Zambia").

var distance = require("google-distance-matrix");

let pickups = [{"address": "Lusaka, Zambia"}];
let dropoffs = [{"address": "Kitwe, Zambia"}, {"address": "Ndola, Zambia"}];

exports.handler = (event, context, callback) => {
  var dists = pickups.map(function (p, d) {
    distance.matrix([p.address], [dropoffs[d].address], function(err, distances) {
      console.log(distances);
      // return distances;
    });
  });

};

If this array was like this:

let pickups = [{"address": "Lusaka, Zambia"},{"address": "Kabwe, Zambia"}];
let dropoffs = [{"address": "Kitwe, Zambia"}, {"address": "Ndola, Zambia"}];

I would need to find and return the distance between:

  • Lusaka, Zambia, and Kitwe, Zambia
  • Lusaka, Zambia, and Ndola, Zambia
  • Kabwe, Zambia, and Kitwe, Zambia
  • Kabwe, Zambia, and Ndola, Zambia

How do I solve the problem?


Solution

  • You obviously need loop inside a loop. Something like this:

    var distance = require("google-distance-matrix");
    
    let pickups = [{"address": "Lusaka, Zambia"}];
    let dropoffs = [{"address": "Kitwe, Zambia"}, {"address": "Ndola, Zambia"}];
    
    exports.handler = (event, context, callback) => {
      let allDistances = []
      for(let pickup of pickups){
         for(let dropoff of dropoffs){
           distance.matrix(pickup.address, dropoff.address], function(err, distances) {
             allDistances.push({p: pickup.address, d: dropoff.address, d: distances})
           });
         }
      }
      return allDistances
    };