
 La semana pasada empezamos una serie dedicada a la API de Google Maps en Android.  Vimos como crear nuestra key y pintar un mapa muy básico. Hoy veremos  como utilizar la clase MyLocationOverlay para centrar nuestra posición  en el mapa y ver en todo momento donde nos encontramos.
 Continuamos donde lo dejamos la semana pasada, estamos instanciando  nuestro mapa y habíamos seteado los controles de zoom visibles. Vamos a  modificar un poco esa parte y vamos a añadir alguna opción más. Yo suelo  hacerme un método que llamo inicializeMap y es algo así:
private MapController mapController;
private MyLocationOverlay myLocationOverlay;
private MapView mapView;
private void inicializeMap(){
     mapView = (MapView) findViewById(R.id.map);
        mapView.setBuiltInZoomControls(true);        
        mapController = mapView.getController();
        mapController.setZoom(9);  
        mapController.animateTo(new GeoPoint(0,0));
        centerMyPosition();              
}
 Lo primero que hago es declarar un MapView, que la vista del mapa, un MapController que me ayudará a  manejar parámetros como el zoom o las coordenadas que debe mostrar el mapa, y por último la clase MyLocationOverlay, esta la explico más adelante.
 Antes vamos a centrarnos un poco más en el método inicializeMap. Las 2  primeras líneas del método son las de la semana pasada. En la tercera lo  que hacemos es obtener el controlador del mapview, con este seteamos el  nivel de zoom y algo muy interesante, el método animateTo.
 Este método nos permite mover el mapa a unas determinadas coordenadas. Este recibe como parámetro un objeto GeoPoint  que no es más que las coordenadas: latitud y longitud. Es importante  que sepáis como pasar estos datos, normalmente si hacéis botón derecho  en la web de google maps y seleccionáis "Visualizar marcador lat. long."  os mostrará los 2 puntos con uno o dos números enteros y el resto serán  decimales, hasta un máximo de 6 (el número de decimales va a depender  del nivel de zoom que tengáis, a más zoom, más decimales). Por ejemplo,  esto es la Puerta del Sol en Madrid: 40,416959, -3,703797 con el zoom  máximo.
 El constructor de GeoPoint admite para la latitud y la longitud  solamente datos tipo int. Por lo tanto, habría que transformar esas  coordenadas. Vamos a ver un ejemplo sencillo:
int latitud = (int) (40.416959 * 1E6); int longitud = (int) (-3.703797 * 1E6); mapController.animateTo(new GeoPoint(latitud,longitud));
 Hemos creado las variables latitud y longitud de tipo int. Multiplicamos  la latitud y la longitud por 1E6, es decir, por un millón. También  hacemos un "cast" a un tipo int (si no lo ponéis veréis como el editor  os dice que lo hagáis), de esta forma se elimina la parte decimal,  quedando solo la entera. Y ya tendríamos centrado nuestro mapa cuando  inicialicemos en la Puerta del Sol.
 Nos queda ver la clase MyLocationOverlay y como utilizarla.  Google Maps es una colección de capas en una determinada posición, unas  sobre otras y a las cuales se les varía la visibilidad y quien está por  encima de una u otra. Pues bien, esta clase es una capa más que se  encarga mostrar nuestra posición (más bien la de nuestro  dispositivo). Mostrar esta capa es muy sencillo:
private void centerMyPosition(){
        myLocationOverlay = new MyLocationOverlay(this, mapView);
        mapView.getOverlays().add(myLocationOverlay);
        myLocationOverlay.enableCompass();
        myLocationOverlay.enableMyLocation();
        myLocationOverlay.runOnFirstFix(new Runnable() {
            public void run() {
                mapController.animateTo(myLocationOverlay.getMyLocation());
            }
        });
} Con el método centerMyPosition inicializamos el objeto myLocationOverlay  pasandole el Context actual y el mapview con el que estamos trabajando.  Luego añadimos al  mapview la nueva capa que hemos creado.
 Ahora habilitamos algunas opciones como la brújula (compass) y nuestra  posición (cogerá la última conocida hasta que localice el dispositivo.  Por último, seteamos el método runOnFirstFix para que en cuanto se situe  muestre nuestra posición en el mapview. Como veis myLocationOverlay nos  devuelve un GeoPoint con nuestra posición actual.
 Hasta aquí el segundo capitulo de esta serie dedicada a Google Maps, la  semana que viene volveremos a dedicarlo a este tema. De momento,  si queréis ver que se puede hacer con este API estad atentos porque el  viernes vamos a lanzar una nueva aplicación, se llama LucusBus, y dará  información de los autobuses urbanos de la ciudad de Lugo. Os iremos  informando en el blog, en la cuenta de Twitter de 3pi3s y en la página de Facebook Lucus Bus  que hemos creado para ir colgando pantallas, informar de errores,  actualizaciones y saber que os parece o que mejoraríais de la  aplicación.