2009-08-29 19 views
5

Estoy utilizando Google Maps API para obtener la distancia entre 2 códigos postales del Reino Unido.distancia entre 2 códigos postales

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

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

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

Sin embargo la función GetPoint llama a la API de Google de forma asincrónica y así por la distancia de hora es calculado Punto 1 y 2 no se han establecido (creo que esto es lo que está pasando?)

También puse alerta después de cada declaración para verificar el valor de las variables y al hacer esto obtuve la distancia para ser el valor correcto, esperando a que haga clic en Aceptar debe haberle dado el tiempo suficiente para obtener los resultados? A pesar de que no hace esto más :(

Aquí es la función de punto de conseguir

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; 
} 

Sé que puedo establecer una devolución de llamada de búsqueda local para ser llamado cuando los resultados vienen de vuelta, pero el problema aquí es hay 2 búsquedas.

lo que quiero es que sólo se llame a la línea de distancia calcular después de que ambas búsquedas han arrojado resultados.

¿sabe cómo podría hacer esto?

Gracias

Respuesta

4

Si puede obtener coordenadas GPS (latitud, longitud) para cada código postal, cree una función de distancia JavaScript.

Encuéntrelo here en C#, pero el concepto es el mismo si desea reproducir esto en JS.

0

Esto podría funcionar: básicamente, activar setSearchCompleteCallback para que reaccione de manera diferente dependiendo de si está buscando el primer o el segundo código 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"); 
} 
Cuestiones relacionadas