domingo, 31 de mayo de 2015

Cartografía desde el móvil con OruxMaps y MOBAC

Qué encontrarás en esta entrada?
  • Presentación de MOBAC.
  • Conexión con OruxMaps

En este blog ya hemos hablado alguna vez de cartografía y, en concreto, de su integración con dispositivos móviles. A este respecto puedo decir que, a día de hoy, la alternativa que más me convence con mucha diferencia es OruxMaps, una aplicación gratuita y española con unas características y funcionamiento realmente excepcionales.

Recientemente me topé con un pequeño problema. Su resolución, y las tecnologías con las que me he encontrado por el camino, creo que son lo suficientemente interesantes como para llenar las líneas que estamos escribiendo en este espacio.

Aclarar, en cualquier caso, que el público al que va dirigida esta entrada es al usuario medio de este tipo de tecnologías. Daremos algunas cosas por sabidas, y al mismo tiempo es obvio que al usuario experimentado todo lo que vamos a contar le parecerá una trivialidad. Espero, eso sí, que pueda ser de utilidad al usuario medio que estuviese en una situación similar a la que yo estaba hace un par de días.

Uno de los grandes puntos en los que sobresale OruxMaps es su gestión de mapas. Aún recuerdo, en una etapa temprana del desarrollo de las tecnologías de tracking (que el GPS registrase la ruta que estás siguiendo), cómo las aplicaciones más punteras ofrecían la posibilidad de registrar la ruta sobre una superficie de color plano, de tal manera que no había más referencias que la del propio camino que estabas tomando. Se ofrecía entonces, como ventaja de pago, la posibilidad de añadir un sencillo mapa de base.

Hoy en día OruxMaps proporciona infinidad de mapas online, con la posibilidad de descargarlos para su uso offline y la de añadir nuevos mapas sabiendo los servidores en los que están alojados.

El uso de mapas offline es básico. En plena ruta, es muy posible perder la señal de datos para descargarlos de manera online, y en cualquier caso es un gasto de energía y megas fácilmente evitable. Para ello es muy conveniente descargarse el mapa en casa, con una conexión WiFi.

OruxMaps da la posibilidad de descargarse una parte de un mapa online que estés visualizando en ese momento, para que luego puedas usarlo cuando quieras sin conexión. Esta herramienta es muy útil, y no he tenido problemas con ella hasta ahora, que he querido ampliar mi rango de acción y me he topado con una limitación: sólo se permite la descarga de un bloque que como máximo ocupe 500MB.

Mapa IGN Ráster - Alcalá de Henares (ejemplo de mapa por imágenes no vectoriales)

Mapa OSM MapQuest - Alcalá de Henares (ejemplo de mapa vectorial)

Los mapas ocupan de manera diferente según cómo estén construidos: hay mapas vectoriales, que ocupan muy poco puesto que guardan sólo información vectorial, y al reescalarse se redibujan atendiendo a los vectores que los definen, pero también hay mapas escaneados, que lo que hacen es mostrarte a cada nivel de zoom una imagen, por ejemplo, en TIFF. Los últimos suelen ser mucho más detallados, pero a cambio, ocupan bastante más. Si queremos descargarnos la Comunidad de Madrid de un mapa como el IGN Ráster, vamos a necesitar bastante más de 500 MB.

¿Cuál es la solución? Sin salir de OruxMaps la única solución (según he visto, quizás esté equivocado) es descargarse múltiples retículas de 500MB como máximo. Esto es un poco lioso, puesto que cada retícula tarda un tiempo considerable en descargarse, y si algún día queremos actualizar todo el mapa, deberemos volver a descargar todas las retículas una por una, definiéndolas a mano, con el respectivo solapamiento entre retículas que produciría que el mapa final acabase pesando más. Es un proceso lento, costoso y poco eficiente. Una vez descargado, OruxMaps carga (ya sea de forma manual, o automáticamente, según la configuración) cada trozo de mapa cuando corresponda. Esto tampoco es elegante: estar haciendo una ruta y tenerla partida en varios trozos de mapa.

Mi pregunta era: ¿existe alguna forma de utilizar en OruxMaps mapas offline "grandes" (de más de 500MB)? La respuesta es .

Para ello nos basaremos en una aplicación externa bastante popular: MOBile Atlas Creator (o MOBAC).


Este software multiplataforma (vale para Windows, Linux, OSX...) permite, entre otras cosas, visualizar mapas de distintas fuentes, descargarlos y convertirlos en un formato compatible para una gran variedad de programas, entre los que se encuentra OruxMaps.


Aunque también cuenta con sus limitaciones en el tamaño de los mapas, y con respecto al solape de capas del mismo nivel, éstas están bastante por encima de los 500MB máximos que permite OruxMaps.
 
Como vemos en la imagen  de un poco más arriba, una vez elegido el mapa que queramos utilizar, se selecciona con el ratón la parte del mismo que queramos (esto ya es un avance, porque con el ratón tenemos bastante más precisión que la que tendríamos con el dedo desde OruxMaps, y si queremos rectificar la selección es también más fácil desde el ordenador que desde un móvil o tablet), seleccionamos los niveles de zoom y le damos a "Add selection" para incluir las capas en nuestro atlas. Como podéis ver, he seleccionado gran parte del Este de la Comunidad de Madrid. Seleccionando las capas de zoom desde la 17 a la 0 (ambas incluidas), tenemos un mapa de 1GB (el doble del máximo permitido por OruxMaps).


