2016-09-19 5 views
0

У меня есть функция getLatLong(), которую я использую на протяжении всего кода. Я хочу, чтобы он возвращал широту и долготу с определенного адреса.Обратный звонок для получения результатов по геокодированию

function getLatLong(address) { 
var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({ 'address': address, 'region': 'uk' }, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 

     lat = results[0].geometry.location.lat(); 
     lng = results[0].geometry.location.lng(); 
     return [lat, lng]; 

    } else { 
     return ("Unable to find address: " + status); 
    } 
}); 

}

Желание быть в состоянии сделать getLatLong("London SW1A 1AA"); я, кажется, не в состоянии заставить его работать. Он постоянно возвращает undefined. Изучив немного, я вижу, что мне нужно использовать обратный вызов, но я не могу для жизни понять, как это сделать.

+1

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how -do-i-return-the-response-from-a-асинхронный вызов) – Andreas

ответ

0

Вы действительно хотите придерживаться API геокодирования Google? Вы можете попробовать API-интерфейс HTML5 Geolocation, используя этот MDN doc. Этот API является очень новым и поэтому не забудьте проверить совместимость браузера с w3schools

+0

К сожалению, это не сработает, поскольку у меня есть несколько разных адресов, которые мне нужно преобразовать в Lat и Lng. –

+0

Если вы еще не поняли, вы использовали обратный вызов в своем коде. функция anon func в вашем методе geocode() является функцией обратного вызова. Он возвращает либо массив, либо строку. Поэтому сохраните это в var как var result = getLatLong() и проверьте тип var с помощью typeof, а затем обработайте его, если это массив или строка. Кстати, часть else внутри вашей функции anon не должна возвращать строку типа return ("..." + str), а вместо этого возвращать "" + str; Надеюсь это поможет. – Bharath

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

  • Нет связанных вопросов^_^