lunes, 11 de marzo de 2013

Obtener nombre de la localización a través de google places

Usando los datos de longitud y latitud se puede obtener el nombre de las ubicaciones a través de google places, necesitamos tener el proyecto configurado para google maps como hemos visto antes, esto hace necesario tener la API_KEY, importada la google_play_services_lib y añadida al proyecto.

El código usado sería algo parecido a esto:


// Elemento geocoder en el contexto
Geocoder geocoder = new Geocoder(mContext);
// Elemento list que contendra la direccion
List<Address> direcciones = null;

// Funcion para obtener coger el nombre desde el geocoder
try {
direcciones = geocoder.getFromLocation(latitud, longitud,1);
} catch (Exception e) {
Log.d("Error", "Error en geocoder:"+e.toString());
}

// Funcion que determina si se obtuvo resultado o no
if(direcciones != null && direcciones.size() > 0 ){

// Creamos el objeto address
Address direccion = direcciones.get(0);

// Creamos el string a partir del elemento direccion
direccionText = String.format("%s, %s, %s",
                    direccion.getMaxAddressLineIndex() > 0 ? direccion.getAddressLine(0) : "",
                    direccion.getLocality(),                  
                    direccion.getCountryName());
}

El elemento geocoder es el encargado de obtener los datos a partir de la latitud y la longitud.
Esta información la almacenamos en un objeto List y el tipo de datos será Address. El objeto List es un grupo de objetos tipados, similar a un array. Los datos Address son Strings de datos que contienen direcciones.
Por último creamos otro objeto Address para obtener los campos de la dirección que deseamos y lo ponemos en un String.
Con String.format indicaremos el formato del texto a introducir, la primera parte indica el formato donde %s son variables de tipo string y lo obtenemos de de las lineas siguientes con los get.

Por último ya podemos mostrar la dirección almacenada en direccionText. Se recomienda usar un proceso runnable e hilos o una asynctask.



Facilito los códigos de una clase creada para obtener la localización, hay que introducir la API_KEY en el manifest:

https://www.dropbox.com/s/66l4gyefp7gms81/geolocejemplo.rar

Documentación:
Objeto Address
Objeto List
Objeto Geocoder




3 comentarios:

  1. Funciona Perfecto. Gracias!
    Al principio no se me veía el mapa. Lo único que he hecho ha sido eliminar la línea android:layout_alignParentTop="true"
    del fragment del layout y listo!

    ResponderEliminar
  2. Si el metodo getLocality me regresa null, ya no se puede hacer nada?, simplemente no me mandara la ciudad o existe alguna alternativa para que me regrese la ciudad?

    ResponderEliminar