Geolocalización+de+lugares+próximos+en+Android

= Geolocalización de lugares próximos en Adroid =

Índice
1. Motivación 3 2. Funcionamiento 3 3. Proveedor de localización 3 4. API Google Places 4 5. Objeto JSON 4 6. Enlaces y referencias 5

1. Motivación
“En todo momento puedes saber dónde estás” decía el presidente de Google, Eric Schmidt, en el Mobile World Congress de 2011, celebrado en Barcelona, “...ahora nadie se pierde”. Perderse es casi un reto. Con el auge de la tecnología móvil, se ha potenciado la posibilidad de personalizar la información que recibe un usuario, no solo con sus gustos y preferencias, sino también dependiendo de su localización. Según la encuesta Mobile Life realizada por TNS en el año 2011 sobre el uso del móvil, una de cada cuatro personas usa esta tecnología para encontrar restaurantes y otros lugares. //__1__// Por ello, queremos realizar una guía de como obtener lugares próximos a nuestra localización.

2. Funcionamiento
Para realizar nuestro objetivo, nos apoyaremos en la API de Google Places, además de hacer uso de algún proveedor de localización del teléfono móvil. El proceso se realizará de la siguiente forma:

Obtenemos las coordenadas actuales del dispositivo mediante un proveedor de localización (para más precisión, usar GPS). Con las coordenadas, hacemos una consulta a Places, que nos devolverá un objeto JSON, el cual contendrá la información de respuesta.

<span style="font-family: Arial,Helvetica,sans-serif;">3. Proveedor de Localización
<span style="font-family: Arial,Helvetica,sans-serif;">Necesitamos obtener las coordenadas en las que se encuentra nuestro dispositivo móvil. Para ello, hacemos uso de algún proveedor que nos las proporcione.

<span style="font-family: Arial,Helvetica,sans-serif;">getSystemService(LOCATION_SERVICE) crea un objeto de tipo LocationManager, que gestiona los proveedores de localización. Usando el método getBestProvider, identificamos el mejor proveedor de entre los disponibles. Si no se indica ninguna restricción, nos dará cualquier proveedor. Para que nos devuelva el de mayor precisión debemos crear un criterio de la siguiente manera: <span style="font-family: Arial,Helvetica,sans-serif;"> criteria.setAccuracy(criteria.ACCURACY_FINE); <span style="font-family: Arial,Helvetica,sans-serif;"> String proveedor = LocationManager.getBestProvider(criteria, true); ||
 * <span style="font-family: Arial,Helvetica,sans-serif;">Criteria criteria = new Criteria;

<span style="font-family: Arial,Helvetica,sans-serif;">Después de esto, obtener las coordenadas es tan sencillo como llamar al método getLastKnownLocation(PROVEEDOR) del objeto LocationManager, pasándole como parámetro el proveedor que estamos usando. Devolverá un objeto de tipo Location, del cual se pueden extraer la latitud y longitud con los métodos getLatitude y getLongitude.

<span style="font-family: Arial,Helvetica,sans-serif;">4. API Google Places
<span style="font-family: Arial,Helvetica,sans-serif;">Google Places nos retornará la información con todas las localizaciones cercanas de un tipo especificado. El proceso es simple: creamos una url que nos acceda a la API, creamos una conexión con la url, y obtenemos un objeto JSON con la información de retorno.

<span style="font-family: Arial,Helvetica,sans-serif;">La url tiene que ser del tipo: code <span style="font-family: Arial,Helvetica,sans-serif;">https://maps.googleapis.com/maps/api/place/search/json?&location=[latitud],[longitud]&radius=[radio de alcance]&types=[tipo de lugar]&sensor=false&key=[API KEY] code <span style="font-family: Arial,Helvetica,sans-serif;">El código sería el siguiente: code <span style="font-family: Arial,Helvetica,sans-serif;">StringBuilder content = new StringBuilder; URL url = new URL(theUrl);

URLConnection urlConnection = url.openConnection; BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream), 8);

String line;

while ((line = bufferedReader.readLine) != null) {   content.append(line + "\n"); }

bufferedReader.close;

code || <span style="font-family: Arial,Helvetica,sans-serif;">Esto nos devolvería un String, codificado como un objeto JSON.

<span style="font-family: Arial,Helvetica,sans-serif;">5. Objeto JSON
<span style="font-family: Arial,Helvetica,sans-serif;">A partir de aquí, tendríamos que descodificarlo si queremos trabajar con esa información, usando: <span style="font-family: Arial,Helvetica,sans-serif;">JSONObject object = new JSONObject(content); code <span style="font-family: Arial,Helvetica,sans-serif;">JSONArray array = object.getJSONArray("results"); code <span style="font-family: Arial,Helvetica,sans-serif;">Todo esto, nos crearía un array del tipo JSON con todas las localizaciones cercanas. Para explorar sus datos, tendríamos que usar el método get(“[identificador]”) para explorar el objeto, el cual tendría la siguiente estructura: <span style="font-family: Arial,Helvetica,sans-serif;"> location: { lat, lng } (latitud, longitud) <span style="font-family: Arial,Helvetica,sans-serif;"> }, <span style="font-family: Arial,Helvetica,sans-serif;"> icon, (url del icono) <span style="font-family: Arial,Helvetica,sans-serif;"> name, (nombre) <span style="font-family: Arial,Helvetica,sans-serif;"> vicinity, (dirección) <span style="font-family: Arial,Helvetica,sans-serif;"> id (id de Places) <span style="font-family: Arial,Helvetica,sans-serif;">} ||
 * <span style="font-family: Arial,Helvetica,sans-serif;">{ geometry: {

<span style="font-family: Arial,Helvetica,sans-serif;">6 <span style="font-family: Arial,Helvetica,sans-serif; line-height: 1.5;">. Enlaces y Referencias

 * <span style="font-family: Arial,Helvetica,sans-serif;">Enlace a Github con una aplicación de ejemplo **

<span style="font-family: Arial,Helvetica,sans-serif;">Localización: <span style="font-family: Arial,Helvetica,sans-serif;">[] <span style="font-family: Arial,Helvetica,sans-serif;">API Google Places: <span style="font-family: Arial,Helvetica,sans-serif;">[|http://stackoverflow.com/questions/7344581/how-to-find-location-near-by-my-current-location/10479465#10479465] <span style="font-family: Arial,Helvetica,sans-serif;">Definición de JSON: <span style="font-family: Arial,Helvetica,sans-serif;">[] <span style="font-family: Arial,Helvetica,sans-serif;">Nota #1 <span style="font-family: Arial,Helvetica,sans-serif;">[]
 * [] **