2009-08-29 12 views
5

Ich benutze Google Maps API, um die Distanz zwischen 2 UK Postleitzahlen zu berechnen.Entfernung zwischen 2 PLZ (Vereinigtes Königreich)

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

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

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

jedoch die GetPoint Funktion ruft Google API asynchron und so durch den zeitlichen Abstand wird point1 berechnet und 2 nicht eingestellt worden ist (ich glaube, das ist das, was geschieht?)

Ich habe Warnungen nach jedem auch Anweisung, um den Wert der Variablen zu überprüfen und dabei habe ich Abstand, um den richtigen Wert zu sein, warten auf mich zu klicken, ok muss genug Zeit gegeben haben, um die Ergebnisse zu erhalten? Obwohl es dies mehr nicht tun :(

Hier ist die Funktion get Punkt

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

Ich weiß, dass ich für einen Rückruf auf dem lokalen Suche festlegen kann aufgerufen werden, wenn die Ergebnisse zurückkommen, aber das Problem ist hier gibt es 2 sucht.

Was ich will nur die Entfernung berechnen Linie rufen, nachdem beide Suchergebnisse zurückgekehrt.

wissen Sie, wie ich dies tun könnte?

Dank

Antwort

4

Wenn Sie GPS-Koordinaten (Breitengrad, Längengrad) für jede Postleitzahl erhalten können, bauen Sie eine Javascript-Abstandsfunktion auf.

Finden Sie here in C#, aber das Konzept ist das gleiche, wenn Sie dies in JS reproduzieren möchten.

0

Dies könnte funktionieren - im Wesentlichen drehen die setSearchCompleteCallback unterschiedlich reagieren abhängig davon, ob es die erste oder zweite Postleitzahl sucht.

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