2009-08-29 72 views
5

我使用Google Maps API獲取2個英國郵政編碼之間的距離。2個郵政編碼之間的距離

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

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

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

然而,用GetPoint函數調用谷歌API異步,因此通過的時間距離計算點1和2都沒有設置(我相信這是發生了什麼事?)

我也把警報後各語句來檢查變量的值,並做到這一點我得到的距離是正確的值,等待我點擊確定必須給它足夠的時間來獲得結果?雖然它並沒有這樣做了:(

這裏是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; 
} 

我知道我可以在本地搜索時,結果回來,但這裏的問題是被稱爲設置回調有2個搜索。

我想是隻調用計算距離行後兩種搜索已返回結果。

你知道我怎麼能做到這一點?

謝謝

回答

4

如果您能夠獲得每個郵政編碼的GPS座標(經度,緯度),建立一個Javascript距離函數。

在C#中找到它here,但是如果你想在JS中重現這一點,這個概念是一樣的。

0

這可能會奏效 - 本質上是根據是否搜索第一個或第二個郵政編碼,使setSearchCompleteCallback作出不同的反應。

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