2016-11-01 4 views
0

I Используя Google geocoder, чтобы получить lat и lng, когда initMap был вызван, я получил два предупреждения, первое значение undefined, а второй получить значение lat, в чем проблема, чтобы получить значение undefined , и как решить это? Мне нужно немедленно получить значение.Google карта Geocoder

function initMap(){ 
     var addr = '1600 Amphitheatre Parkway, Mountain View, CA'; 
     var code = getLatLng(addr); 
     alert(code.lat); // --> alert_1 
} 

function getLatLng(addr) { 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({'address': addr }, function (results, status) { 
     var lat,lng = 0; 
     if (status == google.maps.GeocoderStatus.OK) { 
       lat = results[0].geometry.location.lat(); 
       lng = results[0].geometry.location.lng(); 
     } 
     alert(lat); // --> alert_2 
     return {lat : lat,lng : lng}; 
    }); 
} 
+0

'лат()' в '' lat' & LNG() 'в' lng'? –

ответ

0

Функция geocode является асинхронной функцией. Поэтому вы получаете undefined за code.lat в оповещении о функции initMap и геокодированном значении в функции getLatLng. Вы можете добавить функцию обратного вызова параметров функции getLatLng, чтобы решить вашу проблему так:

function initMap() { 
    var addr = '1600 Amphitheatre Parkway, Mountain View, CA'; 
    getLatLng(addr, function(code) { 
    alert(code.lat); 
    }); 
} 

function getLatLng(addr, cb) { 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({'address': addr }, function (results, status) { 
    var lat,lng = 0; 
     if (status == google.maps.GeocoderStatus.OK) { 
     lat = results[0].geometry.location.lat(); 
     lng = results[0].geometry.location.lng(); 
     } 
     cb({lat: lat, lng: lng}); 
    }); 
} 
+0

oh ... Он по-прежнему вызывает неверное значение. – Fan

+0

Он вызывает неопределенное значение, вызывающее ошибку в 'alert (code.lat);' не может получить 'lat' – Fan

+0

Я обновил свой ответ, чтобы функция обратного вызова теперь работала правильно – mrunde

Смежные вопросы