Estoy tratando de usar Google geocoder API V3 para trazar una ubicación en un mapa basado en una dirección especificada por el usuario, el código está debajo.google maps geocode API V3 no devuelve el resultado en la función javascript
Cuando realizo una solicitud directamente (por ejemplo, http://maps.googleapis.com/maps/api/geocode/json?address=peterborough&sensor=false) recibo la respuesta esperada. Sin embargo, cuando realizo la misma solicitud utilizando el siguiente código, la variable de punto medio siempre está indefinida después de que la función getLatLong haya salido.
¿Qué estoy haciendo incorrectamente?
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;
}
=========================================== ====================================
A la luz de las respuestas, tengo ahora actualicé el código a lo siguiente. Todavía no obtengo ningún resultado, con los puntos de interrupción establecidos en Firebug el resultado = data.results [0] .geometry.location; nunca es golpeado.
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);
...
}
=========================================== ============================
¡Lo tengo! El código final, que funciona, se ve así:
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);
...
}
Gracias Brady, he intentado este enfoque, pero el resultado todavía nunca devuelve un valor distinto al que se inicializó. – Jason
@jibberish - Debe tener algo que va mal en otro lugar porque si ejecuto getLatLong ("York") devuelve 53.9577018, -1.0822855 – Brady
Debo de hecho. Puedo llegar hasta la línea geocoder.geocode en el depurador y luego omite la llamada a la función directamente a la devolución. ¡Seguiré enchufándome, supongo! – Jason