谷歌距离矩阵需要返回值

问题描述:

我一直在使用谷歌的距离矩阵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()而不是提醒该值时,我需要返回该值。我怎样才能在回调方法!

+1

回调的意思是执行不返回值 – venkat7668

+0

我怎样才能改变这个方法返回方法 – nifCody

+0

为什么你需要“返回”数据? DirectionsMatrix是异步的,你不能从它的回调函数中返回任何东西,你必须在回调函数中的数据可用时使用它。你还没有告诉你使用什么来处理返回的数据。 – geocodezip

距离矩阵服务是异步,因此,您需要传递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'/>

我会做一个数组作为一个全局变量与元素的数量以及一个全局变量。然后,在回调中,我会增加元素的数量,并将当前数组元素设置为距离。

希望这回答你的问题。祝你好运!