Google Distance Matrix需要返回值 [英] Google Distance Matrix need to return the value
问题描述
我已经使用Google距离矩阵API通过以下方式获取两个地理位置的最短距离:
I have using google distance matrix api to getting the shortest distance of two geo points from the following way:
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>
<script>
var origin1 = new google.maps.LatLng(9.6667, 80.0000);
var destinationA = new google.maps.LatLng(9.6689, 80.0059);
function calculateDistances() {
var service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
{
origins: [origin1],
destinations: [destinationA],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, callback);
}
function callback(response, status) {
if (status != google.maps.DistanceMatrixStatus.OK) {
alert('Error was: ' + status);
} else {
var origins = response.originAddresses;
for (var i = 0; i < origins.length; i++) {
var results = response.rows[i].elements;
for (var j = 0; j < results.length; j++) {
alert(results[j].distance.text);
}
}
}
}
</script>
在此代码上,我成功获得了最短的距离.但是我需要在调用方法 calculateDistances()时返回值,而不是提醒该值.我该如何使用回调方法!!
On this code I have get the shortest distance successfully. But I need to return the value when calling the method calculateDistances() instead of alert the value. How can i do in callback methods!.
推荐答案
Distance Matrix服务是异步,因此,您需要传递 callback
方法来执行完成请求后,即可处理结果.但是您可以考虑将异步API转换为 promise .
Distance Matrix service is asynchronous, for that reason, you need to pass a callback
method to execute upon completion of the request, to process the results. But you could consider to convert async API to promises.
以下示例演示了如何使用jQuery将Distance Matrix服务API转换为Promise:
The following example demonstrates how to convert Distance Matrix service API to promises using jQuery:
var origin1 = new google.maps.LatLng(9.6667, 80.0000);
var destinationA = new google.maps.LatLng(9.6689, 80.0059);
function calculateDistances(origins,destinations) {
var service = new google.maps.DistanceMatrixService();
var d = $.Deferred();
service.getDistanceMatrix(
{
origins: origins,
destinations: destinations,
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
},
function(response, status){
if (status != google.maps.DistanceMatrixStatus.OK) {
d.reject(status);
} else {
d.resolve(response);
}
});
return d.promise();
}
calculateDistances([origin1],[destinationA])
.done(function(response){
var origins = response.originAddresses;
for (var i = 0; i < origins.length; i++) {
var results = response.rows[i].elements;
for (var j = 0; j < results.length; j++) {
//console.log(results[j].distance.text);
document.getElementById('result').innerHTML += results[j].distance.text;
}
}
})
.fail(function(status){
document.getElementById('result').innerHTML = 'An error occured. Status: ' + status;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?signed_in=true"></script>
<div id='result'/>
这篇关于Google Distance Matrix需要返回值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!