En utilisant Google Geocoder v3, si j'essaie de géocoder 20 adresses, j'obtiens un OVER_QUERY_LIMIT à moins que je ne les chronomètre à ~ 1 seconde d'intervalle, mais cela prend 20 secondes avant que mes marqueurs soient tous placés.
Existe-t-il un autre moyen de le faire, autre que de stocker les coordonnées à l'avance?
javascript
geocoding
google-maps
Michiel van Oosterhout
la source
la source
Réponses:
Non, il n'y a pas vraiment d'autre moyen: si vous avez de nombreux emplacements et que vous souhaitez les afficher sur une carte, la meilleure solution est de:
Ceci, bien sûr, étant donné que vous avez beaucoup moins de création / modification d'emplacements que de consultations d'emplacements.
Oui, cela signifie que vous devrez faire un peu plus de travail lors de l'enregistrement des emplacements - mais cela signifie aussi:
la source
Vous n'avez pas à attendre une seconde complète pour chaque demande. J'ai trouvé que si j'attends 200 millisecondes entre chaque demande, je peux éviter la réponse OVER_QUERY_LIMIT et l'expérience utilisateur est passable. Avec cette solution, vous pouvez charger 20 éléments en 4 secondes.
la source
setInterval
sur le nombre de demandes nécessaires, au lieu desetTimeout
, et le régler sur100
- juste au cas où le montant de l'adresse augmenterait à un moment donné le20
montant.Malheureusement, il s'agit d'une restriction du service Google Maps.
Je travaille actuellement sur une application utilisant la fonction de géocodage, et j'enregistre chaque adresse unique par utilisateur. Je génère les informations d'adresse (ville, rue, état, etc.) en fonction des informations renvoyées par Google Maps, puis enregistre également les informations lat / long dans la base de données. Cela vous évite d'avoir à recoder les choses et vous donne des adresses joliment formatées.
Une autre raison pour laquelle vous voulez faire cela est qu'il existe une limite quotidienne sur le nombre d'adresses qui peuvent être géocodées à partir d'une adresse IP particulière. Vous ne voulez pas que votre candidature échoue pour une personne pour cette raison.
la source
Je suis confronté au même problème en essayant de géocoder 140 adresses.
Ma solution de contournement a été d'ajouter usleep (100000) pour chaque boucle de la prochaine demande de géocodage. Si l'état de la demande est OVER_QUERY_LIMIT, la durée d'utilisation est augmentée de 50000 et la demande est répétée, et ainsi de suite.
Et bien sûr, toutes les données reçues (lat / long) sont stockées dans un fichier XML pour ne pas exécuter la requête à chaque chargement de la page.
la source
ÉDITER:
J'ai oublié de dire que cette solution est en pure js, la seule chose dont vous avez besoin est un navigateur qui prend en charge les promesses https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Promise
Pour ceux qui ont encore besoin d'accomplir cela, j'ai écrit ma propre solution qui combine des promesses avec des délais d'attente.
Code:
Veuillez noter que c'est juste une partie d'une plus grande bibliothèque que j'ai écrite pour gérer les trucs de Google Maps, donc les commentaires peuvent être déroutants.
L'utilisation est assez simple, mais l'approche est légèrement différente: au lieu de boucler et de résoudre une adresse à la fois, vous devrez passer un tableau d'adresses à la classe et elle gérera la recherche par elle-même, renvoyant une promesse qui , une fois résolu, renvoie un tableau contenant toutes les adresses résolues (et non résolues).
Exemple:
Sortie de la console:
Objet renvoyé:
Toute la magie se produit ici:
Fondamentalement, il boucle chaque élément avec un délai de 750 millisecondes entre chacun d'eux, donc toutes les 750 millisecondes, une adresse est contrôlée.
J'ai fait quelques tests supplémentaires et j'ai découvert que même à 700 millisecondes, j'obtenais parfois l'erreur QUERY_LIMIT, alors qu'avec 750, je n'ai eu aucun problème.
Dans tous les cas, n'hésitez pas à modifier les 750 ci-dessus si vous vous sentez en sécurité en gérant un délai inférieur.
J'espère que cela aidera quelqu'un dans un proche avenir;)
la source
Je viens de tester Google Geocoder et j'ai le même problème que vous. J'ai remarqué que je n'obtiens le statut OVER_QUERY_LIMIT qu'une fois toutes les 12 demandes.J'attends donc 1 seconde (c'est le délai minimum pour attendre) Cela ralentit l'application mais moins d'attendre 1 seconde à chaque demande
Avec la méthode de base holdOn:
J'espère que ça aide
la source