2013-02-27 109 views
-2

我需要运行几千个API调用才能获得一些距离,但是我一直在查询限制。即使在我设置脚本每1秒拨打一次电话之后,在第一次120-170呼叫之后,仍然会收到QUERY_LIMIT作为响应。之后,他们继续快速堆积。所以一段时间后,需要几秒钟甚至几分钟,直到我得到实际的响应。谷歌地图:在地图上触及谷歌查询限制javascript v3 api

脚本会每1秒钟拨打一次电话以获取行驶距离。如果返回ZERO_RESULT,则在最后添加步行距离的呼叫。如果用ZERO_RESULT做出响应,我只是通过坐标来计算径向距离。 如果它达到查询限制,它会广告另一个相同值的调用结束。

这是我的代码:

function getDistance(lat1, lon1, lat2, lon2, relId, mode, nr, total) { 
    setTimeout(function(){ 
     var directionsService = new google.maps.DirectionsService(); 
     if(mode == 'driving') travelmode = google.maps.TravelMode.DRIVING; 
     else { travelmode = google.maps.TravelMode.WALKING } 
     var request = { 
     origin: new google.maps.LatLng(lat1, lon1), 
     destination: new google.maps.LatLng(lat2, lon2), 
     travelMode: travelmode 
     }; 
     directionsService.route(request, function(result, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
      distance = parseInt(result.routes[0].legs[0].distance.value)/1000; 
      $.ajaxLoadSync('getDistance', SITE_ROOT+'admin/modules/settings/calculateDistance.php', 'lat1='+lat1+'&long1='+lon1+'&lat2='+lat2+'&long2='+lon2+'&relId='+relId+'&distance='+distance); 
     } else if(status == google.maps.DirectionsStatus.ZERO_RESULTS && mode == 'driving'){ 
      var walkingCount = 0; 
      var limitCount = 0; 
      if($('#limit_hit').html() != '') limitCount = parseInt($('#limit_hit').html()); 
      if($('#walking_dist').html() != '') walkingCount = parseInt($('#walking_dist').html()); 
      var offset = walkingCount + limitCount; 
      $('#walking_dist').html(walkingCount + 1); 
      setTimeout(function() { getDistance(lat1, lon1, lat2, lon2, relId, 'walking', nr, total) }, total*1000+offset*1000); 
     } else if(status == google.maps.DirectionsStatus.ZERO_RESULTS && mode == 'walking'){ 
      var noResult = 0; 
      if($('#no_res').html() != '') noResult = parseInt($('#no_res').html()); 
      $('#no_res').html(noResult + 1); 
      $.ajaxLoadSync('getDistance', SITE_ROOT+'admin/modules/settings/calculateDistance.php', 'lat1='+lat1+'&long1='+lon1+'&lat2='+lat2+'&long2='+lon2+'&relId='+relId+'&distance=-1'); 
     } else if(status == google.maps.DirectionsStatus.OVER_QUERY_LIMIT){ 
      var walkingCount = 0; 
      var limitCount = 0; 
      if($('#limit_hit').html() != '') limitCount = parseInt($('#limit_hit').html()); 
      if($('#walking_dist').html() != '') walkingCount = parseInt($('#walking_dist').html()); 
      var offset = walkingCount + limitCount; 
      $('#limit_hit').html(limitCount + 1); 
      setTimeout(function() { getDistance(lat1, lon1, lat2, lon2, relId, mode, nr, total) }, total*1000+offset*1000); 
     } 
     }); 
    }, nr*1000); 
} 

我会apreciate任何帮助或提示。

+0

https://developers.google.com/maps/documentation/business/faq#usage_limits – jbabey 2013-02-27 17:44:52

+0

是的,我知道这一点。我应该有每秒10个请求,但即使有1/s我有问题 – 2013-02-27 17:49:19

+0

那么你可能会通过每日限制。 – jbabey 2013-02-27 17:50:04

回答

2

我需要运行几千的API调用来获得一些距离

那么有你的问题。如果您需要更多的

使用谷歌地图API的受每天

2500个路线请求查询的限制,你可能想看看Google Maps API for Business。每天提供更多的请求。

您也可以击中其中之一usage limits.。那里有几条关于如何解决它的建议。

+0

实际上,您获得了v3 api的25,000个请求。但正如我之前提到的,我并没有达到每日限制。 QUERY_LIMITS在第一个150次左右的请求后开始发生。 – 2013-02-27 18:05:41

0

如果您正在寻找大量的行驶距离的结果,调查DistanceMatrix

然而,没有任何服务都旨在为成千上万的请求。您可能需要重新考虑您的设计(或调查营业执照)。