3

2 地点間のルートを取得するために 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 の読み込み時間が長くなるため、リクエストの間にスリープを入れることはできません。

異なるネットワークから同じコードを試しましたが、それでも問題は解決しません。

私は間違いなく、1 日あたりの 2,500 件のリクエスト制限に達することはありませんでした。

ここで何が問題になる可能性がありますか?これに対する解決策を提案してください。

どんな助けでも大歓迎です。

前もって感謝します

サティアパル

4

3 に答える 3

1

GoogleMapAPIには2種類の割り当てがあります。1分あたり最大20(私の観察)を超える地理コードを要求した場合にブロックするクライアント側のクォータを使用しています。

詳細については、こちらをご覧ください。

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

于 2012-07-28T10:23:58.657 に答える
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 に答える
0

サーバー側の指示のために Google の API に従い、ステータスとして返されるsleep(0.2)場合に PHP ページを作成しました。OVER_QUERY_LIMIT次に、ほぼ同じデータとパラメーター$.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 オブジェクトとして取得できることですが、ここでは発生しません。私はnew google.maps.LatLng(..., ...)それらをオブジェクトに戻すのに使用していました。

于 2012-12-04T18:39:07.177 に答える