2009-08-29 13 views
5

J'utilise l'API Google Maps pour obtenir la distance entre les codes postaux de 2 UK.distance entre 2 codes postaux

var yourPostcode = $("#YourPostcode").val(); 
     var restaurantPostcode = $("#Postcode").val(); 

     var point1 = GetPointFromPostcode(yourPostcode); 
     var point2 = GetPointFromPostcode(restaurantPostcode); 

     var distance = point1.distanceFrom(point2, 3959).toFixed(1); 

Cependant la fonction GetPoint appelle API Google de manière asynchrone et ainsi par la distance du temps est calculé point1 et 2 ne sont pas réglées (je crois que c'est ce qui se passe?)

Je mets également des alertes après chaque déclaration pour vérifier la valeur des variables et ce faisant, j'ai la distance pour être la bonne valeur, en attendant que je clique sur ok doit avoir donné assez de temps pour obtenir les résultats? Bien qu'il ne le fait pas plus :(

est ici la fonction de point get

function GetPointFromPostcode(postcode) { 
    var point; 
    localSearch.execute(postcode + ", UK"); 
    if (localSearch.results[0]) { 
     var resultLat = localSearch.results[0].lat; 
     var resultLng = localSearch.results[0].lng; 

     point = new GLatLng(resultLat, resultLng); 

    } else { 
     $(".PostcodeError").append("Postcode Invalid"); 
    } 
    return point; 
} 

Je sais que je peux définir un rappel sur la recherche locale pour être appelé lorsque les résultats reviennent, mais le problème ici est il y a 2 recherches.

ce que je veux seulement appeler la ligne de distance après que les deux recherches calculate ont donné des résultats.

savez-vous comment je pourrais le faire?

Merci

Répondre

4

Si vous parvenez à obtenir les coordonnées GPS (latitude, longitude) pour chaque code postal, créez une fonction de distance Javascript.

Trouvez-le here en C#, mais le concept est le même si vous voulez le reproduire dans JS.

0

Cela peut fonctionner - en tournant essentiellement setSearchCompleteCallback pour réagir différemment selon qu'il recherche le premier ou le deuxième code postal.

var searchControl= new google.search.SearchControl(); 
var distanceSearch = new google.search.LocalSearch(); 
searchControl.addSearcher(distanceSearch); 

distanceSearch.setSearchCompleteCallback(null, function() { 
    if(distanceSearch.results.length > 0 && distanceSearch.postcode2) 
    { 
     distanceSearch.point1 = new GLatLng(distanceSearch.results[0].lat, distanceSearch.results[0].lng) 
     var postcode2 = distanceSearch.postcode2; 
     distanceSearch.postcode2 = null;    
     distanceSearch.execute(postcode2 + ", UK"); 
    } else if (distanceSearch.results.length > 0 && !distanceSearch.postcode2) { 
     distanceSearch.point2 = new GLatLng(distanceSearch.results[0].lat, distanceSearch.results[0].lng) 
     //some code to calculate distance and write it to somewhere 
    } else { 
     //no search results 
    } 
}); 

function measureDistance(postcode1, postcode2) { 
    distanceSearch.postcode2 = postcode2; 
    distanceSearch.execute(postcode1 + ", UK"); 
} 
Questions connexes