2017-04-30 6 views
-1

私は道路を運転しようとすると、私はOVER_QUERY_LIMITに問題があります。私は奇妙な話題でも同様の問題を見ましたが、それでも私の問題は解決しません。私はコードを提示し、私はヒントのために素晴らしいだろう。おかげOVER_QUERY_LIMITをブロックできません

function initMap(startLat, startLng, endLat, endLng) { 
     var directionsService = new google.maps.DirectionsService; 
     var directionsDisplay = new google.maps.DirectionsRenderer; 
     var start = new google.maps.LatLng(startLat, startLng); 
     var end = new google.maps.LatLng(endLat, endLng); 
     calculateAndDisplayRoute(start, end, directionsService, directionsDisplay); 
    } 
    var i; 
    var j; 
    var delay; 
    function calculateAndDisplayRoute(start, end, directionsService, directionsDisplay) { 
     directionsService.route({ 
      origin: start, 
      destination: end, 
      travelMode: google.maps.TravelMode.DRIVING 
     }, function(response, status) { 
      if (status === google.maps.DirectionsStatus.OK) { 
       var totaldistance = 0; 
       var route = response.routes[0]; 
       // display total distance information. 
       for (var i = 0; i < route.legs.length; i++) { 
        totaldistance = totaldistance + route.legs[i].distance.value; 
       } 
       document.getElementById('distance').innerHTML += "<p>total distance is " + (totaldistance/1000).toFixed(2) + " km</p>"; 
       directionsDisplay.setDirections(response); 
      } else { 
       if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) 
        j -= 2; 
       else 
        alert("Geocode was not successful for the following reason: " + status); 
      } 
     }) 
     ; 
    } 
    google.maps.event.addDomListener(window, "load", initMap); 
    function addMarker(lat,lon,optionMarker) 
    { 
     optionMarker.position = new google.maps.LatLng(lat,lon); 
     var marker = new google.maps.Marker(optionMarker); 
    } 

    function mapStart() 
    { 
     var optionMap = 
      { 
       center: new google.maps.LatLng(50.27191 ,18.86805), 
       zoom: 10, 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      } 
     map = new google.maps.Map(document.getElementById("map"), optionMap); 
     for(i=0; i < points.length; i += 2) 
     { 
      addMarker(points[i],points[i+1],{}); 
      for(j = i+2; j < points.length; j += 2) { 
       initMap(points[i], points[i + 1], points[j], points[j + 1]); 
      } 
     } 

} 

答えて

0

はどうやらあなたは、地図のJavaScript APIの方向サービスのセッションあたりの制限に達しています。

サービスリクエストは、同じプロジェクトを共有するユーザーの数に関係なく、ユーザーセッションごとにレート制限が適用されます。最初にサービスAPIをロードすると、要求の最初の割り当て量が割り当てられます。このクォータを使用すると、APIは追加リクエストのレート制限を1秒ごとに強制します。特定の期間内にリクエストが多すぎる場合、APIはOVER_QUERY_LIMIT応答コードを返します。セッションごとのレート制限により、クライアント側のサービスをバッチ要求に使用できなくなります。 Googleのサーバーに指示要求を行う点を通る繰り返し

https://developers.google.com/maps/documentation/javascript/usage

あなたループ。このループ動作は、クライアントとGoogleのセッションを過負荷にする可能性があります。

OVER_QUERY_LIMITステータスの試行間で遅延が増加するように再試行する必要があります。通常、遅延は各試行ごとに倍率によって増加し、指数バックオフ(https://en.wikipedia.org/wiki/Exponential_backoff)として知られています。

関連する問題