Hacer un buscador de mapas para Android.

Ten en cuenta que necesitarás una API key de Google Maps para desarrollo, y que siempre es recomendable tenerla guardada en un archivo strings.xml por ejemplo, y no en la misma actividad. La clase Geocoder es la que se encarga de convertir la cadena de texto con la direción al formato de coordenadas para el Mapview.

Yo sólo soy un principiante con estos temas, aunque mi ejemplo funciona tengo que recomendar la serie de articulos A simple example using Google Maps Android API v2de Android-er, él sabe mucho más que yo del tema en general y tiene mucha más información sobre el uso de Mapas en Android.

Primero, el layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">

	<LinearLayout
		android:layout_width="match_parent"
		android:layout_height="wrap_content" >

		<EditText
			android:id="@+id/editText1"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:layout_weight="1"
			android:ems="10"
			android:maxLines="1" />

		<Button
			android:id="@+id/button1"
			style="?android:attr/buttonStyleSmall"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content"
			android:layout_weight="1"
			android:text="Buscar" />

	</LinearLayout>

	<com.google.android.maps.MapView
		android:id="@+id/mapa"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent"
		android:apiKey="000000000000000000000000000000000000000"
		android:clickable="true" />

</LinearLayout>

Ahora el código Java

package ejercicio.ejercicio;

import java.io.IOException;
import java.util.List;

import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

public class Main extends MapActivity {
	private MapView mapa;
	private MapController controlMapa;
	private Button boton;
	private EditText input;
	private String direccion;
	private List <Address> address;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		mapa = (MapView)findViewById(R.id.mapa);
		controlMapa = mapa.getController();
		input = (EditText)findViewById(R.id.editText1);
		boton = (Button)findViewById(R.id.button1);
		
		
		
		mapa.setBuiltInZoomControls(true);
		
		boton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
			
			direccion = input.getText().toString();
			
			if(direccion.equals("")){
				toast("No hay dirección para buscar : (");
			}else{
				toast("Buscando \""+direccion+"\"");
				Geocoder coder = new Geocoder(getApplicationContext());
				
				try {
					address = coder.getFromLocationName(direccion, 1);	
					Address location = address.get(0);	
					int lat = (int) (location.getLatitude()*1E6);
					int lon = (int) (location.getLongitude()*1E6);
					GeoPoint loc = new GeoPoint(lat,lon);
					controlMapa.setCenter(loc);
					controlMapa.setZoom(14);
				} catch (IOException e) {
					toast("No se ha encontrado la dirección : (");
				}
			}
		
			// Ocultar el teclado
			InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
				imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
			}
		});
	}
	
	@Override
	protected boolean isRouteDisplayed(){
		return false;
	}
	
	public void toast(String mensaje){
		Toast.makeText(getApplicationContext(), mensaje, 1000).show();
	}
}



Josep Viciana

Programador de 28 años con una década de experiencia como programador. interesado en el diseño, ilustración y nuevas tecnologías. Dedicado desde siempre a la programación Web y desde hace algunos años también a la móvil.

17 comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *