Я пытаюсь использовать Google Geocoder API V3 для построения местоположения на карте на основе адреса, указанного пользователем, код приведен ниже.
Когда я делаю запрос напрямую (например, к http://maps.googleapis.com/maps/api/geocode/json?address=peterborough&sensor=false), я получаю ожидаемый ответ. Однако, когда я делаю тот же запрос, используя код ниже, переменная midpoint всегда не определена после функция getLatLong вышла.
Что я делаю неправильно?
function loadFromSearch(address)
{
midpoint = getLatLong(address);
mapCentre = midpoint;
map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
...
}
function getLatLong(address)
{
var result;
var url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address) + '&sensor=false'
$.getJSON(url,
function (data){
if (data.status == "OK")
{
result = data.results[0].geometry.location;
}
});
return result;
}
=============================================== ===================================
В свете полученных ответов я теперь обновил код до следующего. Я все еще не получаю никакого результата, хотя с установленными в Firebug точками останова result = data.results [0] .geometry.location; никогда не попадет.
function loadFromSearch(address)
{
midpoint = getLatLong(address, loadWithMidpoint);
}
function getLatLong(address, callback)
{
var result;
var url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address) + '&sensor=false'
$.getJSON(url,{},
function (data) {
if (data.status == "OK")
{
result = data.results[0].geometry.location;
callback(result);
}
});
}
function loadWithMidpoint(centre)
{
mapCentre = centre;
map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
...
}
=============================================== ==============================
У меня есть это! Окончательный код, который работает, выглядит следующим образом:
function loadFromSearch(coordinates, address)
{
midpoint = getLatLong(address, latLongCallback);
}
function getLatLong(address, callback)
{
var geocoder = new google.maps.Geocoder();
var result = "";
geocoder.geocode({ 'address': address, 'region': 'uk' }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK)
{
result = results[0].geometry.location;
latLongCallback(result);
}
else
{
result = "Unable to find address: " + status;
}
});
return result;
}
function latLongCallback(result)
{
mapCentre = result;
map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
...
}