Taller mapsforge

23
Taller Mapsforge - Osmosis Mapas vectoriales off-line en Android con Mapsforge y Osmosis Autor: Santiago Higuera de Frutos (Mayo 2012)

Transcript of Taller mapsforge

Page 1: Taller mapsforge

Taller Mapsforge - Osmosis

Mapas vectoriales off-line en Android con Mapsfor ge y Osmosis

Autor: Santiago Higuera de Frutos(Mayo 2012)

Page 2: Taller mapsforge

(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)

Ta ll er Mapsforg e - Osmosis

Page 3: Taller mapsforge

Los materiales y el código fuente de los ejemplos de este taller se pueden descargar en:

http://mercatorlab.com/downloads/tallerMapsforge.zip

Ta ll er Mapsforg e - Osmosis

Page 4: Taller mapsforge

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

Page 5: Taller mapsforge

2.- Mapsforge features

5

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)

Page 6: Taller mapsforge

3.- Documentación Mapsforge

6

Portal Mapsforge

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

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

Page 7: Taller mapsforge

2.- Descargar Mapsforge

7

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

Page 8: Taller mapsforge

3.- Creación de un proyecto Mapsforge (I)

8

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!

Page 9: Taller mapsforge

4.- Creación de un proyecto MapsForge (II)

9

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" />

Page 10: Taller mapsforge

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:

10

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); }}

Page 11: Taller mapsforge

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

Page 12: Taller mapsforge

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

Page 13: Taller mapsforge

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

Page 14: Taller mapsforge

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:

14

Con osmosis:

wget -Ofacultad.osm 'http://openstreetmap.org/api/o.6/map? bbox=-3.7,40.4,-3.6,40.5'

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

Page 15: Taller mapsforge

10.- Osmosis: Recortar un mapa .osm

15

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

Page 16: Taller mapsforge

11.- Osmosis: Instalar el plugin Mapsforge

16

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

Page 17: Taller mapsforge

12.- Osmosis: crear un fichero .map

17

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

Page 18: Taller mapsforge

12.- Copiar el fichero .map al dispositivo

18

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)

Page 19: Taller mapsforge

13.- Ejemplo 2: Mapa básico off line

19

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); }}

Page 20: Taller mapsforge

14.- Ejemplo 3: Mapa off line copiando mapa

20

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)

Page 21: Taller mapsforge

15.- El fichero de estilo: renderTheme

21

Los 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

Page 22: Taller mapsforge

16.- Ejemplo 4: Estilos y marcadores

22

(Ver el código del ejemplo llamado mf_ejemplo4 en la documentación del taller)

Page 23: Taller mapsforge

23