2009-08-29 4 views
5

Я использую API Карт Google, чтобы получить расстояние между 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 вызывает Google API асинхронно и поэтому к тому времени, расстояние рассчитывается point1 и 2 не были установлены (я считаю, что это то, что происходит?)

Я также положить уведомления после каждого чтобы проверить значение переменных и сделать это, я получил расстояние, чтобы быть правильным значением, ожидая, что я нажму ОК, должно быть, дал ему достаточно времени, чтобы получить результаты? Хотя он не делает этого больше :(

Вот функция точки прибудете

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 запросы.

то, что я хочу, чтобы вызывать только рассчитать расстояние линии после того, как поиски возвращаются результаты.

вы знаете, как я мог бы сделать это делать?

Thanks

ответ

4

Если вы хотите получить GPS-координаты (широта, долгота) для каждого почтового кода, создайте функцию расстояния Javascript.

Найти here в C#, но концепция такая же, если вы хотите воспроизвести это в 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"); 
} 
Смежные вопросы