View all posts

Geolocalización: Pasos simples para integrar geolocalización en su sitio web.

La gran mayoría de personas que gustan salir a correr y que cuentan con un smartphone, utilizan alguna aplicación que lleve un registro de su velocidad, distancia recorrida y la ruta seguida. Esta información es subida en ese momento a un sitio web donde un historial es creado para que el usuario pueda consultarlo en cualquier momento, mediante gráficos de rendmiento y mapas. Este es un buen ejemplo de un sitio web que utiliza la características de “geolocalización”.

Cuando hablamos de geolocalización en una aplicación web estamos hablando de determinar con tanta exactitud como sea posible la ubicación real (longitud y latitud) de la cual procede la información que se está desplegando. Con la popularidad que han ido ganando las tecnologías móviles y sus aplicaciones, los sitios web han visto una oportunidad de acercarse a sus usuarios utilizando la geolocalización. Esto le da una experiencia más real al usuario, resultados más específicos y útiles, pero también brinda una gran cantidad de información muy interesante sobre el mercado que un sitio web está alcanzando. Por ejemplo, con Google Analytics es posible determinar desde qué lugar del mundo viene el tráfico de un sitio. Con esta información, el negocio podría decidir enfocarse o expandirse para obtener más y/o mejores resultados.

El propósito de este artículo es mostrar el esquema básico a seguir para añadir geolocalización a un proyecto web. No es tan difícil como pareciera, y podría traerle grandes beneficios a su negocio y a sus usuarios. El objetivo de la técnicas que vamos a analizar es poder obtener la longitud y la latitud relacionada a nuestra informacion, sean estas referentes a la ubicación de un resultado de una búsqueda o a la posicion actual del usuario que visita el sitio.

Paso 1: Registro de la localización

Si el sitio web requiere de algún tipo de registro, sean cuentas de usuario o ingreso de artículos a un sistema, debe solicitarse información relacionada a la localización. Se pueden solicitar tantos datos como sean necesarios, pero normalmente se utiliza:

  • País
  • Estado o provincia
  • Ciudad
  • Dirección
  • Código postal o Zip

De los datos anteriores los realmente requeridos son el país, estado o provincia y la ciudad. Los demás serían deseables ya que aumentarían la exactitud de la localización.

Paso 2: Detección de la IP

Es posible que el sitio web no necesite un registro, o que simplemente necesitemos obtener la ubicación de un usuario para mostrarle los resultados pertinentes. Si este es el caso, necesitamos determinar la dirección IP del usuario. Las direcciones IP están agrupadas de modo que se sabe que cada IP pertenece a un determinado lugar del planeta. De esta forma podríamos de obtener la ubicacion del usuario (país, estado, cuidad, etc…) mediante un web service o una base de datos de IPs, como se verá mas adelante.

Pero primero, obtengamos la IP. Existe variedad de lenguajes de programación web y cada uno permite obtener una IP de modo diferente Por ejemplo, si lo hicieramos en PHP el código necesario sería:

if (!empty($_SERVER['HTTP_CLIENT_IP'])){ //Verificar la ip compartida de internet
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ //verificar si la ip fue provista por un proxy
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}

Paso 3: Latitud y Longitud

El siguiente paso es obtener la longitud y la latitud a partir de los datos recolectados.

Si tenemos la IP, existen dos formas de encontrar esta información. Primero podríamos utilizar algún web service de geolocalización como el que provee IpInfoDb. Este sitio web provee un API mediante el cual se puede enviar a un webservice una ip, y este retornará un documento XML con la información de la locación asignada a ese IP. Junto con esta información, se proveen la longitud y la latitud.

Otra forma de obtener la longitud y la latitud es utilizar una base de datos de ips. Simplemente se descarga la base de datos, se instala en el motor de bases de datos del hosting, y se consulta con la ip que hemos obtenido. Estas bases de datos vienen ordenadas en rangos, de modo que se debe buscar a que rango pertenece la ip que tenemos y recuperar la dirección asociada al rango. Normalmente se utiliza algún tipo de fórmula para convertir la IP en una llave que se pueda relacionar al rango. Por ejemplo, IpInfoDb.com utiliza ((A*256+B)*256+C)*256 + D donde A.B.C.D es la IP que encontramos.

