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