Al darle a "Create Atlas" empieza la descarga y la conversión al formato que le hayamos indicado. Una vez finalizado, y habiendo elegido el formato "OruxMaps Sqlite", obtenemos dos archivos en la siguiente ruta:
 
<directorio_raíz_del_MOBAC>/atlases/<nombre_del_mapa>/
 
Uno es un ".xml" de unos pocos kBs y el otro es un ".db" que ocupa más. La carpeta con el nombre que le hayamos puesto al mapa, que contiene los dos archivos, ha de copiarse tal cual al móvil, dentro de la ruta:
 
<directorio_oruxmaps>/mapfiles/

De tal manera que tengamos, por ejemplo:

oruxmaps/mapfiles/Madrid Este Raste IGN/

que contega:

  • Madrid Este Raste IGN.otrk2.xml (14,46 KB).
  • OruxMapsImages.db (977,26 MB)


El traspaso de este archivo fue un tema que también se me complicó un poco. Generalmente, paso archivos del ordenador al móvil por red local mediante WiFi vía SFTP (SSH File Transfer Protocol). Esto funciona muy bien y es lo más cómodo para archivos de unos cuantos megas, pero parece que no va tan bien para archivos de gran tamaño.
 
La mejor alternativa parece ser el cable USB, pero por lo visto las últimas versiones de Android utilizan el protocolo MTP (Multimedia Transfer Protocol), que es parte del PTP (Picture Transfer Protocol) desarrollado por Microsoft, y que dependiendo de la versión del sistema operativo que tengas, puede dar problemas en Linux. De hecho, después de leer varios foros al respecto, no conseguí hacer funcionar el MTP en Ubuntu 14.04 con mi Nexus 5.
 
La solución en este caso fue una tontería: cuando elegimos el protocolo PTP (seleccionable desde el móvil cuando está enchufado al equipo), se nos abren las carpetas de imágenes (puesto que este protocolo está diseñado para transferir fotos). Sin embargo, nada nos impide copiar un archivo del formato que sea a la carpeta de imágenes, y luego moverlo con un explorador de archivos desde el móvil (Solid Explorer es mi favorito).

Por WiFi pasar el archivo de mapas de alrededor de 1GB tardó más de 3 horas en pasarse al 50%, con el consecuente calentamiento y gasto de batería del móvil. Mediante USB 3.0, utilizando el protocolo PTP, unos pocos segundos.
 

 
Una vez copiados los archivos, abrimos OruxMaps y comprobamos que el mapa se lee a la perfección.

Algo interesante es que con MOBAC podemos añadir varias fuentes de mapas además de las que ya vienen. Una forma de hacerlo es con un mapa WMS (Web Map Service). Para ello, en la carpeta:
 
<directorio_raíz_del_MOBAC>/mapsources/

Debemos añadir un archivo ".xml" que contenga lo siguiente:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customWmsMapSource>
<name>NOMBRE</name>
<minZoom>0</minZoom>
<maxZoom>20</maxZoom>
<tileType>png</tileType>
<version>1.1.1</version>
<url>http://url_del_wms?</url>
<coordinatesystem>EPSG:4326</coordinatesystem>
</customWmsMapSource>

He de decir que no se me da demasiado bien rellenar estos archivos, y aunque parece simple, me ha costado hacerlos funcionar (y en ocasiones me ha resultado imposible detectar dónde podría estar el error). En principio habría que cambiar el nombre, seleccionar la escala mínima y máxima, poner el formato de la imagen y la ruta del servidor. En ocasiones es necesario añadir la capa, mediante la etiqueta <layers>. Aquí podréis encontrar más información al respecto.

Un ejemplo que parece que he conseguido hacer funcionar es el mapa de riqueza de especies de Magrama:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customWmsMapSource>
<name>Riqueza Especies</name>
<minZoom>0</minZoom>
<maxZoom>20</maxZoom>
<tileType>png</tileType>
<version>1.1.1</version>
<url>http://wms.magrama.es/sig/Biodiversidad/RiquezaEspecies/wms.aspx?</url>
<coordinatesystem>EPSG:4326</coordinatesystem>
</customWmsMapSource>

Mapa de Riqueza de Especies de Magrama

La gracia está en que cualquiera de estos mapas que configuremos para ver en MOBAC, podremos descargarlos para su uso offline desde nuestro móvil con OruxMaps.
 

Por último, hablaros de la posibilidad de incluir GPXs en MOBAC, de manera que podamos visualizar nuestras rutas sobre los mapas que hayamos configurado previamente.


En resumen, MOBAC ha sido un interesante descubrimiento para mi, con una integración total con OruxMaps, una aplicación que me parece digna de admiración en su campo.

No hay comentarios:

Publicar un comentario

Querido astarothista!,

Si te ha gustado la entrada y quieres dejar constancia de ello, tienes alguna sugerencia para completarla o corregirla, quieres mostrar tu opinión respecto a algo de lo que se haya hablado en esta entrada (con respeto) o simplemente quieres dejarme un mensaje a mi o a la comunidad, no dudes en comentar ;)!

Recuerda que también estamos en Facebook y en Google+.