Geocodificación API de Google Maps sincrónicamente
Me preguntaba si es posible geocodificar algo usando la API de Google Maps de forma sincrónica, de modo que en lugar de esperar a que se llame a una función de devolución de llamada, esperaría a que se devuelva un valor. ¿Alguien ha encontrado una manera de hacer algo como esto?
PD: estoy usando la versión 3 de la api
Sí, lo que intenta lograr es posible, aunque no es necesaria una solicitud sincrónica.
Mira este código
function StoreGeo()
{
var address = $('input[name=zipcode]').val() + ', ' + $('input[name=city]').val();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var ll = results[0].geometry.location.toString();
llarr = ll.replace(/[\(\) ]/g, '').split(',');
for(i = 0; i < llarr.length;i++)
{
$('#form').append($('<input type="hidden" name="'+(i == 0 ? 'lat' : 'long')+'">').val(llarr[i]));
}
$('#form').submit();
}
else
{
alert(status);
}
});
$('#form').unbind('submit');
return false;
}
$(document).ready(function () {
//init maps
geocoder = new google.maps.Geocoder();
$('#form').bind('submit',function() {
StoreGeo();
});
});
Por lo tanto, adjunte el controlador de envío al formulario, cuando se envíe, realice la solicitud geográfica según la información de la dirección de su formulario. Pero al mismo tiempo posponga el envío devolviendo falso en el controlador. El controlador de respuestas creará 2 campos de texto ocultos 'lat' y 'long' y almacenará la respuesta. finalmente, el formulario se envía mediante la secuencia de comandos del cliente, incluidos los dos nuevos campos. Del lado del servidor puedes almacenarlos en la base de datos.
!! Tenga en cuenta que esto es posible, pero probablemente vaya en contra de los términos de Google, como se indicó anteriormente.
El Geocoder llama a su función de devolución de llamada con el valor. Esa es la única manera de hacerlo. Si fuera sincrónico, su script se congelaría mientras esperaba que se procesara el Geocode. Realmente no hay ninguna razón para hacerlo así.
¿Qué estás tratando de lograr exactamente?