Creación de .mbtiles desde repositorios online

Dado el marcado carácter offline de CartoDroid se hace necesario poder guardar la información que nos proveen distintos proveedores de cartografía (Google Maps, Bing Maps, …) y generar cartografía raster en ficheros que puedan llevarse en el propio dispositivo sin necesidad de tener conexión de datos. En el presente artículo vamos a mostrar el uso de una herramienta denominada SAS.Planet que nos permite realizar estas labores, generando ficheros compatibles con CartoDroid, y como tenemos que configurar nuestro proyecto para poder utilizarlos.

El primer paso es que nos descarguemos la aplicación desde la web del desarrollador www.sasgis.org/download/. Una vez descargado no es necesario instalarlo, ya que simplemente descomprimiendo el archivo en una carpeta del PC se puede ejecutar la aplicación.

Selección de datos a mostrar

Una vez ejecutada la aplicacion, cuya interfaz podemos ver en la captura anterior, podemos definir el mapa que queremos ver como referencia a la hora de definir la zona que queremos descargarnos. Tenemos una amplia colección de mapas online con los que trabajar, Google Maps, Bing Maps, Mapas online de ESRI, … Por otra parte la aplicacion es configurable, por lo que si conocemos algún otro servicio que no esté definido (por ejemplo los servicios de mapas de catastro), se puede configurar dentro de la herramienta para poder realizar la descarga de los datos del mismo.

Definición de la zona de descarga

Para poder descargar los datos, es necesario delimitar cual es la zona de la cual queremos extraer los datos. Para ello tenemos varias herramientas.

La mas simple es la herramienta de “Selección Rectangular” que me permite dibujar de forma sencilla un rectángulo en pantalla delimitando la zona de trabajo. En el momento de terminar la creación de la zona de trabajo se muestra la pantalla de “Administración de Selecciones”, la cual nos permite realizar las operaciones de descarga y exportación de los datos.

Descarga de datos

Previo a creación del fichero que podremos utilizar en CartoDroid, es necesaria la descarga de las imágenes a nuestro PC.

Este formulario nos permite tanto la descarga de los datos como la exportación de los mismos. Inicialmente tenemos que descargar los datos. Bien es cierto que nos podríamos saltar este paso si ya hemos descargado los datos en anteriores operaciones ya que la herramienta guarda estos datos para posteriores operaciones.

En esta pantalla debemos ir a la pestaña “Descarga” y una vez allí definimos el mapa desde el que nos vamos a descargar los datos así como los niveles de zoom para los que se van a generar las imágenes. Una vez seleccionados ambos parámetros, se nos muestra el número de mosaicos que va a descargar la herramienta y el tamaño de los mismos en píxeles.

Al dar a iniciar se nos muestra una pantalla que nos va indicando el progreso de la descarga y detalles como el peso de los ficheros generados. Esta tarea puede tardar bastante tiempo dependiendo de la zona seleccionada y los niveles de zoom a los que queremos descargar las imágenes.

Creación de fichero compatible con CartoDroid

Cuando se haya terminado la descarga de los datos es el momento de crear el fichero de trabajo compatible con CartoDroid. Para ello debemos acceder de nuevo al formulario de “Administrador de Selecciones” para ello desde el menú de selección debemos acceder a la opción “Última selección”. Una vez en la pestaña de “Exportar” podremos seleccionar los siguientes parámetros:

  • Formato – El formato del fichero de exportación. En este caso debe ser de tipo MBTiles 1.2(SQLite3) para que CartoDroid pueda utilizarlo.
  • Guardar en – Seleccionamos el nombre del fichero. Este debe acabar en .mbtiles.
  • Mapa – Podemos seleccionar el mapa a partir del que queremos generar el fichero.
  • Niveles de Zoom – Niveles de zoom con los que se generará el fichero. Podemos seleccionar varios.

Si seleccionamos un mapa o unos niveles de zoom que no tenemos descargados, la exportación creará el fichero con las teselas, pero estas estarán vacías.

Configuración y carga de los datos en CartoDroid

El siguiente paso a dar es llevar el fichero generado al dispositivo móvil, lo primero es cambiar el nombre al fichero generado, este debe de seguir la siguiente norma.

nombre_srid_version.mbtiles

Ej: valladolid_4326_2016.mbtiles

Después simplemente conectamos con un cable usb el móvil o tablet y llevamos el archivo hasta la memoria del mismo (la localización del fichero dentro del almacenamiento es irrelevante).

Debemos cambiar el fichero de configuración del proyecto a cargar para añadir este nueva capa, el fichero es un xml que se encuentra en la carpeta de dispositivo\cartodroid\config y se denomina crtdrdLayers.NOMBRE_PROYECTO.xml

En dicho fichero debemos de añadir una nueva capa de tipo mbtiles y guardar el fichero ya solo debemos abrir CartoDroid y cargar el proyecto para ver la nueva capa sobre el mapa.

