Obtener la geolocalización de nuestros usuarios para una aplicación en Symfony2

vector_267_06-01-512

Obtener la geolocalización del cliente para usarla en nuestra aplicación Symfony2 requiere un poco de preparación previa. Básicamente, tenemos que obtener la longitud y latitud desde el navegador del cliente, que éste las envíe vía ajax a un controlador de nuestra aplicación y que dicho controlador use esta información como crea oportuno.

Como ejemplo, una aplicación que hace uso de este mecanismo para mostrar un mapa de Google Maps centrado en la posición del usuario. Para la creación del mapa usaremos el bundle IvoryGoogleMapBundle. Podemos encontrar el código completo en este repositorio de GitHub y una versión live en este enlace.

Veamos los pasos de una manera más detallada.

En primer lugar accedemos a la url asignada a un controlador que carge el ćodigo en javascript en el navegador. Dicho código llamará al método navigator.geolocation.getCurrentPosition(callback) donde el callback recibirá como argumento de entrada un objeto que contiene los miembros coords.latitude y coords.longitude. Una vez que obtenemos las coordenadas las enviamos al servidor mediante una solicitud ajax.

La fucionalidad anterior queda encapsulada en el siguiente módulo:

Y es invocada desde el siguiente código:

El siguiente controlador, de la aplicación de ejemplo para este artículo,  especifica a setUserGeolocationAction como el método destino de la solicitud ajax. igualmente, para este ejemplo, hemos optado por almacenar las coordenadas en variables de sesión y comenzar la ejecución, una vez obtenidas las coordenadas, a partir del método mainAction.

Por último comentar que existe un caso límite en el que el código ejecutado en el navegador no puede obtener la geolocalización del usuario, ya sea porque el usuario se ha negado a aceptar compartirla o porque el servicio de Google no puede obtenerla. En este caso tenemos la opción de comunicarnos con una acción de nuestro controlador que se encargue de efectuar la geolocalización desde el servidor, de una manera menos exacta basada en IP Geolocation, como pueda ser la ofrecida por el siguiente Bundle.

Acerca de

Ver todas las entradas de