Taller mapsforge

2,334 views
2,257 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,334
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
68
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Taller mapsforge

  1. 1. Taller Mapsforge - OsmosisMapas vectoriales off-line en Android con Mapsforge y Osmosis Autor: Santiago Higuera de Frutos (Mayo 2012)
  2. 2. Taller Mapsforge - Osmosis (c) Santiago Higuera de Frutos Este documento se distribuye bajo licenciaCreative Commons Reconocimiento, Compartir, Igual 3.0 Los términos de la licencia se pueden consultar en: http://creativecommons.org/licenses/by-sa/3.0/ (Mayo 2012)
  3. 3. Taller Mapsforge - Osmosisales y el código fuente de los ejemplos de este taller se pueden de http://mercatorlab.com/downloads/tallerMapsforge.zip
  4. 4. 1.- MapsforgeMapsforge es una librería para visualización de mapas OpenStreetMap en dispositivos Android. http://code.google.com/p/mapsforge/Entre las características más destacadas:Ofrece un View llamado MapViewPermite visualizar mapas OpenStreetMap on line y off linePermite renderizar con estilos personalizadosLicencia LGPL3 (http://www.gnu.org/copyleft/lesser.html) 4
  5. 5. 2.- Mapsforge featuresFeatures:Compact file format for fast on-device rendering of OpenStreetMap dataEasy to use MapView, similar to of the Google APIs Add-OnPowerful and flexible overlay APICustomizable map styles via XML configuration filesSmall library ~ 300 KBDemo application for Android 1.6+ availableTool for creating custom map files100% free and open source (LGPL3 license) 5
  6. 6. 3.- Documentación MapsforgePortal Mapsforgehttp://mapsforge.googlecode.com/svn/tags/0.3.0/javadoc/index.htIniciaciónhttp://code.google.com/p/mapsforge/wiki/GettingStartedMapViewJavadochttp://mapsforge.googlecode.com/svn/tags/0.3.0/javadoc/index.htmlEjemplos y APIshttp://code.google.com/p/mapsforge/w/list 6
  7. 7. 2.- Descargar MapsforgeLibreríaEs la librería que tendremos que añadir a nuestros proyectos Android. ¡Sólo tiene 300K!mapsforge-map-0.3.0-jar-with-dependencies.jar 7
  8. 8. 3.- Creación de un proyecto Mapsforge (I)1.- En Eclipse, creamos un nuevo proyecto Android2.- Añadimos la librería mapsforge-map.jar al proyecto:Project->Properties->JavaBuildPath->Libraries->AddExternalJARs->mapsforge- >map-0.3.0-jar-with-dependencies.jar3.- ¡Activamos el chekbox de la librería en la pantalla order and export del mismo JavaBuildPath! 8
  9. 9. 4.- Creación de un proyecto MapsForge (II)4.- La actividad principal del proyecto hacemos que derive de MapActivity: public class HelloWorldMapsForgeActivity extends MapActivity { ….......... }5.- La aplicación necesita permito de escritura en el dispositivo externo (la sdcard). Añadimos al fichero AndroidManifest.xml: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>6.- Si utilizamos mapas on line necesitamos permiso de acceso a Internet:<uses-permission android:name="android.permission.INTERNET" /> 9
  10. 10. 5.- Ejemplo 1: Mapa básico onlineEl primer ejemplo consiste en la visualización de un mapa de OpenStreetMap on line. Lo hemos llamado mf_ejemplo1, y el código de la actividad principal es:public class Mf_ejemplo1Activity extends MapActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MapView mapView = new MapView(this, new MapnikTileDownloader()); mapView.setClickable(true); mapView.setBuiltInZoomControls(true); setContentView(mapView); }} 10
  11. 11. 6.- Mapas off lineLa visualización de mapas off line requiere que los mapas estén en un formato especial (.map).Dicho formato se obtiene a partir de los mapas de OpenStreetMap en fromato .osm mediante la herramienta Osmosis.Los mapas .map siguen siendo vectoriales, y se renderizan en el dispositivo mediante la librería Mapsforge.Se pueden definir ficheros de estilo de renderizado personalizados. 11
  12. 12. 7.- OsmosisOsmosis is a command line Java application for processing OSM data desarrollada por Brett Henderson. http://wiki.openstreetmap.org/wiki/OsmosisThe tool consists of a series of pluggable components that can be chained together to perform a larger operation.Componets for reading OSM DatabaseComponents for reading from database and from filecomponents for writing to database and to filecomponents for deriving and applying change sets to data sourcescomponents for sorting data, etc.: 12
  13. 13. 8.- Instalación de OsmosisDescargar osmosis desde :http://bretth.dev.openstreetmap.org/osmosis-build/osmosis-latest.tgzDescomprimir en un directorioDarle path al subdirectorio bin de la instalaciónProbar tecleando osmosis . Nos deberá aparecer una pantalla de instrucciones de uso del programa. 13
  14. 14. 9.- Descarga mapas del API de OSMEl API de OSM permite descargar datos de varias formas. En todos los casos la descarga está limitada a 0.25 grados o 50000 nodos.Desde el portal de OpenStreetMap, pestaña exportarCon wget desde la consola linux: wget -Ofacultad.osm http://openstreetmap.org/api/o.6/map? bbox=-3.7,40.4,-3.6,40.5Con osmosis: osmosis --ra left=-3.6 bottom=40.5 right=-3.5 top=40.6 --write-xml facultad2.osm 14
  15. 15. 10.- Osmosis: Recortar un mapa .osmPodemos descargar archivos OSM mas extensos, sin la limitación de los 50000 nodos, desde portales que suministran archivos planet, por ejemplo geofabrik: http://download.geofabrik.de/osm/Si tenemos un archivo planet extenso, y queremos recortar la zona comprendida en un rectángulo, podemos hacerlo con osmosis: osmosis --read-xml facultad.osm --bb left=-3.5 bottom=40.5 right=-3.48 top=40.52 --write-xml mini.osm 15
  16. 16. 11.- Osmosis: Instalar el plugin MapsforgePara visualizar mapas off line con Mapsforge debemos convertir los ficheros .osm a formato .map. Para ello se utiliza osmosis, al que hay que añadirle un plugin específico. Los pasos son:1.- Descargar el plugin: mapsforge-map-writer-0.3.0-jar-with-dependencies.jar2.- Copiar el fichero jar en el directorio lib/default de la instalación de osmosis.3.- Crear el fichero: osmosis/config/osmosis-plugins.conf4.- Añadirle al fichero anterior la siguiente línea: org.mapsforge.map.writer.osmosis.MapFileWriterPluginLoader 16
  17. 17. 12.- Osmosis: crear un fichero .mapPara crear un fichero .map a partir de un fichero .osm, desde la consola linux ejecutamos osmosis: osmosis --read-xml facultad.osm --mapfile-writer file=facultad.map --bbox 40.5,-3.5,40.6,-3.45 --map-start-position=40.52,-3.53 --map-start-zoom=16 17
  18. 18. 12.- Copiar el fichero .map al dispositivoPodemos copiar ficheros en el dispositivo desde la vista DDMS de Eclipse (teniendo el movil conectado al PC)Tambien podemos abrir un shell con el dispositivo mediante la herramienta adb y ejecutar comandos cp de linux.: adb shellEn este caso solamente debe de haber un dispositivo conectado. (Si además tenemos abierto el emulador, hay que cerrarlo) 18
  19. 19. 13.- Ejemplo 2: Mapa básico off lineTenemos que crear un directorio llamado maps en la sdcard del dispositivo y añadirle el fichero ramblas.map. El ejemplo se llama mf_ejemplo2:public class Mf_ejemplo2Activity extends MapActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MapView mapView = new MapView(this); mapView.setClickable(true); mapView.setBuiltInZoomControls(true); String filepath= Environment.getExternalStorageDirectory(). getPath()+"/maps/ramblas.map"; mapView.setMapFile(new File(filepath)); setContentView(mapView); }} 19
  20. 20. 14.- Ejemplo 3: Mapa off line copiando mapaCreamos el directorio res/raw en la aplicación y añadimos el fichero ramblas.map. El programa copiará el mapa al directorio /sdcard/maps del dispositivo la primera vez que se ejecute. El ejemplo se llama mf_ejemplo3 (El código se adjunta con el material del taller) 20
  21. 21. 15.- El fichero de estilo: renderThemeLos mapas se renderizan de acuerdo a un fichero de estilo que podemos descargar desde el repositorio de mapsforge: renderThemeLa documentación la podemos encontrar en:http://code.google.com/p/mapsforge/wiki/RenderThemeAPI 21
  22. 22. 16.- Ejemplo 4: Estilos y marcadores(Ver el código del ejemplo llamado mf_ejemplo4 en la documentación del taller) 22
  23. 23. 23

×