谷歌距离矩阵需要返回值
问题描述:
我一直在使用谷歌的距离矩阵API从以下方式获得两个地理点的最短距离:谷歌距离矩阵需要返回值
<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()而不是提醒该值时,我需要返回该值。我怎样才能在回调方法!
答
距离矩阵服务是异步,因此,您需要传递callback
方法才能在请求完成时执行以处理结果。但是您可以考虑将异步API转换为承诺。
下面的例子演示了如何使用距离矩阵服务API转换为承诺的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'/>
答
我会做一个数组作为一个全局变量与元素的数量以及一个全局变量。然后,在回调中,我会增加元素的数量,并将当前数组元素设置为距离。
希望这回答你的问题。祝你好运!
回调的意思是执行不返回值 – venkat7668
我怎样才能改变这个方法返回方法 – nifCody
为什么你需要“返回”数据? DirectionsMatrix是异步的,你不能从它的回调函数中返回任何东西,你必须在回调函数中的数据可用时使用它。你还没有告诉你使用什么来处理返回的数据。 – geocodezip