我需要运行几千个api调用以获得一些距离,但我一直在达到查询限制。即使我将脚本设置为每1秒进行一次调用,我仍然会在首次120-170次调用后获得QUERY_LIMIT作为响应。之后,他们继续快速堆积。所以过了一会儿它需要几秒钟甚至几分钟才能得到实际的响应。
脚本每隔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 );
}
我会提供任何帮助或提示。
答案 0 :(得分:2)
我需要运行几千次api调用以获得一些距离
那是你的问题。
使用Google Directions API需要遵守每天2,500个路线请求的查询限制
如果您需要更多,可能需要查看Google Maps API for Business。每天提出的请求要多得多。
你也可能会遇到其中一个usage limits.。关于如何解决它有一些建议。
答案 1 :(得分:0)
如果您正在寻找大量的驾驶距离结果,请调查DistanceMatrix
但是,这些服务都不适用于数千个请求。您可能需要重新考虑您的设计(或调查营业执照)。