Sin embargo, cada una de estas técinas tiene un problema importante a considerar. Como todo servicio web provisto por un tercero, es posible que en algún momento el servicio no esté disponible por razones externas o internas a nuestro servidor. Por ello se recomienda verificar si existe respuesta del servicio web, y en caso contrario, utilizar la base de datos de IPs como respaldo. El problema de la base de datos de IPs es que no es tan exacta como el servicio web, por ende, la mejor aproximación es usar ambos en conjunto. Por supuesto, las verisones de pago son más exactas que las versiones gratuitas.

Si en vez del IP contamos con una dirección física, podemos utilizar a Google y/o Yahoo como aliados. Podemos utilizar los siguientes servicios web para obtener un objeto que contendrá la longiud y la latitud que buscamos. La idea de contar con ambos servicios es tener alguno como respaldo del otro, aunque es dificil que cualquiera de los dos falle.

Google: http://maps.google.com/maps/geo?&q=%ADDRESS&output=csv&key=%KEY

Yahoo: http://api.local.yahoo.com/MapsService/V1/geocode?appid=%KEY&location=%ADDRESS

donde KEY es una llave proporcionada por el servicio para establecer el intercambio de información y ADDRESS sería la dirección de la cual queremos obtener la locación tan específica como sea posible, por ejemplo: 13th Street Boston Massachusetts 02129

Paso 4: Cambiando de posición

Ahora, una funcionalidad común para el usuario es poder cambiar su ubicación, de modo que los resultados mostrados por el sitio web o la aplicación puedan filtrarse de forma acorde. Para esto normalmente se le provee al usuario un input libre, en el cuál el usuario puede incluir el número zip de su locación, o su estado o la ciudad en la que está. Por ejemplo, se puede utilizar un servicio web de Webservicex.net, un sitio web dedicado a ser una fuente de datos para otros sitios web. Se pueden obtener datos como: tipo de cambio, datos de bolsa en tiempo real, clima y por supuesto, locaciones basadas en el sistema de ZIP estadounidense.

http://www.webservicex.net/uszip.asmx/GetInfoByZIP?USZip=ZIP_DEL_USUARIO

Paso 5: Despliegue

Finalmente, es importante darle al usuario confirmaciones visuales de la detección y cambio de locaciones. Para ello se puede utilizar el siguiente código que despliega una mapa desde google maps.

donde LATITUD y LONGITUD son los números obtenidos tras los pasos anteriores de detección de localización. Se mostrará algo como:

Además, como vimos en un post anterior, también se puede utilizar Sphinx para ordenar las búsquedas de acuerdo a la locación del usuario, sumado a que Sphinx permite acelerar las búsquedas hasta en un 50 por ciento.

Geolocalización con HTML5

No podíamos dejar de lado las nuevas bondades que trae consigo el HTML5, entre ellas el API de geolocalización. Con el API podemos acceder al objeto navigator.geolocation, el cual se encarga de la mayoría del trabajo “sucio” por nosotros.

Simplemente debemos verificar si el browser soporta la geolocalización de HTML5 y automáticamente el browser solicitará permiso al usuario para obtener su ubicación. Si el usuario acepta, llamamos a la función navigator.geolocation.getCurrentPosition con los siguientes parámetros:

  • 1. Función a ejecutar si se pudo acceder a la ubicación del usuario.
  • 2. Función a ejecutar si ocurrió algún error.
  • 3. Objeto que brinda opciones para activar el modo de máxima exactitud, tiempo de espera en milisegundos y cada cuanto refrescar la cache de la última posición encontrada.

Entonces todo el código necesario para obtener la longitud y latitud de la posición del usuario sería:

<script type="text/javascript">// <![CDATA[
if (navigator.geolocation) {
  var tiempo_de_espera = 3000;
  navigator.geolocation.getCurrentPosition(mostrarCoordenadas, mostrarError, { enableHighAccuracy: true, timeout: tiempo_de_espera, maximumAge: 0 } );
}
else {
  alert("La Geolocalización no es soportada por este navegador");
}

function mostrarCoordenadas(position) {
  alert("Latitud: " + position.coords.latitude + ", Longitud: " + position.coords.longitude);
}

function mostrarError(error) {
  var errores = {1: 'Permiso denegado', 2: 'Posición no disponible', 3: 'Expiró el tiempo de respuesta'};
  alert("Error: " + errores[error.code]);
}
// ]]></script>

Acá les dejamos un pequeño demo que responde a la pregunta: Es la geolocalización parte de HTML5?

Solo queda agregar que existen muchas herramientas en la web hoy en día para habilitar geolocalización en un sitio web. Con esta guía básica es posible, entonces, empezar a explotar las diversas opciones y oportunidades que ofrece este campo de la web.

Etiquetas: , , ,