SlideShare une entreprise Scribd logo
1  sur  23
Taller Mapsforge - Osmosis

Mapas vectoriales off-line en Android con Mapsforge y Osmosis

                  Autor: Santiago Higuera de Frutos
                             (Mayo 2012)
Taller Mapsforge - Osmosis



            (c) Santiago Higuera de Frutos

      Este documento se distribuye bajo licencia
Creative 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)
Taller Mapsforge - Osmosis



ales y el código fuente de los ejemplos de este taller se pueden de


        http://mercatorlab.com/downloads/tallerMapsforge.zip
1.- Mapsforge
Mapsforge 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 MapView
Permite visualizar mapas OpenStreetMap 'on line' y 'off line'
Permite renderizar con estilos personalizados
Licencia LGPL3 (http://www.gnu.org/copyleft/lesser.html)




                              4
2.- Mapsforge features
Features:
Compact file format for fast on-device rendering of OpenStreetMap data
Easy to use MapView, similar to of the Google APIs Add-On
Powerful and flexible overlay API
Customizable map styles via XML configuration files
Small library ~ 300 KB
Demo application for Android 1.6+ available
Tool for creating custom map files
100% free and open source (LGPL3 license)




                                    5
3.- Documentación Mapsforge
Portal Mapsforge
http://mapsforge.googlecode.com/svn/tags/0.3.0/javadoc/index.ht


Iniciación
http://code.google.com/p/mapsforge/wiki/GettingStartedMapView


Javadoc
http://mapsforge.googlecode.com/svn/tags/0.3.0/javadoc/index.html


Ejemplos y APIs
http://code.google.com/p/mapsforge/w/list


                            6
2.- Descargar Mapsforge
Librería
Es 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
3.- Creación de un proyecto Mapsforge (I)
1.- En Eclipse, creamos un nuevo proyecto Android
2.- Añadimos la librería mapsforge-map.jar al proyecto:
Project->Properties->JavaBuildPath->Libraries->AddExternalJARs->mapsforge-
                    >map-0.3.0-jar-with-dependencies.jar




3.- ¡Activamos el 'chekbox' de
   la librería en la pantalla
  'order and export' del mismo
         JavaBuildPath!




                                8
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
5.- Ejemplo 1: Mapa básico online
El 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
6.- Mapas off line

La 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
7.- Osmosis
Osmosis is a command line Java application for processing
 OSM data desarrollada por Brett Henderson.

       http://wiki.openstreetmap.org/wiki/Osmosis

The tool consists of a series of pluggable components that can be
 chained together to perform a larger operation.


Componets for reading OSM Database

Components for reading from database and from file

components for writing to database and to file

components for deriving and applying change sets to data sources

components for sorting data, etc.:
                             12
8.- Instalación de Osmosis
Descargar osmosis desde :

http://bretth.dev.openstreetmap.org/osmosis-build/osmosis-latest.tgz

Descomprimir en un directorio

Darle path al subdirectorio bin de la instalación

Probar tecleando 'osmosis' . Nos deberá aparecer una pantalla de
  instrucciones de uso del programa.




                               13
9.- Descarga mapas del API de OSM
El 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 'exportar'
Con wget desde la consola linux:
    wget -Ofacultad.osm
     'http://openstreetmap.org/api/o.6/map?
        bbox=-3.7,40.4,-3.6,40.5'

Con osmosis:


   osmosis
      --ra left=-3.6 bottom=40.5 right=-3.5 top=40.6
        --write-xml facultad2.osm



                             14
10.- Osmosis: Recortar un mapa .osm
Podemos 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
11.- Osmosis: Instalar el plugin Mapsforge
Para 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.jar

2.- Copiar el fichero jar en el directorio 'lib/default' de la instalación de
  osmosis.

3.- Crear el fichero:

               osmosis/config/osmosis-plugins.conf

4.- Añadirle al fichero anterior la siguiente línea:

   org.mapsforge.map.writer.osmosis.MapFileWriterPluginLoader
                                   16
12.- Osmosis: crear un fichero .map
Para 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
12.- Copiar el fichero .map al dispositivo
Podemos 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 shell



En este caso solamente debe de haber un dispositivo conectado. (Si
 además tenemos abierto el emulador, hay que cerrarlo)




                                18
13.- Ejemplo 2: Mapa básico off line
Tenemos 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
14.- Ejemplo 3: Mapa off line copiando mapa
Creamos 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
15.- El fichero de estilo: renderTheme
Los mapas se renderizan de acuerdo a un fichero de estilo que podemos
  descargar desde el repositorio de mapsforge:

                         renderTheme
La documentación la podemos encontrar en:

http://code.google.com/p/mapsforge/wiki/RenderThemeAPI




                               21
16.- Ejemplo 4: Estilos y marcadores
(Ver el código del ejemplo llamado mf_ejemplo4 en la documentación
  del taller)




                              22
23

Contenu connexe

Similaire à Taller mapsforge

Estructura general de una app
Estructura general de una app Estructura general de una app
Estructura general de una app
Angel Ayala
 

Similaire à Taller mapsforge (20)

Nodejs
NodejsNodejs
Nodejs
 
Clase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasosClase 3 instalación y primeros pasos
Clase 3 instalación y primeros pasos
 
Manual de radio mobile
Manual de radio mobileManual de radio mobile
Manual de radio mobile
 
Manual de radio_mobile
Manual de radio_mobileManual de radio_mobile
Manual de radio_mobile
 
Visualizando Datos: la geolocalización como herramienta emergente de análisis...
Visualizando Datos: la geolocalización como herramienta emergente de análisis...Visualizando Datos: la geolocalización como herramienta emergente de análisis...
Visualizando Datos: la geolocalización como herramienta emergente de análisis...
 
Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2Desarrollo de aplicaciones multiplataforma 1/2
Desarrollo de aplicaciones multiplataforma 1/2
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"
 
Radio mobile, Instalacion y Funcionamiento
Radio mobile, Instalacion y FuncionamientoRadio mobile, Instalacion y Funcionamiento
Radio mobile, Instalacion y Funcionamiento
 
Apache Tomcat 8: despliegue de una aplicación mediante terminal
Apache Tomcat 8: despliegue de una aplicación mediante terminalApache Tomcat 8: despliegue de una aplicación mediante terminal
Apache Tomcat 8: despliegue de una aplicación mediante terminal
 
Actividad 11
Actividad 11Actividad 11
Actividad 11
 
Actividad 11
Actividad 11Actividad 11
Actividad 11
 
Actividad 11
Actividad 11Actividad 11
Actividad 11
 
Estructura general de una app
Estructura general de una app Estructura general de una app
Estructura general de una app
 
FROM lost to the docker
FROM lost to the dockerFROM lost to the docker
FROM lost to the docker
 
Instalacion roms
Instalacion romsInstalacion roms
Instalacion roms
 
Seguridad en Android
Seguridad en AndroidSeguridad en Android
Seguridad en Android
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020
 
Práctica: distribución de midlets mediante OTA con J2ME - parte I
Práctica: distribución de midlets mediante OTA con J2ME - parte IPráctica: distribución de midlets mediante OTA con J2ME - parte I
Práctica: distribución de midlets mediante OTA con J2ME - parte I
 
Desarrollo android - 3 - entorno de desarrollo
Desarrollo android  - 3 - entorno de desarrolloDesarrollo android  - 3 - entorno de desarrollo
Desarrollo android - 3 - entorno de desarrollo
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
 

Taller mapsforge

  • 1. Taller Mapsforge - Osmosis Mapas vectoriales off-line en Android con Mapsforge y Osmosis Autor: Santiago Higuera de Frutos (Mayo 2012)
  • 2. Taller Mapsforge - Osmosis (c) Santiago Higuera de Frutos Este documento se distribuye bajo licencia Creative 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. Taller Mapsforge - Osmosis ales y el código fuente de los ejemplos de este taller se pueden de http://mercatorlab.com/downloads/tallerMapsforge.zip
  • 4. 1.- Mapsforge Mapsforge 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 MapView Permite visualizar mapas OpenStreetMap 'on line' y 'off line' Permite renderizar con estilos personalizados Licencia LGPL3 (http://www.gnu.org/copyleft/lesser.html) 4
  • 5. 2.- Mapsforge features Features: Compact file format for fast on-device rendering of OpenStreetMap data Easy to use MapView, similar to of the Google APIs Add-On Powerful and flexible overlay API Customizable map styles via XML configuration files Small library ~ 300 KB Demo application for Android 1.6+ available Tool for creating custom map files 100% free and open source (LGPL3 license) 5
  • 6. 3.- Documentación Mapsforge Portal Mapsforge http://mapsforge.googlecode.com/svn/tags/0.3.0/javadoc/index.ht Iniciación http://code.google.com/p/mapsforge/wiki/GettingStartedMapView Javadoc http://mapsforge.googlecode.com/svn/tags/0.3.0/javadoc/index.html Ejemplos y APIs http://code.google.com/p/mapsforge/w/list 6
  • 7. 2.- Descargar Mapsforge Librería Es 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. 3.- Creación de un proyecto Mapsforge (I) 1.- En Eclipse, creamos un nuevo proyecto Android 2.- Añadimos la librería mapsforge-map.jar al proyecto: Project->Properties->JavaBuildPath->Libraries->AddExternalJARs->mapsforge- >map-0.3.0-jar-with-dependencies.jar 3.- ¡Activamos el 'chekbox' de la librería en la pantalla 'order and export' del mismo JavaBuildPath! 8
  • 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. 5.- Ejemplo 1: Mapa básico online El 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. 6.- Mapas off line La 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. 7.- Osmosis Osmosis is a command line Java application for processing OSM data desarrollada por Brett Henderson. http://wiki.openstreetmap.org/wiki/Osmosis The tool consists of a series of pluggable components that can be chained together to perform a larger operation. Componets for reading OSM Database Components for reading from database and from file components for writing to database and to file components for deriving and applying change sets to data sources components for sorting data, etc.: 12
  • 13. 8.- Instalación de Osmosis Descargar osmosis desde : http://bretth.dev.openstreetmap.org/osmosis-build/osmosis-latest.tgz Descomprimir en un directorio Darle path al subdirectorio bin de la instalación Probar tecleando 'osmosis' . Nos deberá aparecer una pantalla de instrucciones de uso del programa. 13
  • 14. 9.- Descarga mapas del API de OSM El 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 'exportar' Con wget desde la consola linux: wget -Ofacultad.osm 'http://openstreetmap.org/api/o.6/map? bbox=-3.7,40.4,-3.6,40.5' Con osmosis: osmosis --ra left=-3.6 bottom=40.5 right=-3.5 top=40.6 --write-xml facultad2.osm 14
  • 15. 10.- Osmosis: Recortar un mapa .osm Podemos 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. 11.- Osmosis: Instalar el plugin Mapsforge Para 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.jar 2.- Copiar el fichero jar en el directorio 'lib/default' de la instalación de osmosis. 3.- Crear el fichero: osmosis/config/osmosis-plugins.conf 4.- Añadirle al fichero anterior la siguiente línea: org.mapsforge.map.writer.osmosis.MapFileWriterPluginLoader 16
  • 17. 12.- Osmosis: crear un fichero .map Para 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. 12.- Copiar el fichero .map al dispositivo Podemos 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 shell En este caso solamente debe de haber un dispositivo conectado. (Si además tenemos abierto el emulador, hay que cerrarlo) 18
  • 19. 13.- Ejemplo 2: Mapa básico off line Tenemos 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. 14.- Ejemplo 3: Mapa off line copiando mapa Creamos 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. 15.- El fichero de estilo: renderTheme Los mapas se renderizan de acuerdo a un fichero de estilo que podemos descargar desde el repositorio de mapsforge: renderTheme La documentación la podemos encontrar en: http://code.google.com/p/mapsforge/wiki/RenderThemeAPI 21
  • 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