2010-01-13 8 views
2

J'ai utilisé l'API Google Maps pour créer une carte qui affiche des polylignes de direction pour plusieurs utilisateurs vers une destination commune. Ainsi, chaque utilisateur a sa propre polyligne affichée sur la carte en même temps.Limite de direction de l'API Google Maps

Le problème est qu'il semble y avoir une limite quant au nombre de polylignes renvoyées. Quand j'ai plus de 10 utilisateurs environ, j'arrête de recevoir des données polylignes. (les derniers utilisateurs à ajouter à la carte ne reçoivent pas de polyligne). Je pourrais signaler que la fonction de chargement semble toujours fonctionner (l'écouteur d'événement d'erreur n'est pas appelé), mais je n'obtiens pas de données de polyligne, ou refuse de dessiner sur la carte.

Le nombre de polylignes qui sont dessinées est légèrement différent à chaque fois, ce qui me fait penser que google n'aime pas recevoir autant de requêtes d'un même utilisateur, mais je ne peux pas en être certain.

Est-ce que quelqu'un a des idées pour contourner ce problème? J'ai essayé de fournir des latitudes et des longitudes au lieu de chaînes d'adresses pour essayer de réduire la charge de travail, mais cela ne semble pas avoir d'effet sur le nombre de polylignes qui sont dessinées.

Répondre

2

Selon le Google Maps API blog, vous devriez être en mesure de faire 10 000 requêtes GDirections par jour sans être limité par Google. Toutefois, j'ai trouvé un post sur le groupe d'API Google Maps qui suggère qu'il existe un mécanisme de limitation séparé qui renvoie 620 erreurs HTTP basées sur le taux que vous effectuez des demandes. De votre question, il semble que votre programme d'écoute d'erreur ne soit pas appelé, donc cela ne correspond pas tout à fait. Mais je n'ai pas trouvé de description officielle de ce comportement de Google, donc je ne suis pas sûr.

Pouvez-vous mettre en tampon vos demandes GDirections et réduire le taux que vous leur faites? Cela peut être un bon test pour voir si vous êtes affecté par un mécanisme de limitation de débit de demande.

+1

Enfin compris comment tamponner mes demandes et il semble fonctionner :) Si je donne 250 millisecondes entre chaque appel, je semble obtenir tous les résultats. J'ai 32 des 32 polylignes dessinées. Je n'ai pas testé quelque chose de plus élevé mais cela devrait être assez bon pour la plupart des cas. – Dominic

+1

C'est génial. Content que tu l'as réglé. – RedBlueThing

+0

merci pour l'information, je voudrais vous poser une question (il peut être puéril) - est leur toute autre façon de tracer les itinéraires (directions) sur la carte (qui sera libre pour toujours). –

1

Je viens de faire quelque chose d'assez simple comme indiqué ci-dessous. Je crée un tableau de toutes les directions que je veux ajouter à l'avance. Je boucle dans mes directions, ajoute un marqueur (j'ajoute un marqueur séparé de la direction pour qu'il y ait toujours un marqueur même si la direction ne dessine pas), puis j'appelle la fonction setTimeout pour programmer l'appel de direction afin que Google ne le fasse pas t les obtenir tous à la fois. Ensuite, j'augmente la valeur de millisecondes d'environ 250 (peut-être devoir jouer avec cette valeur).

var milliseconds = 0; 
for(i in directions){ 
    addMarker(directions[i]); //I place the marker separate to the direction so that there is always a marker even if the direction fails to draw. 

    setTimeout(function(){ 
        addDirection(directions[directionCounter]); //This is my function that makes the direction request to Google 
        directionCounter++; 
       } 
       , milliseconds); 

    milliseconds += 250; 
} 

Espérons que cela aide.