Comment gérer OVER_QUERY_LIMIT

J'utilise google maps pour dessiner le chemin entre les différents sites stockés dans la base de données.

violon

En passant 15 géopoints (quelque chose de plus que 10), j'obtiens un statut comme OVER_QUERY_LIMIT.

Je comprends que nous devons donner quelques millisecondes de temps lorsque nous passons plus de 10 géopoints par seconde.

Ma question est: COMMENT FAIRE … Où ajouter Sleep () ou setTimeout () ou tout autre code temporel

J'ai tout essayé, le maximum de toutes les possibilités offertes par SO mais échoué. Comme ils disent simplement, donner un certain écart de temps entre la demande, mais comment faire cela?

Extrait de code:

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>"; } } }); } }); 

MAPLE DE RÉSULTAT (OVER_QUERY_LIMIT):

OVER_QUERY_LIMIT

Google recommande:

Réduire l'utilisation, en optimisant les applications pour utiliser les services Web de manière plus efficace.

Augmenter les limites d'utilisation, si possible, en prenant une allocation supplémentaire pour votre licence Google Maps API for Work.

Aussi ICI il existe une solution de rechange qui semble correspondre à ce dont vous avez besoin

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

Ceci est écrit à Phyton, mais vous pouvez l'utiliser comme Pseudocode , il est facilement lisible:

 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" 

Dans votre code javascript , il suffit de définir un délai d'attente:

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

Vérifiez la violon de travail