如何使用 async.each 方法发送相同集合的两个值?
How to send two values of the same collections with async.each method?
我正在尝试使用 google 距离矩阵 api 计算 n 个点之间的距离。
这是代码
var sum=0;
for(i=1;i < locations.length;i++){
var origin = locations[i-1];
var destination = locations[i];
var service = new google.maps.DistanceMatrixService;
service.getDistanceMatrix({
origins: [origin],
destinations: [destination],
travelMode: 'DRIVING',
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, function(response, status) {
if (status !== 'OK') {
alert('Error was: ' + status);
} else {
sum += response.rows[0].elements[0].distance.value;
}
});
}
但这并不 work.As 我的循环完成速度比 google 距离矩阵响应快。我知道这是错误的,它不会起作用。因此我决定使用我最喜欢的异步库 async.js。但是我该怎么做呢?
origin = locations[i-1]
destination = locations[i].
我只是使用 async.each 获取集合中的一个元素,这是我选择的方法。 async.js应该选择什么方法来处理这些问题呢?或者我应该采用一些完全不同的方法来解决这个问题?
感谢帮助
萨拉斯
编辑
对于那些问我为什么要这样做的人?我想像优步为其自己的应用程序一样准确地计算距离,为此我正在收集大量数据点(实时位置坐标)。但我不知道他们如何准确地计算出距离(另一种方法是方向API,但我发现它不太好)。我只能猜测他们正在使用距离矩阵 API 并将其应用于整个行程的 100 个数据点来计算距离。
Select 同步从数组中取出元素放到另一个数组中:
var legs = [];
for (var i=1; i<locations.length; i++)
legs.push({origin:locations[i-1], destination:locations[i]});
然后您可以使用您选择的 async.js 方法来迭代该数组,可能是 map
或 mapSeries
,或者如果您愿意,也可能是 reduce
做的是对距离求和。
async.map(legs, function(leg, cb) {
service.getDistanceMatrix({
origins: [leg.origin],
destinations: [leg.destination],
…
}, cb);
}, function(err, responses) {
…
})
我正在尝试使用 google 距离矩阵 api 计算 n 个点之间的距离。
这是代码
var sum=0;
for(i=1;i < locations.length;i++){
var origin = locations[i-1];
var destination = locations[i];
var service = new google.maps.DistanceMatrixService;
service.getDistanceMatrix({
origins: [origin],
destinations: [destination],
travelMode: 'DRIVING',
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, function(response, status) {
if (status !== 'OK') {
alert('Error was: ' + status);
} else {
sum += response.rows[0].elements[0].distance.value;
}
});
}
但这并不 work.As 我的循环完成速度比 google 距离矩阵响应快。我知道这是错误的,它不会起作用。因此我决定使用我最喜欢的异步库 async.js。但是我该怎么做呢?
origin = locations[i-1]
destination = locations[i].
我只是使用 async.each 获取集合中的一个元素,这是我选择的方法。 async.js应该选择什么方法来处理这些问题呢?或者我应该采用一些完全不同的方法来解决这个问题?
感谢帮助
萨拉斯
编辑
对于那些问我为什么要这样做的人?我想像优步为其自己的应用程序一样准确地计算距离,为此我正在收集大量数据点(实时位置坐标)。但我不知道他们如何准确地计算出距离(另一种方法是方向API,但我发现它不太好)。我只能猜测他们正在使用距离矩阵 API 并将其应用于整个行程的 100 个数据点来计算距离。
Select 同步从数组中取出元素放到另一个数组中:
var legs = [];
for (var i=1; i<locations.length; i++)
legs.push({origin:locations[i-1], destination:locations[i]});
然后您可以使用您选择的 async.js 方法来迭代该数组,可能是 map
或 mapSeries
,或者如果您愿意,也可能是 reduce
做的是对距离求和。
async.map(legs, function(leg, cb) {
service.getDistanceMatrix({
origins: [leg.origin],
destinations: [leg.destination],
…
}, cb);
}, function(err, responses) {
…
})