2015-04-02 43 views
1

我正在使用谷歌地圖繪製存儲在數據庫中的各個位置之間的路徑。如何處理OVER_QUERY_LIMIT

fiddle

雖然經過15個geopoints(任何超過10個),我得到的地位OVER_QUERY_LIMIT。

我知道當我們每秒傳遞10個以上的地點時,我們需要給予一些毫秒的時間間隔。

我的問題是HOW TO DO THAT..Where補充睡眠()或setTimeout的()或我已經嘗試了所有其他時間的延遲代碼

,最大在SO提供,但所有的可能性失敗。因爲他們只是說請求之間的時間差距,但如何做到這一點?

代碼段:

var markers = [ 
         { 
          "title": 'abc', 
          "lat": '17.5061925', 
          "lng": '78.5049901', 
          "description": '1' 
         },     


         { 
          "title": 'abc', 
          "lat": '17.50165', 
          "lng": '78.5139204', 
          "description": '2' 
         }, 
         . 
         . 
         . 
         . 
         . 
         { 
          "title": 'abc', 
          "lat": '17.4166067', 
          "lng": '78.4853992', 
          "description": '15' 
         } 

     ]; 


    var map; 

    var mapOptions = { 
     center: new google.maps.LatLng(markers[0].lat, markers[0].lng), 
     zoom: 15 , 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    var path = new google.maps.MVCArray(); 
    var service = new google.maps.DirectionsService(); 

    var infoWindow = new google.maps.InfoWindow(); 
    var map = new google.maps.Map(document.getElementById("map"), mapOptions); 

    var poly = new google.maps.Polyline({ 
     map: map, 
     strokeColor: '#000000' 
    }); 

    var lat_lng = new Array(); 

    for (var i = 0; i <= markers.length-1; i++) 
    { 
      var src = new google.maps.LatLng(markers[i].lat, markers[i].lng); 
      var des = new google.maps.LatLng(markers[i+1].lat, markers[i+1].lng); 

      poly.setPath(path); 
      service.route({ 
       origin: src, 
       destination: des, 
       travelMode: google.maps.DirectionsTravelMode.DRIVING 
      }, 
      function (result, status) 
      { 
       if (status == google.maps.DirectionsStatus.OK) 
       { 
    for (var i = 0, len = result.routes[0].overview_path.length; 
     i < len; i++) 
        { 
         path.push(result.routes[0].overview_path[i]); 

        } 
       } 
       else{ 

        if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) 
        {  
          document.getElementById('status').innerHTML +="request failed:"+status+"<br>"; 
        }          

      } 
     }); 

    } 
    }); 

結果地圖(OVER_QUERY_LIMIT):

OVER_QUERY_LIMIT

+0

我已經提到它@Andreas但它並沒有提到**怎麼辦**這是所有關於**怎麼辦**這是非常困難的,我假裝。 – Prabs 2015-04-02 11:35:29

回答

1

谷歌reccomends:

降低使用量,通過優化應用程序使用Web服務的更多有效率的。

在可能的情況下,通過爲您的Google Maps API for Work許可證購買額外津貼來增加使用限制。

而且HERE有一些變通方法,看起來很適合你

if status == "OVER_QUERY_LIMIT": 
    time.sleep(2) 

這是寫在植酮需要什麼,而是你可以使用它作爲Pseudocode,它很容易讀取:

url = "MAPS_API_WEBSERVICE_URL" 
attempts = 0 
success = False 

while success != True and attempts < 3: 
    raw_result = urllib.urlopen(url).read() 
    attempts += 1 
    # The GetStatus function parses the answer and returns the status code 
    # This function is out of the scope of this example (you can use a SDK). 
    status = GetStatus(raw_result) 
    if status == "OVER_QUERY_LIMIT": 
    time.sleep(2) 
    # retry 
    continue 
    success = True 

if attempts == 3: 
    # send an alert as this means that the daily limit has been reached 
    print "Daily limit has been reached" 
您的 javascript代碼,只需設置超時:

檢查working fiddle

+0

非常感謝你的時間和回覆@ Jordi ..我試圖用JScript實現你的概念..我會告訴你什麼時候完成它 – Prabs 2015-04-02 12:27:59

+0

告訴我,如果你有一些疑問...我可以給你一個手用'javascript'代碼;) – 2015-04-02 13:26:01

+0

如果你在jscript中編輯你的答案,可以使用這個[小提琴](http://jsfiddle.net/en608jxa/),那麼這將是很大的幫助.. :) – Prabs 2015-04-02 13:46:41