Geocodificación API de Google Maps sincrónicamente

Resuelto giroy asked hace 15 años • 3 respuestas

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

giroy avatar Aug 21 '09 12:08 giroy
Aceptado

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.

karremans avatar Sep 12 '2010 17:09 karremans

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?

Chris B avatar Aug 21 '2009 05:08 Chris B