Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
OpenStreetMap   en Android¿La alternativa a Google Maps?
2
¿Porque usarOpenStreetMap   en Android?          3
¿Porque usar                 OpenStreetMap                    en Android?Datos Abiertos                           3
¿Porque usar                 OpenStreetMap                    en Android?Datos AbiertosMapas Offline                      ...
¿Porque usar                    OpenStreetMap                       en Android?Datos Abiertos Mapas OfflineServicio Gratui...
¿Porque usar                       OpenStreetMap                          en Android?  Datos Abiertos  Mapas Offline Servi...
¿Porque usar                       OpenStreetMap                          en Android?  Datos Abiertos  Mapas Offline Servi...
¿Porque usar                       OpenStreetMap                          en Android?  Datos Abiertos  Mapas Offline Servi...
¿Porque usar                       OpenStreetMap                          en Android?  Datos Abiertos  Mapas Offline Servi...
¿Porque usar                       OpenStreetMap                          en Android?  Datos Abiertos  Mapas Offline Servi...
¿Porque usar                       OpenStreetMap                          en Android?  Datos Abiertos OpenStreetMap NO  Ma...
Resumen demi experiencia          4
Resumen de             mi experienciaAl empezar                       4
Resumen de                           mi experienciaAl empezar   Al terminar                                     4
Mi viaje por              OpenStreetMapOSMDROID Mi primera  elección                         5
Mi viaje por              OSMDROIDBonusPack     OpenStreetMap                Bubbles y límitesOSMDROID Mi primera  elecció...
Mi viaje por              OSMDROIDBonusPack              OpenStreetMap                Bubbles y límites                   ...
Mi viaje por              OSMDROIDBonusPack              OpenStreetMap                Bubbles y límites                   ...
Mi viaje por              OSMDROIDBonusPack                 OpenStreetMap                Bubbles y límites                ...
Mi viaje por                   OSMDROIDBonusPack                 OpenStreetMap                     Bubbles y límites      ...
Mi viaje por                   OSMDROIDBonusPack                 OpenStreetMap                     Bubbles y límites      ...
OSMDROID vs                                                                                             MapsForge         ...
OSMDROID vs                                                                                               MapsForge       ...
OSMDROID vs                                                                                                MapsForge      ...
OSMDROID vs                                                                                                  MapsForge    ...
OSMDROID vs                                                                                                  MapsForge    ...
OSMDROID vs                                                                                                  MapsForge    ...
OSMDROID vs                                                                                                  MapsForge    ...
OSMDROID vs                                                                                                  MapsForge    ...
Un poco de    código      7
Un poco de                                                 códigoInsertando nuestro mapa<org.osmdroid.views.MapView     an...
Un poco de                                                                         códigoInsertando nuestro mapa<org.osmdr...
Un poco de                                                                         códigoInsertando nuestro mapa<org.osmdr...
Un poco de                                                                         códigoInsertando nuestro mapa<org.osmdr...
Un poco de                                                                                             códigoItemizedIconO...
Un poco de                                                                                             códigoItemizedIconO...
Un poco de                                                                                          códigoCambiando iconos...
Mapas OfflineBasta con colocarlos en esta carpeta/sdcard/osmdroid¿Cómo los obtenemos?                                     ...
Mapas OfflineBasta con colocarlos en esta carpeta/sdcard/osmdroid¿Cómo los obtenemos?                                     ...
Mapas OfflineBasta con colocarlos en esta carpeta/sdcard/osmdroid¿Cómo los obtenemos?                                     ...
Mapas OfflineBasta con colocarlos en esta carpeta/sdcard/osmdroid¿Cómo los obtenemos?                                     ...
Mapas OfflineBasta con colocarlos en esta carpeta/sdcard/osmdroid¿Cómo los obtenemos?                                 osmd...
Mapas OfflineLimitando el Scroll y ZoomModificación en MapView.javaDESCARGA DIRECTAhttps://docs.google.com/open?id=0B32Wy3...
OSMDROID                                              Funcionalidad                                                      e...
MapsForge:La alternativa        12
MapsForge:                                             La alternativaInsertando nuestro mapa<org.mapsforge.android.maps.Ma...
MapsForge:                                                                   La alternativaInsertando nuestro mapa<org.map...
MapsForge:                                                                   La alternativaInsertando nuestro mapa<org.map...
MapsForge:                                                                                              La alternativaPers...
MapsForge:                                                                                       La alternativaCapturando ...
MapsForge:                                                                                               La alternativaMap...
Más                                                                                      informaciónTutoriales MapsForgeht...
17
¡GRACIAS!FIN
Upcoming SlideShare
Loading in …5
×

