我需要运行几千个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任何帮助或提示。
https://developers.google.com/maps/documentation/business/faq#usage_limits – jbabey 2013-02-27 17:44:52
是的,我知道这一点。我应该有每秒10个请求,但即使有1/s我有问题 – 2013-02-27 17:49:19
那么你可能会通过每日限制。 – jbabey 2013-02-27 17:50:04