«

»

dic 12 2012

MapsForge: OpenStreetMap en Android 2/3

 

 

En el último post os dimos unas pinceladas de como incluir, gracias a MapsForge, la visualización de Mapas de OpenStreetMap en nuestras aplicaciones para Android, en esta ocasión os mostraremos la posibilidades de su API de Overlays para mostrar puntos, áreas, o caminos sobre zonas del mapa.

 

La API de MapsForge nos proporciona tres clases para la visualización de elementos sobre el mapa, estas clases son:

  • ArrayItemizedOverlay: Para la visualización de puntos de puntos.
  • ArrayWayOverlay: Para la visualización de caminos.
  • ArrayCircleOverlay: Para la visualización de áreas.
 

En este post nos centraremos en explicar la visualización de puntos y los pasos generales para el uso e inclusión de overlays. Para empezar a ver nuestros puntos al mapa bastará con instanciar la clase ArrayItemizedOverlay asociándole un marker por defecto y luego ir añadiéndole puntos gracias a la clase OverlayItem. Un ejemplo añadiendo un punto quedaría así:
 
// Obtenemos la imagen a utilizar de nuestros recursos
Drawable defaultMarker = getResources().getDrawable(R.drawable.marker);

// Creamos el overlay que almecenará y gestionará nuestros puntos
ArrayItemizedOverlay itemizedOverlay = new ArrayItemizedOverlay(defaultMarker);

// Elegimos la ubicación del punto
GeoPoint geoPoint = new GeoPoint(41.38, 2.15);

// Creamos el punto en custión, a partir de las coordenadas, titulo y descripción
OverlayItem item = new OverlayItem(geoPoint, "Mi punto", "Un punto de prueba para realizar el tutorial");

// Incluimos el punto en nuestro overlay
itemizedOverlay .addItem(item);

// Y por último añadimos el overlay a nuestro MapView
mapView.getOverlays().add(itemizedOverlay);
 
También podemos si lo deseamos añadir un marker propio a cada OverlayItem pasándoselo como parámetro en el constructor. En este caso deberemos, en el anterior también podemos pero no es necesario, configurar la alineación de nuestro marker. Esta acción la realizamos mediante los siguientes métodos:
 
ItemizedOverlay.boundCenter(drawable);
ItemizedOverlay.boundCenterBottom(drawable);
 
Estos métodos nos devolverá los drawables que debemos pasar como parámetros para seleccionarlos como markers.
 
Una de las carencias que se hace notar en esta librería la falta de una implementación para mostrar globos de información asociados a los puntos, lo que si tenemos es control sobre los eventos de pulsación sobre los elementos visualizados en los overlays y esto nos ayudará a visualizar información acerca de los mismos o cualquier otra acción que quisiéramos disparar. Para ello deberemos de extender alguno de los overlays que usamos y sobreescribir los metodos onTap o onLongPress. A continuación os mostramos un ejemplo:
 
public class MyCustomOverlay extends ArrayItemizedOverlay {
    private Context mContext;

    public MyCustomOverlay(Context context, Drawable marker) {

        super(marker);
        this.mContext = context;

    }

    @Override
    protected boolean onTap(int index) {
        OverlayItem item = createItem(index);

        Toast.makeText(mContext, "Tap [item nº " + index + "]: " + item.getTitle(), Toast.LENGTH_LONG).show();
    }

    @Override
    protected boolean onLongPress(int index) {
        OverlayItem item = createItem(index);

        Toast.makeText(mContext, "LongPress[item nº " + index + "]: " + item.getTitle(), Toast.LENGTH_LONG).show();
    }

}

 

Con esto hemos acabado por hoy, en el siguiente post terminaremos y os contaremos la parte más jugosa, los mapas offline.

 

fuente | Ingens Blog

 

Acerca del autor

JMPergar

Mobile Developer at @BeRepublic & Founder of @AndroCode. Silver Speaker & Member of Core Team at @GDGBarcelona.