3

我正在使用 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
                    });
                }
            }

几乎有 6 个这样的同时请求被发送到 DirectionService。我不能在请求之间设置睡眠,因为它会增加我的应用程序 GUI 加载时间。

我也尝试过来自不同网络的相同代码,但问题仍然存在。

我绝对没有接近达到每日 2,500 个请求的限制。

这里可能是什么问题?请为此提出解决方案。

任何帮助将不胜感激。

提前致谢

萨蒂亚帕尔

4

3 回答 3

1

Google Map API 有两种配额。您正在使用客户端配额,如果您每分钟请求超过〜20(这是我的观察)地理编码,则会阻止您。

在这里查看详细信息:

https://developers.google.com/maps/articles/geocodestrat#client

于 2012-07-28T10:23:58.657 回答
0

我按照 Google 的 API 获取服务器端指示,并创建了一个 PHP 页面,sleep(0.2)如果OVER_QUERY_LIMIT返回 an 作为状态。然后我用来$.getJSON检索这个 PHP 页面,它使用几乎完全相同的数据和参数。(按照Google 的说明处理参数的差异。)

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 时,您会以 Google LatLng 对象的形式返回诸如 lat/lng 位置之类的内容,而这在此处不会发生。我只是用来new google.maps.LatLng(..., ...)将它们重新构建为对象。

于 2012-12-04T18:39:07.177 回答
0

尝试将您的请求放在 setTimeout() 函数中:query_limit 可能指的是过去的请求,距离这个请求太近了。

setTimeout(function(){
    directionsService.route(request,function(result, status) {
        if (status == google.maps.DirectionsStatus.OK)
            {[...your code...]}
        else alert(status);
    });
},1000);
于 2012-08-14T08:25:41.487 回答