El código ha añadir es como el que sigue.

<entry>
    <string>PRUEBASAS</string>
    <es.jcyl.ita.crtcyl.core.model.RasterLayer>
    <descripcion>Mapa de prueba de SAS</descripcion>
    <id>Pruebas Carga</id>
    <name>Mapas Prueba</name>
    <sources>
        <es.jcyl.ita.crtcyl.client.dao.source.RepoMBTilesServiceDescriptor>
            <resourceid>valladolid</resourceid>
            <srid>4326</srid>
            <version>2016</version>
        </es.jcyl.ita.crtcyl.client.dao.source.RepoMBTilesServiceDescriptor>
    </sources>
    <zOrder>10</zOrder>
    <range>
        <max>15</max>
        <min>6</min>
    </range>
    </es.jcyl.ita.crtcyl.core.model.RasterLayer>
 </entry>

Debemos cambiar los parámetros en negrita para adaptarlo a nuestros datos, sobre todo resourceid, srid y versión que tienen que coincidir con los el nombre del fichero. Para el caso del código mostrado sería valladolid_4326_2016.mbtiles

Crear nueva capa partiendo de un listado de recintos SigPac

Es muy común cuando trabajamos con datos espaciales que la geometría de los elementos de trabajo se correspondan con elementos de otras capas de referencias. En los trabajos de campo una de las referencias más utilizadas es la del SigPac y por lo tanto es muy común que nuestras geometrías de trabajo sean los propios recintos del SigPac.

En este artículo vamos a crear una nueva capa de trabajo partiendo de una lista de recintos SigPac. La lista contiene las referencias de recinto a cargar estas referencias pueden estar como veremos a continuación en varios formatos.

Vamos a ver paso a paso como crearíamos la nueva capa y cargamos los datos

  1. El primer paso es crear una nueva capa de trabajo poligonal.
  2. Debemos crear un fichero de texto en el que contenta las diferentes referencias de recinto que queremos cargar en la capa. El fichero debe contener solo una referencia por linea y tenemos dos opciones para definir la referencia del recinto SigPac

    -Referencia de recinto completa – En este caso la referencia se conforma teniendo en cuenta la siguiente tabla:

    Provincia: 47      con 2 dígitos 39
    Municipio: 1       con 3 dígitos 001
    Agregado: 0        con 3 dígitos 000
    Zona: 0               con 2 dígitos 00
    Polígono: 2         con 3 dígitos 002
    Parcela: 3            con 5 dígitos 00003
    Recinto: 2           con 3 dígitos 002

    Código de búsqueda de recinto: 470010000000200003002

    -Referencia separada por ; – En el presente caso los códigos de cada una de las partes de la rerefencia se separan por ;

    Provincia;Municipio;Agregado;Zona;Poligono;Parcela;Recinto

    Referencia de recinto: 47;1;0;0;2;3;2

  3. Seleccionamos la capa poligonal que hemos creado y pulsamos sobre el cono de importación
    importacionsigpac-seleccion
  4. En el cuadro de dialogo “Importar entidades”
    importacionsigpac-importacion
  5. Seleccionamos el fichero que contiene la lista de recintos a cargar
    importacionsigpac-fichero
  6. Se muestra un mensaje de texto que nos indica que se van a cargar los recintos SigPac provenientes del listado en la capa seleccionada. Aceptamos
    importacionsigpac-aceptar
  7. Una vez procesado el fichero se muestra un resumen de los recintos cargados.
    importacionsigpac-final

Importación de ficheros Shapefile(.shp) a proyectos CartoDroid

Por el momento CartoDroid no es capaz de manejar ficheros Shapefile(.shp) de forma nativa, está planificado su  sino que la forma de trabajar con ellos es importarlos a ficheros Spatialite (SQlite) que puedan ser gestionados por la aplicacion.

Para poder realizar la operación vamos a utilizar una herramienta denominada spatialite-gui

Descargar spatialite-gui (versión 32bits)

Descargar spatialite-gui (versión 64bits)

A continuación vamos a ver como podemos realizar dicha importación:

  • Abrimos spatilaite-gui en nuestro PC.
  • En este punto tenemos dos opciones.
  • No tenemos una base de datos SQLite sobre la que cargar los datos -Creamos una nueva base de datos spatialite a través de la opción de menú “Creating a New (empty) SQLite DB”  createnewsqlite.
  • Tenemos una base de datos SQLite sobre la que cargar los datos – Conectamos con la base de datos a través de la opción “Connecting an existing SQlite DB”
  • Cargar un SHP mediante la opción “Load Shapefile” Cargar Shapefile en spatialite-gui.
  • Se muestra el siguiente cuadro de dialogo que tenemos que cumplimentar

dialogocargashapes

 

