2015-04-02 3 views
1

Я использую карты Google, чтобы нарисовать путь между различными местоположениями, которые хранятся в базе данных.Как обращаться с OVER_QUERY_LIMIT

fiddle

При прохождении 15 geopoints (ничего более 10) я получаю статус OVER_QUERY_LIMIT.

Я понимаю, что нам нужно дать несколько миллисекунд временного промежутка, когда мы передаем более 10 геоинформаций в секунду.

Мой вопрос КАК СДЕЛАТЬ 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>"; 
        }          

      } 
     }); 

    } 
    }); 

РЕЗУЛЬТАТ MAP (OVER_QUERY_LIMIT):

OVER_QUERY_LIMIT

+0

Я передала его @Andreas, но он не упомянул ** Как сделать ** Это все о ** Что делать **, которые очень трудно для меня, чтобы притворяться. – Prabs

ответ

1

Google reccomends:

Снижение использования, за счет оптимизации приложений для использования веб-служб более эффективно.

Увеличение пределов использования, когда это возможно, путем приобретения дополнительного пособия для лицензии на Google Maps API for Work.

Также HERE есть некоторые обходной путь, который, кажется, соответствует то, что вам нужно в

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

Это написано в Phyton, но вы можете использовать его как 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, просто установите время ожидания:

if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) 
{  
    setTimeout(3000); 
}  

Проверьте working fiddle

+0

Большое вам спасибо за ваше время и ответ @ Jordi..Am пытается реализовать вашу концепцию в JScript .. Я скажу вам, когда закончите с этим – Prabs

+0

скажите мне, если у вас есть какие-то сомнения ... Я могу дать вам с кодом 'javascript';) –

+0

Если вы отредактируете свой ответ в jscript, который может работать с этим [Fiddle] (http://jsfiddle.net/en608jxa/), тогда это было бы очень полезно .. :) – Prabs

Смежные вопросы