4. ¿Porque usar
OpenStreetMap
en Android?
Datos Abiertos
3
5. ¿Porque usar
OpenStreetMap
en Android?
Datos Abiertos
Mapas Offline
3
6. ¿Porque usar
OpenStreetMap
en Android?
Datos Abiertos
Mapas Offline
Servicio Gratuito
3
7. ¿Porque usar
OpenStreetMap
en Android?
Datos Abiertos
Mapas Offline
Servicio Gratuito
Librerías OpenSource
3
8. ¿Porque usar
OpenStreetMap
en Android?
Datos Abiertos
Mapas Offline
Servicio Gratuito
Librerías OpenSource
3
9. ¿Porque usar
OpenStreetMap
en Android?
Datos Abiertos
Mapas Offline
Servicio Gratuito
Librerías OpenSource
3
10. ¿Porque usar
OpenStreetMap
en Android?
Datos Abiertos
Mapas Offline
Servicio Gratuito
Librerías OpenSource
3
11. ¿Porque usar
OpenStreetMap
en Android?
Datos Abiertos
Mapas Offline
Servicio Gratuito
Librerías OpenSource
3
12. ¿Porque usar
OpenStreetMap
en Android?
Datos Abiertos
OpenStreetMap NO
Mapas Offline
es una alternativa a
Servicio Gratuito
Google Maps
Librerías OpenSource
3
15. Resumen de
mi experiencia
Al empezar Al terminar
4
16. Mi viaje por
OpenStreetMap
OSMDROID
Mi primera
elección
5
17. Mi viaje por
OSMDROIDBonusPack OpenStreetMap
Bubbles y límites
OSMDROID
Mi primera
elección
5
18. Mi viaje por
OSMDROIDBonusPack OpenStreetMap
Bubbles y límites
Mobile Atlas
OSMDROID
Creator
Mi primera
Tiles Baneados
elección
5
19. Mi viaje por
OSMDROIDBonusPack OpenStreetMap
Bubbles y límites
Mobile Atlas
OSMDROID
Creator
Mi primera
Tiles Baneados
elección
OSMDROID
Rendimiento
y bugs
5
20. Mi viaje por
OSMDROIDBonusPack OpenStreetMap
Bubbles y límites
Mobile Atlas
OSMDROID
Creator
Mi primera
Tiles Baneados
elección
MapsForge
La alternativa
OSMDROID
Rendimiento
y bugs
5
21. Mi viaje por
OSMDROIDBonusPack OpenStreetMap
Bubbles y límites
Mobile Atlas
OSMDROID
Creator
Mi primera
Tiles Baneados
elección
MapsForge
La alternativa
OSMDROID
Juan Palomo
Rendimiento
Themes y Límites
y bugs
5
22. Mi viaje por
OSMDROIDBonusPack OpenStreetMap
Bubbles y límites
Mobile Atlas
OSMDROID
Creator
Mi primera
Tiles Baneados
elección
MapsForge
La alternativa
OSMDROID
Juan Palomo
Rendimiento
Themes y Límites
y bugs
MapsForge
Sin Bubbles
5
23. OSMDROID vs
MapsForge
Mapas Mapas Límites Overlays
Themes Bubbles Rendimiento Rutas Overlays
Offline Vectoriales de mapa Avanzados
OSMDROID Si No No Si* Malo No* Si* Si No
MapsForge Si Si Si* No Bueno No* No* Si Si
6
24. OSMDROID vs
MapsForge
Con OsmdroidBonusPack
(incompatible con el parche)
Mapas Mapas Límites Overlays
Themes Bubbles Rendimiento Rutas Overlays
Offline Vectoriales de mapa Avanzados
OSMDROID Si No No Si* Malo No* Si* Si No
MapsForge Si Si Si* No Bueno No* No* Si Si
6
25. OSMDROID vs
MapsForge
Con OsmdroidBonusPack Parche de código de
(incompatible con el parche) terceros
Mapas Mapas Límites Overlays
Themes Bubbles Rendimiento Rutas Overlays
Offline Vectoriales de mapa Avanzados
OSMDROID Si No No Si* Malo No* Si* Si No
MapsForge Si Si Si* No Bueno No* No* Si Si
6
26. OSMDROID vs
MapsForge
Con OsmdroidBonusPack Parche de código de Con OsmdroidBonusPack
(incompatible con el parche) terceros (incompatible con el parche)
Mapas Mapas Límites Overlays
Themes Bubbles Rendimiento Rutas Overlays
Offline Vectoriales de mapa Avanzados
OSMDROID Si No No Si* Malo No* Si* Si No
MapsForge Si Si Si* No Bueno No* No* Si Si
Podemos implementarlos gracias a
los overlays avanzados
6
27. OSMDROID vs
MapsForge
Con OsmdroidBonusPack Parche de código de Con OsmdroidBonusPack
(incompatible con el parche) terceros (incompatible con el parche)
Mapas Mapas Límites Overlays
Themes Bubbles Rendimiento Rutas Overlays
Offline Vectoriales de mapa Avanzados
OSMDROID Si No No Si* Malo No* Si* Si No
MapsForge Si Si Si* No Bueno No* No* Si Si
Podemos implementarlos gracias a
los overlays avanzados
6
28. OSMDROID vs
MapsForge
Con OsmdroidBonusPack Parche de código de Con OsmdroidBonusPack
(incompatible con el parche) terceros (incompatible con el parche)
Mapas Mapas Límites Overlays
Themes Bubbles Rendimiento Rutas Overlays
Offline Vectoriales de mapa Avanzados
OSMDROID Si No No Si* Malo No* Si* Si No
MapsForge Si Si Si* No Bueno No* No* Si Si
Podemos implementarlos gracias a
los overlays avanzados
6
29. OSMDROID vs
MapsForge
Con OsmdroidBonusPack Parche de código de Con OsmdroidBonusPack
(incompatible con el parche) terceros (incompatible con el parche)
Mapas Mapas Límites Overlays
Themes Bubbles Rendimiento Rutas Overlays
Offline Vectoriales de mapa Avanzados
OSMDROID Si No No Si* Malo No* Si* Si No
MapsForge Si Si Si* No Bueno No* No* Si Si
Podemos implementarlos gracias a
los overlays avanzados
6
30. OSMDROID vs
MapsForge
Con OsmdroidBonusPack Parche de código de Con OsmdroidBonusPack
(incompatible con el parche) terceros (incompatible con el parche)
Mapas Mapas Límites Overlays
Themes Bubbles Rendimiento Rutas Overlays
Offline Vectoriales de mapa Avanzados
OSMDROID Si No No Si* Malo No* Si* Si No
MapsForge Si Si Si* No Bueno No* No* Si Si
Podemos implementarlos gracias a
los overlays avanzados
6
32. Un poco de
código
Insertando nuestro mapa
<org.osmdroid.views.MapView
android:id="@+id/openmapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
7
33. Un poco de
código
Insertando nuestro mapa
<org.osmdroid.views.MapView
android:id="@+id/openmapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
Manifest - Permisos necesarios
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
7
34. Un poco de
código
Insertando nuestro mapa
<org.osmdroid.views.MapView
android:id="@+id/openmapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
Manifest - Permisos necesarios
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
En tiempo de ejecución
myOpenMapView = (MapView)findViewById(R.id.openmapview);
myOpenMapView.setBuiltInZoomControls(true);
myMapController = myOpenMapView.getController();
myMapController.setZoom(4);
7
35. Un poco de
código
Insertando nuestro mapa
<org.osmdroid.views.MapView
android:id="@+id/openmapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
Manifest - Permisos necesarios
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
En tiempo de ejecución
myOpenMapView = (MapView)findViewById(R.id.openmapview);
myOpenMapView.setBuiltInZoomControls(true);
myMapController = myOpenMapView.getController();
myMapController.setZoom(4);
Multitouch (desactivado por defecto)
myOpenMapView.setMultiTouchControls(true);
7
36. Un poco de
código
ItemizedIconOverlay o ItemizedOverlayWithFocus
ArrayList<OverlayItem> myPoisArray = new ArrayList<OverlayItem>();
misPoisArray.add(new OverlayItem("Sevilla", "Capital", new GeoPoint(37.388436, -5.987257)));
ItemizedOverlayWithFocus<OverlayItem> myOverlay =
new ItemizedOverlayWithFocus<OverlayItem>(this, myPoisArray, myOnItemGestureListener);
myOpenMapView.getOverlays().add(myOverlay);
OnItemGestureListener<OverlayItem> myOnItemGestureListener = new OnItemGestureListener<OverlayItem>() {
@Override
public boolean onItemLongPress(int index, OverlayItem item) {
return false;
}
@Override
public boolean onItemSingleTapUp(int index, OverlayItem item) {
Toast.makeText(
TestOSMActivity.this,
item.mDescription + "n" + item.mTitle + "n" + item.mGeoPoint.getLatitudeE6() + " : "
+ item.mGeoPoint.getLongitudeE6(), Toast.LENGTH_LONG).show();
return true;
}
};
8
37. Un poco de
código
ItemizedIconOverlay o ItemizedOverlayWithFocus
ArrayList<OverlayItem> myPoisArray = new ArrayList<OverlayItem>();
misPoisArray.add(new OverlayItem("Sevilla", "Capital", new GeoPoint(37.388436, -5.987257)));
ItemizedOverlayWithFocus<OverlayItem> myOverlay =
new ItemizedOverlayWithFocus<OverlayItem>(this, myPoisArray, myOnItemGestureListener);
myOpenMapView.getOverlays().add(myOverlay);
OnItemGestureListener<OverlayItem> myOnItemGestureListener = new OnItemGestureListener<OverlayItem>() {
@Override
public boolean onItemLongPress(int index, OverlayItem item) {
return false;
}
@Override
public boolean onItemSingleTapUp(int index, OverlayItem item) {
Toast.makeText(
TestOSMActivity.this,
item.mDescription + "n" + item.mTitle + "n" + item.mGeoPoint.getLatitudeE6() + " : "
+ item.mGeoPoint.getLongitudeE6(), Toast.LENGTH_LONG).show();
return true;
anotherItemizedIconOverlay.setFocusItemsOnTap(true);
}
};
8
38. Un poco de
código
Cambiando iconos (sobreescribimos ItemizedIconOverlay)
@Override
public void draw(Canvas canvas, MapView mapview, boolean arg2) {
super.draw(canvas, mapview, arg2);
if (this.size() > 0) {
for (int i = 0; i < this.size(); i++) {
GeoPoint in = getItem(i).getPoint();
Point out = new Point();
mapview.getProjection().toPixels(in, out);
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.myIcon);
canvas.drawBitmap(bm, out.x - bm.getWidth() / 2, out.y - bm.getHeight() / 2, null);
}
}
}
9
42. Mapas Offline
Basta con colocarlos en esta carpeta
/sdcard/osmdroid
¿Cómo los obtenemos?
Mobile Atlas
Creator
10
43. Mapas Offline
Basta con colocarlos en esta carpeta
/sdcard/osmdroid
¿Cómo los obtenemos?
osmdroid-packager
Mobile Atlas
http://androcode.es/2012/09/tiles-bloqueados-en-openstreetmap/
Creator
10
44. Mapas Offline
Limitando el Scroll y Zoom
Modificación en MapView.java
DESCARGA DIRECTA
https://docs.google.com/open?id=0B32Wy3J0YZ9SWnc0YmFhSm82REE
INSTRUCCIONES
http://androcode.es/2012/06/osmdroid-%E2%80%93-mapas-offline-con-openstreetmap-osm-parte-ii/
BoundingBoxE6 bbox = new BoundingBoxE6(limit north, limit east, limit south, limit west);
mapView.setScrollableAreaLimit(bbox);
public class ZoomLimitMapView extends MapView {
@Override
public int getMaxZoomLevel() {
return 15;
}
@Override
public int getMinZoomLevel() {
return 4;
}
}
10
45. OSMDROID
Funcionalidad
extra
• Geocoding and Reverse Geocoding,
• Directions (routes)
• Points of Interests (directory services): Wikipedia,
Flickr, Picasa...
• Overlays with nice and flexible "cartoon-bubbles"
NOTA: Incompatibilidad con el
parche de límites de scroll.
Más info http://androcode.es/2012/10/osmbonuspack-
anadiendo-funcionalidad-a-osmdroid-osm-parte-iii
11
49. MapsForge:
La alternativa
Insertando nuestro mapa
<org.mapsforge.android.maps.MapView
android:id="@+id/openmapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
Manifest - Permisos necesarios
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
En tiempo de ejecución
mapView.setClickable(true);
mapView.setBuiltInZoomControls(true);
mapView.setCenter(new GeoPoint(41.38, 2.15));
mapView.getController().setZoom(13);
12
50. MapsForge:
La alternativa
Personalizando los markers
Drawable defaultMarker = getResources().getDrawable(R.drawable.marker);
ArrayItemizedOverlay itemizedOverlay = new ArrayItemizedOverlay(defaultMarker);
GeoPoint geoPoint = new GeoPoint(41.38, 2.15);
OverlayItem item = new OverlayItem(geoPoint, "Mi punto", "Un punto de prueba");
itemizedOverlay .addItem(item);
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. Para este caso será obligatorio configurar los drawables:
ItemizedOverlay.boundCenter(drawable);
ItemizedOverlay.boundCenterBottom(drawable);
13
52. MapsForge:
La alternativa
Mapas Offline
• Usando Osmosis
o Instalación: http://androcode.es/2012/12/mapsforge-openstreetmap-en-android-33/
o Nota: Debido a conflictos con terceras aplicaciones la ejecución de Osmosis en mi equipo se
hizo imposible. Lo solucioné instalando en un entorno virtual linux limpio.
• Descarga de mapas
o osmosis --ra left=--6.0497 bottom=36.9059 right=--6.0998 top=36.9326 --write-xml
lebrija.osm
o Nota: La descarga de datos desde OpenStreetMap está limitada 0.25 grados o 50000 nodos, por lo
tanto en la mayoría de los casos este sistema se nos quedará corto.
o geofabrik http://download.geofabrik.de/openstreetmap/
• Recortando
o osmosis --read-xml spain.osm --bb left=-6.0497 bottom=36.9059 right=-6.0998
top=36.9326 --write-xml lebrija.osm
• Convertir formato (de .osm a .map)
o Plugin para convertir formato mapsforge-map-writer-0.3.0-jar-with-dependencies.jar
o osmosis --read-xml lebrija.osm --mapfile-writer file=lebrija.map
bbox=minLat,minLon,maxLat,maxLon
• Seleccionando los mapas
o mapView.setMapFile(new File(filepath));
15
53. Más
información
Tutoriales MapsForge
http://androcode.es/2012/12/mapsforge-openstreetmap-en-android-13/
http://androcode.es/2012/12/mapsforge-openstreetmap-en-android-23/
http://androcode.es/2012/12/mapsforge-openstreetmap-en-android-33/
Tutoriales OSMDROID
http://androcode.es/2012/06/osmdroid-introduccion-a-openstreetmap-en-android-osm-parte-i/
http://androcode.es/2012/06/osmdroid-%E2%80%93-mapas-offline-con-openstreetmap-osm-parte-ii/
http://androcode.es/2012/09/tiles-bloqueados-en-openstreetmap/
http://androcode.es/2012/10/osmbonuspack-anadiendo-funcionalidad-a-osmdroid-osm-parte-iii/
Site oficiales
https://code.google.com/p/osmdroid/
http://code.google.com/p/osmbonuspack/
http://code.google.com/p/mapsforge/
16