расстояние между 2 почтовыми индексами - PullRequest
5 голосов
/ 29 августа 2009

Я использую Google Maps API для определения расстояния между двумя почтовыми индексами Великобритании.

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 в асинхронном режиме, и поэтому к моменту времени, когда вычисляется расстояние, точка 1 и 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 поиска.

Я хочу вызывать линию вычисления расстояния только после того, как ОБА поиски дали результаты.

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

Спасибо

Ответы [ 2 ]

4 голосов
/ 29 августа 2009

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

Найдите его здесь в C #, но концепция такая же, если вы хотите воспроизвести это в JS.

0 голосов
/ 30 августа 2009

Это может сработать - по сути, заставляя 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");
}
...