Adresse geocode via jquery geocoder.geocode (400 Items)

J’essaie d’parsingr un json avec 400 adresses et de définir des icons de carte sur chaque emplacement. Mon problème est que, lorsque je boucle sur les éléments, j’obtiens une erreur: OVER_QUERY_LIMIT. Mais quel est le meilleur moyen de définir la position avec l’API Google Geocode? Ma fonction ressemble à ceci:

function getAddresses(data) { var items, markers_data = []; if (data.addresses.length > 0) { items = data.addresses; for (var i = 0; i < items.length; i++) { var item = items[i] , street = item.address.street , zip = item.address.zip , city = item.address.city , country = item.address.country; var geocoder = new google.maps.Geocoder() , fulladdress = street + ',' + zip + ' '+ city + ',' + country; setTimeout(function () { geocoder.geocode({'address': fulladdress}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { console.log(results[0].geometry.location.lat()); console.log(results[0].geometry.location.lng()); markers_data.push({ lat : results[0].geometry.location.lat(), lng : results[0].geometry.location.lng(), title: item.name, infoWindow: { content: '

'+item.name+'

'+ street + zip + city +'

' } }); } else { console.log('not geocoded'); console.log('status'); console.log(status); } }); }, 1000); } } map.addMarkers(markers_data); }

J’ai essayé de mettre ma fonction geocoder.geocode dans une fonction de délai d’attente, mais malheureusement cela ne m’aidera pas. J’utilise le plugin gmaps.js dans mon js.

Il existe un quota par session pour le service de géocodeur, comme indiqué dans la documentation:

La limite de débit est appliquée par session d’utilisateur, quel que soit le nombre d’utilisateurs partageant le même projet. Lorsque vous chargez l’API pour la première fois, un quota initial de demandes vous est atsortingbué. Une fois que vous utilisez ce quota, l’API applique des limites de taux sur les demandes supplémentaires à la seconde. Si trop de demandes sont effectuées au cours d’une certaine période, l’API renvoie un code de réponse OVER_QUERY_LIMIT.

La limite de débit par session empêche l’utilisation de services côté client pour les demandes par lot, telles que le géocodage par lot. Pour les demandes par lot, utilisez le service Web de l’API de géocodage de Google Maps.

https://developers.google.com/maps/documentation/javascript/geocoding#UsageLimits

Vous devez donc limiter vos appels côté client et exécuter une requête par seconde après 10 requêtes initiales, ou mettre en place un géocodage par lots côté serveur avec le service Web API de géocodage dans lequel vous pouvez avoir jusqu’à 50 requêtes par seconde.

En passant, dans votre code, vous essayez d’exécuter toutes les requêtes après 1 seconde. Vous devriez augmenter un délai pour chaque demande suivante.

 setTimeout(function () { //Your code }, 1000 * i); 

Ainsi, la première requête sera exécutée immédiatement, la seconde après 1 seconde, la troisième après 2 secondes, etc.