我使用google.maps.DirectionsService来获取两点之间的路线。此代码在过去8个月内正在运行。但是,从过去几天开始,DirectionService路由调用返回OVER_QUERY_LIMIT响应状态。只有6个点,其中只有2或3个请求得到结果,其余的都失败了。代码与过去8个月相同。以下是供参考的代码段:
var directionsService = new google.maps.DirectionsService();
var request = {
origin:originLatlng, //This is of type : google.maps.LatLng
destination:destLatlng,
travelMode: google.maps.DirectionsTravelMode.DRIVING,
provideRouteAlternatives: true
};
directionsService.route(request, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
polyline = new google.maps.Polyline({
path: result.routes[0].overview_path,
strokeColor: color1,
strokeOpacity: 0.8,
strokeWeight: 5,
geodesic: true
});
}
}
向DirectionService提出了近6个这样的同时请求。我无法在请求之间放置睡眠,因为它会增加我的应用程序GUI加载时间。
我也尝试过来自不同网络的相同代码,但问题仍然存在。
我绝对没有达到每日2,500个请求限制。
这可能是什么问题?请为此提出解决方案。
非常感谢任何帮助。
提前致谢
Satyapal
答案 0 :(得分:1)
Google Map API有两种配额。您正在使用客户端配额,如果您每分钟请求超过20个(这是我观察到的)地理编码,则会阻止您。
在此查看详细信息:
https://developers.google.com/maps/articles/geocodestrat#client
答案 1 :(得分:0)
尝试将您的请求放在setTimeout()函数中:query_limit可以被引用到过于接近此请求的过去请求。
setTimeout(function(){
directionsService.route(request,function(result, status) {
if (status == google.maps.DirectionsStatus.OK)
{[...your code...]}
else alert(status);
});
},1000);
答案 2 :(得分:0)
我按照Google的API进行服务器端指示,并创建了一个PHP页面,如果sleep(0.2)
作为状态返回,则会OVER_QUERY_LIMIT
。然后我使用$.getJSON
来检索这个PHP页面,它使用几乎完全相同的数据和参数。 (按照Google's directions处理参数的差异。)
PHP:
$params = http_build_query($_GET);
$url = "http://maps.googleapis.com/maps/api/directions/json?sensor=false&" . $params;
$json = file_get_contents($url);
$status = json_decode($json)->status;
// check for over_query_limit status
while ($status=="OVER_QUERY_LIMIT") {
sleep(0.2); // seconds
$json = file_get_contents($url);
$status = json_decode($json)->status;
}
header('application/json');
echo $json;
jQuery的:
request = { // construct route request object
origin: start_address,
destination: end_address,
waypoints: addresses.join('|'),
avoid: 'tolls'
};
$.getJSON('directions-lookup.php', request, function(response) {
//console.log(response);
var status = response.status;
if (status==google.maps.DirectionsStatus.OK) {
// do things here
};
});
我注意到的一点是,当您使用JavaScript Directions API时,您会将lat / lng位置等内容作为Google LatLng对象返回,这在此处不会发生。我只是使用new google.maps.LatLng(..., ...)
将它们构建回对象。