OpenStreetMap en Android

4,711 views

Published on

Ponencia para el GDG Barcelona sobre mi experiencia desarrollando aplicaciones Android que hacen uso de OpenStreetMap.

Published in: Technology
  • Be the first to comment

OpenStreetMap en Android

  1. 1. OpenStreetMap en Android¿La alternativa a Google Maps?
  2. 2. 2
  3. 3. ¿Porque usarOpenStreetMap en Android? 3
  4. 4. ¿Porque usar OpenStreetMap en Android?Datos Abiertos 3
  5. 5. ¿Porque usar OpenStreetMap en Android?Datos AbiertosMapas Offline 3
  6. 6. ¿Porque usar OpenStreetMap en Android?Datos Abiertos Mapas OfflineServicio Gratuito 3
  7. 7. ¿Porque usar OpenStreetMap en Android? Datos Abiertos Mapas Offline Servicio GratuitoLibrerías OpenSource 3
  8. 8. ¿Porque usar OpenStreetMap en Android? Datos Abiertos Mapas Offline Servicio GratuitoLibrerías OpenSource 3
  9. 9. ¿Porque usar OpenStreetMap en Android? Datos Abiertos Mapas Offline Servicio GratuitoLibrerías OpenSource 3
  10. 10. ¿Porque usar OpenStreetMap en Android? Datos Abiertos Mapas Offline Servicio GratuitoLibrerías OpenSource 3
  11. 11. ¿Porque usar OpenStreetMap en Android? Datos Abiertos Mapas Offline Servicio GratuitoLibrerías OpenSource 3
  12. 12. ¿Porque usar OpenStreetMap en Android? Datos Abiertos OpenStreetMap NO Mapas Offline es una alternativa a Servicio Gratuito Google MapsLibrerías OpenSource 3
  13. 13. Resumen demi experiencia 4
  14. 14. Resumen de mi experienciaAl empezar 4
  15. 15. Resumen de mi experienciaAl empezar Al terminar 4
  16. 16. Mi viaje por OpenStreetMapOSMDROID Mi primera elección 5
  17. 17. Mi viaje por OSMDROIDBonusPack OpenStreetMap Bubbles y límitesOSMDROID Mi primera elección 5
  18. 18. Mi viaje por OSMDROIDBonusPack OpenStreetMap Bubbles y límites Mobile AtlasOSMDROID Creator Mi primera Tiles Baneados elección 5
  19. 19. Mi viaje por OSMDROIDBonusPack OpenStreetMap Bubbles y límites Mobile AtlasOSMDROID Creator Mi primera Tiles Baneados elección OSMDROID Rendimiento y bugs 5
  20. 20. Mi viaje por OSMDROIDBonusPack OpenStreetMap Bubbles y límites Mobile AtlasOSMDROID Creator Mi primera Tiles Baneados elección MapsForge La alternativa OSMDROID Rendimiento y bugs 5
  21. 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 RendimientoThemes y Límites y bugs 5
  22. 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 RendimientoThemes y Límites y bugs MapsForge Sin Bubbles 5
  23. 23. OSMDROID vs MapsForge Mapas Mapas Límites Overlays Themes Bubbles Rendimiento Rutas Overlays Offline Vectoriales de mapa AvanzadosOSMDROID Si No No Si* Malo No* Si* Si NoMapsForge Si Si Si* No Bueno No* No* Si Si 6
  24. 24. OSMDROID vs MapsForge Con OsmdroidBonusPack (incompatible con el parche) Mapas Mapas Límites Overlays Themes Bubbles Rendimiento Rutas Overlays Offline Vectoriales de mapa AvanzadosOSMDROID Si No No Si* Malo No* Si* Si NoMapsForge Si Si Si* No Bueno No* No* Si Si 6
  25. 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 AvanzadosOSMDROID Si No No Si* Malo No* Si* Si NoMapsForge Si Si Si* No Bueno No* No* Si Si 6
  26. 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 AvanzadosOSMDROID Si No No Si* Malo No* Si* Si NoMapsForge Si Si Si* No Bueno No* No* Si Si Podemos implementarlos gracias a los overlays avanzados 6
  27. 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 AvanzadosOSMDROID Si No No Si* Malo No* Si* Si NoMapsForge Si Si Si* No Bueno No* No* Si Si Podemos implementarlos gracias a los overlays avanzados 6
  28. 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 AvanzadosOSMDROID Si No No Si* Malo No* Si* Si NoMapsForge Si Si Si* No Bueno No* No* Si Si Podemos implementarlos gracias a los overlays avanzados 6
  29. 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 AvanzadosOSMDROID Si No No Si* Malo No* Si* Si NoMapsForge Si Si Si* No Bueno No* No* Si Si Podemos implementarlos gracias a los overlays avanzados 6
  30. 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 AvanzadosOSMDROID Si No No Si* Malo No* Si* Si NoMapsForge Si Si Si* No Bueno No* No* Si Si Podemos implementarlos gracias a los overlays avanzados 6
  31. 31. Un poco de código 7
  32. 32. Un poco de códigoInsertando nuestro mapa<org.osmdroid.views.MapView android:id="@+id/openmapview" android:layout_width="fill_parent" android:layout_height="fill_parent"/> 7
  33. 33. Un poco de códigoInsertando 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. 34. Un poco de códigoInsertando 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ónmyOpenMapView = (MapView)findViewById(R.id.openmapview);myOpenMapView.setBuiltInZoomControls(true);myMapController = myOpenMapView.getController();myMapController.setZoom(4); 7
  35. 35. Un poco de códigoInsertando 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ónmyOpenMapView = (MapView)findViewById(R.id.openmapview);myOpenMapView.setBuiltInZoomControls(true);myMapController = myOpenMapView.getController();myMapController.setZoom(4);Multitouch (desactivado por defecto)myOpenMapView.setMultiTouchControls(true); 7
  36. 36. Un poco de códigoItemizedIconOverlay o ItemizedOverlayWithFocusArrayList<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. 37. Un poco de códigoItemizedIconOverlay o ItemizedOverlayWithFocusArrayList<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. 38. Un poco de códigoCambiando iconos (sobreescribimos ItemizedIconOverlay)@Overridepublic 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
  39. 39. Mapas OfflineBasta con colocarlos en esta carpeta/sdcard/osmdroid¿Cómo los obtenemos? 10
  40. 40. Mapas OfflineBasta con colocarlos en esta carpeta/sdcard/osmdroid¿Cómo los obtenemos? 10
  41. 41. Mapas OfflineBasta con colocarlos en esta carpeta/sdcard/osmdroid¿Cómo los obtenemos? 10
  42. 42. Mapas OfflineBasta con colocarlos en esta carpeta/sdcard/osmdroid¿Cómo los obtenemos? Mobile Atlas Creator 10
  43. 43. Mapas OfflineBasta 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. 44. Mapas OfflineLimitando el Scroll y ZoomModificación en MapView.javaDESCARGA DIRECTAhttps://docs.google.com/open?id=0B32Wy3J0YZ9SWnc0YmFhSm82REEINSTRUCCIONEShttp://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. 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
  46. 46. MapsForge:La alternativa 12
  47. 47. MapsForge: La alternativaInsertando nuestro mapa<org.mapsforge.android.maps.MapView android:id="@+id/openmapview" android:layout_width="fill_parent" android:layout_height="fill_parent"/> 12
  48. 48. MapsForge: La alternativaInsertando 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" /> 12
  49. 49. MapsForge: La alternativaInsertando 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ónmapView.setClickable(true);mapView.setBuiltInZoomControls(true);mapView.setCenter(new GeoPoint(41.38, 2.15));mapView.getController().setZoom(13); 12
  50. 50. MapsForge: La alternativaPersonalizando los markersDrawable 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 elconstructor. Para este caso será obligatorio configurar los drawables:ItemizedOverlay.boundCenter(drawable);ItemizedOverlay.boundCenterBottom(drawable); 13
  51. 51. MapsForge: La alternativaCapturando eventospublic 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.getTitle(), Toast.LENGTH_LONG).show(); } @Override protected boolean onLongPress(int index) { OverlayItem item = createItem(index); Toast.makeText(mContext, "LongPress: " + item.getTitle(), Toast.LENGTH_LONG).show(); }} 14
  52. 52. MapsForge: La alternativaMapas 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. 53. Más informaciónTutoriales MapsForgehttp://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 OSMDROIDhttp://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 oficialeshttps://code.google.com/p/osmdroid/http://code.google.com/p/osmbonuspack/http://code.google.com/p/mapsforge/ 16
  54. 54. 17
  55. 55. ¡GRACIAS!FIN

×