Как правильно использовать computeDistanceBetween ()? - PullRequest
1 голос
/ 20 июля 2011

Я новичок в API Карт, пытаюсь получить расстояние (в км) от 2 адресов. Что не так с этим кодом?

var mygc = new google.maps.Geocoder();

var locationOrigem;
var locationDestino;

var latOrigem  = 0;
var longOrigem = 0;

var latDestino  = 0;
var longDestino = 0;


mygc.geocode({'address' : 'Presidente Vargas 897, Centro RJ'}, function(results, status){

    locationOrigem = results[0].geometry.location;
    latOrigem   = results[0].geometry.location.lat();
    longOrigem  = results[0].geometry.location.lng();

});

mygc.geocode({'address' : 'Abelardo Bueno 3000, Barra da Tijuca RJ'}, function(results, status){

    locationDestino = results[0].geometry.location;
    latDestino  = results[0].geometry.location.lat();
    longDestino = results[0].geometry.location.lng();

});

alert(google.maps.geometry.spherical.computeDistanceBetween(locationOrigem, locationDestino));

По неизвестной причине, var locationOrigem и locationDestino являются "неопределенными" вне анонимных функций ??? Почему ???

1 Ответ

5 голосов
/ 20 июля 2011

Вы включили этот скрипт?

<script type="text/javascript" src="http://maps.google.com/maps/api/js?libraries=geometry&sensor=false&language=en"></script>

Что произойдет, когда вы запустите свой код?Вы уверены, что ваши адреса были правильно геокодированы?Вы уверены, что проблема в computeDistanceBetween.Попробуйте сбросить все переменные.

ОБНОВЛЕНИЕ:

Запросы к геокодеру выполняются асинхронно.Поэтому запрос на расчет расстояния выполнялся до того, как вы получили геокодированные данные.Вот почему ваши переменные были undefined.Вы должны использовать обратные вызовы, чтобы убедиться, что запрос завершен.Попробуйте этот код

var mygc = new google.maps.Geocoder();
var locationOrigem;
var locationDestino;
var latOrigem  = 0;
var longOrigem = 0;
var latDestino  = 0;
var longDestino = 0;

mygc.geocode({'address' : 'Presidente Vargas 897, Centro RJ'}, function(results, status){
    locationOrigem = results[0].geometry.location;
    latOrigem   = results[0].geometry.location.lat();
    longOrigem  = results[0].geometry.location.lng();
    mygc.geocode({'address' : 'Abelardo Bueno 3000, Barra da Tijuca RJ'}, function(results, status){
        locationDestino = results[0].geometry.location;
        latDestino  = results[0].geometry.location.lat();
        longDestino = results[0].geometry.location.lng();
        console.log(locationOrigem);
        console.log(locationDestino);
        console.log(google.maps.geometry.spherical.computeDistanceBetween(locationOrigem, locationDestino));
    });
});

Также вам необходимо проверить статус ответа.Я не включил, потому что это не предмет.

...