SRID: El SRID indica el sistema de referencia de los datos a cargar. En el caso de ejemplo el sistema de referencia es ETRS89 UTM 30N

Geometry Storage: Es necesario marcar los tres checks de forma obligatoria ya que CartoDroid necesita que la geometría se guarde con estas condiciones

Geometry Type: El tipo de la geometría dependerá del tipo de geometría del shape a cargar.

Shape con elementos puntuales – Se selecciona como “Automatic”

Shape con elementos lineales – Se selecciona la como “User specified” y en el combo la opción “MULTILINESTRING”

Shape con elementos poligonales – Se selecciona la como “User specified” y en el combo la opción “MULTIPOLYGON”

Pulsamos el botón ok y los datos del shape se cargan en la base de datos SQlite

  • Conectamos el terminal Android al PC
  • Copiamos la SQlite a una carpeta del terminal
  • Cargamos la nueva capa cargada desde CartoDroid

cartodroid_cargashapefile

Configuración búsqueda SigPac avanzada

Puede que hayas intentado realizar búsquedas SigpPac desde CartoDroid y no hayas podido o simplemente los datos que la plataforma proporciona para descarga no son los que necesitas y por lo tanto es necesario configurar el funcionamiento de la misma. Para que CartoDroid pueda realizar este tipo de búsquedas es necesario que los datos del SigPac estén cargados y la configuración de donde tiene que localizar CartoDroid los datos de la búsqueda esté bien realizada.

La configuración de la búsqueda SigPac se realiza desde el fichero sigpac.properties que se encuentra en la carpeta cartodroid\config. En la siguiente imagen vemos una configuración típica del fichero de configuración de la  búsqueda:

busquedasigpac1

Vamos a desgranar cada una de las etiquetas del fichero de configuración (una por cada linea del fichero).

DB_PROVINCIAS, DB_MUNICIPIOS, DB_NUCLEOS, DB_AGREGADOS, DB_ZONAS, DB_POLIGONOS, DB_PARCELAS, DB_RECINTOS.

Estas lineas del fichero indican que base de datos (fichero .sqlite) contiene los datos de las entidades correspondientes a cada una de las lineas. En este caso las entidades de provincia, municipio y núcleos están en el fichero provmun_25830_2016.sqlite, mientras que los datos de las entidades de polígono, parcela y recinto están contenidas en el fichero recintos_25830_2016.sqlite.

La definición de la Base de datos sobre la que se recogen los datos de las entidades tienen una serie de características que es necesario resaltar.

  • Los nombres de los ficheros no tienen porque tener una nomenclatura definida. Es decir, en principio los ficheros sqlite pueden tener cualquier nombre.
  • CartoDroid no solo carga el fichero indicado en las etiquetas DB_xxxx sino que puede recoger la información de todos los ficheros que tengan como prefijo el indicado nombre indicado.

Por ejemplo si defino la siguiente linea DB_RECINTOS=fichero recintos_25830_2016.sqlite

no solo se cargan los datos del fichero fichero recintos_25830_2016.sqlite sino que también cargará por ejemplo los ficheros fichero recintos_25830_2016_05.sqlite y fichero recintos_25830_2016_09.sqlite.

  • Los ficheros no tienen una ruta asociada ya que CartoDroid busca en todo el dispositivo el fichero indicado. Podemos tener los ficheros en cualquier directorio tanto del mismo dispositivo como de la memoria externa que la aplicación los reconoce y trabaja con ellos.

TABLE_PROVINCIAS, TABLE_MUNICIPIOS, TABLE_NUCLEOS, TABLE_AGREGADOS, TABLE_ZONAS, TABLE_POLIGONOS, TABLE_PARCELAS, TABLE_RECINTOS

Estas etiquetas definen las tablas que contienen los datos de las entidades correspondientes.

En el ejemplo que hemos presentado, para las entradas de TABLE_POLIGONOS, TABLE_PARCELAS, TABLE_RECINTOS el valor es el mismo RECINTOS. Eso quiere decir que va a recoger para la búsqueda los valores que contiene en la tabla de RECINTOS.

Los campos desde donde se recogen los valores que para cada tipo de entidad muestra CartoDroid están predeterminados y en las tablas deben de llamarse de la siguiente forma

  • c_provincia
  • c_municipio
  • c_agregado
  • c_zona
  • c_poligono
  • c_parcela
  • c_recinto

En el ejemplo mostrado anteriormente los datos de las parcelas que tenemos para seleccionar se van a recoger del campo c_parcela de la tabla RECINTOS de las bases de datos que se correspondan con el nombre recintos_25830_2016*.sqlite dentro de cualquier carpeta del dispositivo.

TABLE_RECINTOS_INDEX

A través de esta etiqueta se indica el indice espacial de la tabla de recintos. No se utiliza para la búsqueda pero si para otras funcionalidades de CartoDroid que veremos más adelante