0

J'ai la méthode ci-dessous asynchrone de géocodage ci-dessous, cela fonctionne comme prévu en prenant une adresse d'un tableau d'objets personnalisé que j'ai, mon problème est la cartographie du résultat à l'objet [i] J'ai lancé cette méthode, voir les résultats ne me donnent qu'une adresse formatée qui diffère de celle que j'ai entré, "Google ajoute quelques codes de zone, change St en rue etc." donc quand je reçois ces résultats, je n'ai aucun moyen de faire correspondre les nouvelles coordonnées Lat et Lng que j'ai obtenues à chaque objet en raison de la nature asynchrone de cette méthode et les résultats ne reviennent pas dans l'ordre.Google geocoder.geocode, mappage de variable asynchrone

Merci. Edit: mes pensées seraient de créer un moyen de remettre les résultats dans l'ordre, changer cela en synchrone, pas idéal je sais et je ne trouve pas d'exemples.

fonction iterateAndAddress (objArray) {

for(var i=0; i< objArray.length; i++) { 

     var address = objArray[i].BillingStreet +' '+objArray[i].BillingCity+' '+objArray[i].BillingCountry; 
     var geocoder = new google.maps.Geocoder(); 
     console.log('Address = '+address); 

     if(geocoder) { 
      geocoder.geocode({ 'address': address}, function(results, status) { 

       if (status == google.maps.GeocoderStatus.OK) { 

        //console.log(results); 
        var lat = results[0].geometry.location.lat(); 
        var lon = results[0].geometry.location.lng(); 
        console.log('Address : '+results[0].formatted_address); 


       }else if(status == 'OVER_QUERY_LIMIT') { 

       } 
       else{ 

       } 
      }); 
     } 

    } 
} 
+0

duplication possible de [Enregistrement des résultats du géocodeur dans un tableau - Problème de fermeture] (http://stackoverflow.com/questions/13067403/saving-geocoder-results-to-an-array-closure-trouble) – geocodezip

Répondre

0

Jeter un identifiant dans le mélange. En plus de renvoyer les données, retournez l'identifiant et attachez l'information est faite et dépoussiérée.

... modifier

Ok, vous faites les demandes à partir d'un tableau d'objets. Ce tableau a-t-il des clés d'identification? Si c'est le cas, alors aussi bien que retourner lat et long retournent aussi l'id.

var id = objArray[i].id 
var lat = results[0].geometry.location.lat(); 
var lon = results[0].geometry.location.lng(); 

Ou toutes les clés d'identification que vous utilisez.

Il pourrait être préférable de retourner un tableau (ou un objet tel)

result[i].lat = results[0].geometry.location.lat(); 
result[i].lon = results[0].geometry.location.lng(); 

Tant que vous connaissez les dossiers les liens i avec alors vous avez votre point de comparaison.

Je dois admettre que je dois manquer l'asynchronoucité (mot?) De votre méthode actuelle.

+0

Merci Rafe, pouvez-vous élaborer sur lancer un identifiant? Merci. – user524156

+0

J'ai mis à jour, mais il me manque peut-être quelque chose:/ – Rafe

+1

Merci pour l'essai Rafe Je l'ai approché de manière similaire avant d'être relativement nouveau aux méthodes asynchrones JS, si vous utilisiez [i] dans ce cas 1) ce serait toujours le longueur de la matrice si elle était petite, c'est parce que la boucle quatre déclenche plusieurs méthodes geocoder.geocode étant asynchrones et au moment où la réponse se désynchronise infact [i] serait incrémenté à objArray.length;), Ceci Ce n'est pas mon problème maintenant, même si mon problème est la correspondance après que tout le géocodage est fait, cela ne fonctionne pas comme une méthode synchrone normale. – user524156

Questions connexes