J'essaie de tracer des lignes entre deux adresses ou plus dans Google Maps. L'idée est que les adresses sont dans un tableau (dans l'ordre de la route empruntée), alors le tableau est en boucle sur et géocodées via Google Maps, donc j'ai alors un tableau de coordonnées:Google Maps: adresses de géocodage asynchrones, mais obtiennent leurs réponses dans l'ordre
function showRoute(routes) {
var points = [];
var geocoder = new GClientGeocoder();
for (var i = 0; i < routes.length; i++) {
geocoder.getLatLng(routes[i], function(point) {
points.push(point);
drawRoute(points, routes);
});
}
}
Le La fonction drawRoute() ne sera exécutée que si le tableau qui lui est transmis est identique à la longueur du tableau d'itinéraires d'origine.
La plupart du temps cela fonctionne très bien. Cependant, il se cassera s'il y a un retard dans l'obtention d'une réponse du géocodeur pour n'importe quelle valeur, car il en résultera qu'ils sont hors service.
Ma première tentative autour de ce problème est la suivante:
function showRoute(routes) {
var points = [];
var geocoder = new GClientGeocoder();
for (var i = 0; i < routes.length; i++) {
geocoder.getLatLng(routes[i], function(point) {
points[i] = point;
drawRoute(points, routes);
});
}
}
Mais la fonction fonctionne de manière asynchrone, cela signifie que la valeur de i dans le rappel de géocodage va toujours être la longueur du tableau de routes , donc ça va juste continuer à écraser la même valeur.
Vous avez des idées?
Merci! C'est exactement ce que j'essayais de faire. –
Bonnes choses :). Merci pour la bonne question. Cela m'a incité à examiner cela correctement. – RedBlueThing