Bases de datos espaciales con SpatiaLite y conexión con QGIS 1.1.0

Logo SpatiaLite

SpatiaLite es el soporte espacial de la base de datos de SQLite. Se constituye como una alternativa de implementación a los conocidos sistemas de PostgreSQL/PostGIS y MySQL. Como se detalla en el siguiente blog existen grandes ventajas frente a la sencillez de instalación y configuración, portabilidad, la velocidad de procesamiento, el soporte de varias funcionalidades con datos geográficos y la conexión oficial con la última versión de Quantum GIS v1.1.0.

1. El sistema gestión de bases de datos SQLite

SQLite similar a PostgreSQL o MySQL es un sistema de gestión de bases de datos relacional (SMBD), que se destaca a sus homólogos libres, por ser un reducido archivo ~500 KB, muy flexible, portable y funcional desarrollado en el lenguaje C, y no necesita previa configuración de un administrador de bases de datos. El conjunto de base de datos (tablas, definiciones, índices y los propios datos) son almacenados en un fichero estándar de extensión SQLite. La última versión de SQLite 3, permite base de datos hasta 2 Terabytes de tamaño, y también permite la inclusión de campos tipo blob, lo que posibilita añadir la extensión espacial que detallaremos a continuación [1].

En conclusión, y como su nombre lo dice SQLite se destaca por ser un motor de bases de datos sencillo muy fácil de instalar y facilidad de implementar. Es accesible a través de lenguajes de origramación como C, Python, PHP, TCP, Ruby y Perl, y su objetivo es cumplir al máximo con el estándar SQL-92, proveer rapidez y simplicidad de la base de datos. De acuerdo a varias fuentes [2],[3],[4] SQLite es más rápido en la mayor parte de las operaciones que sus  los sistemas como PostgreSQL y MySQL.

De acuerdo a [5] una de las principales desventajas de SQLite es su baja concurrencia, es decir a la capacidad para permitir que diversos usuarios hagan uso de la misma base de datos con poca o ninguna diferencia de tiempo, por lo general si una aplicación va a necesitar una alta concurrencia de escritura de datos siendo el tiempo un factor crítico, debe considerarse un sistema de gestión de base de datos más robusto, cuyo diseño sea expresamente para múltiples usuarios o de alta concurrencia, para mayor información ver [6].


1. es.Wikipedia. http://es.wikipedia.org/wiki/SQLite
2. Database Speed Comparison. http://www.sqlite.org/speed.html
3. Justificación de usar SQLite. http://blog.pucp.edu.pe/item/50841
4. SQLite Database which one is the fastest. http://www.dmxzone.com/go?7605
5.  Nota muy simple sobre la concurrencia de SQLite. http://dbnaut.com/sqlite/nota-muy-simple-sobre-la-concurrencia-en-sqlite-3/
6. Appropriate Uses For SQLite. http://www.sqlite.org/whentouse.html

2.  La extensión espacial de SpatiaLite

SpatialLite, básicamente consiste del motor de base de datos SQLite con funciones espaciales agregadas, de manera similar se puede relacionar a la extensión espacial de PostGIS en el SMBD de PostgreSQL. A través de SpatiaLite es posible almacenar geometrías y realizar consultas con funciones espaciales, de forma similar como podría encontrarse en otros sistemas como PostgreSQL/PostGIS, MySQL, Microsoft SQL Server 2008, IBM DBII y oracle Locator/Spatial. Cumple gran parte de la especificación de la Open Geospatial Consortium (OGC) “Simple Features Specification for SQL”, por lo que su sintaxis se asemeja a la manejada por PostgreSQL/PostGIS, adicionalmente que se cuenta con la integración de librerías como PROJ.4  y GEOS.

Dentro de las características más interesantes de SpatiaLite en su versión 2.3.0 encontramos:

  • Integración de GEOS para realizar análisis espacial
  • Integración de PROJ.4 para implementar transformación de coordenadas entre diferentes sistemas de referencia espacial.
  • Integración de LIBICONV con soporte de codificaciones locales.
  • A través de SQLITE 3.6.2 incluye una implementación nativa de la indexación espacial Rtree.
  • Soporte del formato EXIF GPS (EXchangeable Image file Format), el cual incluye en el metadato de las fotografías la ubicación geográfica donde se realizó la toma.
  • Incluye el módulo de VirtualNetwork para realizar análisis de redes de la ruta más corta a través del algoritmo de Dijkstra’s.
  • Soporte para la librerías de FDO/OGR (VirtualFDO)
  • Una gran cantidad de herramientas que nos permite importar, exportar datos geográficos en formatos shapefile, sql y realizar la conexión con comandos spatialite.
  • Lectura directa y consultas sobre geometrías shapefiles, sin requerir conversión de formatos (VirtualShape)
  • Una muy buena documentación y datos de ejemplo en la página oficial.
  • Conexión para  visualización y edición de geometrías a través de Quantum GIS v1.1.0
  • Una interfaz gráfica (spatialite-gui)

3.  Implementación práctica de una base de datos espaciales con SpatiaLite

El documento está enfocado principalmente para usuarios de GNU/Linux, la mayor parte de las capturas de pantalla se realizó en el sistema operativo GNU/Linux Ubuntu 8.04 AMD64.

3.1.  Obteniendo las herramientas necesarias

Bueno, antes de empezar en cualquier implementación práctica se debe instalar y configurar las herramientas en el sistema operativo. Para ello debemos dirigirnos a la página oficial para descargar el software necesario. Allí podemos encontrar los binarios para diversas plataformas, como Linux 32 bit, Mac Os X, Windows, o el código fuente, que en casos de plataformas de Linux de 64 bit requiere compilarse.

Página oficial: http://www.gaia-gis.it/spatialite/

En el enlace de precompiled binaries descargamos las siguientes herramientas libspatial, spatial-tools y spatialite-gui. Para los usuarios de Windows pueden obtener también los binarios de las dependencias de PROJ.4 y GEOS. Luego sigue descomprimir los archivos en una carpeta y pasar al siguiente paso.
Para los usuarios que requieran compilar el código deben descargar los siguientes archivos en el siguiente orden, descomprimir los archivos y ejecutar los comandos de compilación.
Para Ubuntu instalar las dependencias :

> sudo apt-get install libwxbase2.8-dev  libgeos-dev sqlite3 libsqlite3-dev proj libwxgtk2.8-dev wx-common

libspatialite-amalgamation-2.3.0.tar.gz (1.414 KB)

> sudo ./configure
> sudo make
> sudo make install

spatialite-tools-2.3.0.tar.gz (389 KB)

> sudo ./configure

> sudo make

> sudo make install

spatialite-gui-2.3.0.tar.gz (613 KB)

Renombrar el archivo de Makefile-plataforma a Makefile, y para usuarios de Linux de 64 bit, borrar la siguiente entrada el archivo Makefile (-march=i686). Por último copiar el binario de spatialite-gui a un directorio bin del sistema.

> sudo cp Makefile-linux32  Makefile

> sudo make
> sudo cp ./bin/spatialite-gui /usr/local/bin/

3.2.  Creando la base de datos espaciales y conectando a  las bases de datos de ejemplo

Una vez obtenido las herramientas, debe tener los siguientes ejecutables: spatialite, exif_loader, shp_doctor, spatialite_network, spatialite_tool y spatialite_gui.

Puede descargar algunos datos de ejemplos muy completos de la página web del proyecto de SpatiaLite, test-2.3.sqlite.gz, test-network-2.3.sqlite.gz y exif-gps-samples.tar.gz .

Lo que continua es realizar una nueva conexión o conectar a una base de datos espacial existente a partir de los archivos descomprimidos de las bases de datos de ejemplo. Para ambos casos implementamos la interfaz gráfica de spatialite-gui, la base de datos espacial tiene como formato .sqlite.

> spatialite-gui

Interfaz gráfica Spatialite-gui

Figura 1. Interfaz gráfica de SpatiaLite

Pruebe creando la base de datos espaciales en el menú Files-> Creating a New (empty) SQLite DB, especifique tanto la ruta como el nombre de la nueva base de datos espaciales.

Creando una nueva base de datos SpatiaLite

Figura 2. Creando una nueva base de datos espaciales

Observe que por defecto se crea la tabla de geometric_columns que especifica metadatos y la geometrías y la tabla de spatial_ref_sys en donde se específica los códigos y parámetros del sistema de referencia de coordenadas de las capas espaciales.

Luego continúe cargando las capas necesarias a través del menú Files-> Load Shapefile. En la ventana emergente debe especificar tanto el nombre de la capa, código EPSG del sistema de referencia espacial, el nombre de la columna de geometría y el sistema de codificación local.

Cargando datos SHP en spatiaLite
Figura 3. Cargando datos geográficos en SpatiaLite

Finalmente puede consultar las tablas y capas espaciales en la base de datos, a través de las consultas SQL o través del menú emergente y edit table rows con clic derecho sobre cada capa.

Visualizar tablas
Figura 4. Visualizar tablas en SpatiaLite

3.3.  Realizando algunas operaciones y consultas espaciales

Para realizar las siguientes consultas espaciales, puede cerrar la conexión actual a través del menú File->Disconnecting current SQLite DB y conectar a la base de datos de ejemplo de test-2.3.sqlite a través del menú File->Connecting an existing SQLite DB. En esta base de datos espacial encontramos varios datos geográficos de Italia, HighWays (línea), Regions (polígonos) y Towns (punto). A partir de estas capas vamos a realizar varias consultas de análisis espacial y otras operaciones como transformación de coordenadas. Puede revisar el documento de referencia de las funciones soportadas actualmente por SpatialLite en la página Web oficial del proyecto.
  • Calcular el área de todos los polígonos en hectáreas de la capa regiones

SELECT Name, area(geometry)/10000 AS AREA_HAS FROM Regions ORDER BY AREA_HAS;

Consulta 1
Figura 5. Consulta espacial SQL áreas
  • Seleccionar todos los polígonos en la capa regiones que tenga una extensión mayor de un millon de hectáreas 100000 Has.

CREATE TABLE regions_gt_1000000has AS SELECT Name, Geometry AS geom, area(geometry)/10000 AS AREA_HAS FROM Regions WHERE area(geometry)/10000 > 1000000 ORDER BY AREA_HAS;

Consulta espacial SQL 2
Figura 6. Consulta espacial SQL áreas mayores de 1 millon de Has

Recuerde que siempre al crear una nueva capa espacial a partir de una consulta, debe ingresar en la tabla de geometry_columns el metadato correspondientes, con el objeto de que pueda ser cargado en Quantum GIS. Una opción es realizando clic derecho sobre la tabla luego en Insert new row y llenar los datos manualmente.

Agregar geometría
Figura 6. Agregando geometrías

  • Seleccionar todas las ciudades (towns) que están comprendidads en la la región de ABRUZZI.

CREATE TABLE towns_abruzzi AS SELECT Towns.Name, Towns.Peoples,Towns.Geometry FROM Towns, Regions WHERE within(Towns.Geometry,Regions.Geometry) AND Regions.name = “ABRUZZI”;

Cosulta espacial WITHIN
Figura 7. Consulta espacial SQL WITHIN
  • Realizar una área de influencia (buffer) de 15 Kilómetros sobre el poblado de Scanno.

CREATE TABLE towns_scanno_15km AS SELECT Name, Peoples, buffer(Geometry,15*1000) AS geom FROM Towns WHERE Name = ‘Scanno’

  • Seleccionar todos aquellos poblados que estén a menos de 15 Kilómetros del poblado de Scanno

CREATE TABLE seleccion_scanno AS SELECT Towns.Name, Towns.Geometry AS geom FROM towns_scanno_15km,Towns WHERE intersects(towns_scanno_15km.geom,Towns.Geometry)

3.4.  Análisis de redes con el algoritmo de ruta óptima de Dijkstra’s.

En este caso nos vamos apoyar de la base de datos de ejemplo test-network-2.3.sqlite (sección en construccion).

4.  Conexión, visualización y edición con Quantum GIS

La última versión de Quantum GIS en desarrollo v1.1.0 soporta la bases de datos espaciales de SpatiaLite, por lo que es posible crear las conexiones, visualizar y editar los datos y resultados de las consultas SQL de manera similar como se realiza en PostGIS. En GNU/Linux es posible descargar los binarios de debian para plataformas de 32 bit y realizar su instalación [descargar]. Para usuarios de M$ Windows pueden descargar el archivo  portable de QGIS-Janus v0.11 con el plugin de SpatialLite en este enlace [descargar], o también pueden probar la versión preliminar de QGIS-DEV a través del instalador de OSGeo4W .

Para el caso de compilar el código fuente en GNU/Linux, las instrucciones de habilitar la extensión de SpatiaLite en QGIS v1.1.0  se encuentran en página oficial del proyecto [ir a enlace]. Sin embargo recomiendo descargar y utilizar el código fuente desde el sistema de control de cambios de QGIS.

> svn co https://svn.osgeo.org/qgis/trunk/qgis qgis_unstable

Recuerde tener en cuenta las dependencias para realizar la instalación. Las instrucciones finales de compilación se encuentran en la página 3 en el numeral B) Building.

Una vez que QGIS v1.1.0 se instale correctamente en GNU/Linux, o si utiliza la versión de QGIS-Janus v0.11 en Windows es posible realizar las conexiones y visualizar las bases de datos espaciales de SpatiaLite. En el botón Add SpatiaLite Layer es posible crear las conexiones a las bases de datos y visualizar las capas geométricas.

QGIS SpatiaLite
Figura 8. Extensión SpatiaLite en QGIS v1.1.0
El primer paso consiste en crear una nueva conexión con la base de datos espacial SpatiaLite y sólo debe seleccionar el archivo que se trabajo anteriormente test-2.3.sqlite. Una vez se realice la conexión se establece la conexión con el botón conectar, y ahora se puede observar las capas geométricas, su nombre, tipo de geometría y columna de geometría.
Conexión SpatiaLite
Figura 9.Extensión espacial SpatiaLite en QGIS v1.1.0
Por último se selecciona la capa espacial y se añade a la vista de QGIS. Observemos los resultados de los datos disponibles y las consultas espaciales SQL.
Visualización capa SpatiaLite
Figura 10.Visualización capa SpatiaLite
Los resultados se muestran en la siguiente figura, se puede observar los poblados que están comprendidos en la región de Abruzzi, el buffer de 15 Km sobre el poblado de Scanno y la selección de los poblados más cercanos dentro de los 15 Km del poblado de Scanno.
Visualizar consultas SQL SpatiaLite
Figura 11.Visualizar consultas SQL SpatiaLite

Finalmente se observan otras capturas de pantalla de una base de datos espacial creado con datos de Colombia y la edición de capas geográficas.

Base de datos espaciales Colombia

Figura 12. Base de datos espaciales SpatiaLite Colombia

Herramientas de edición de Quantum GIS en la base de datos espacial de SpatiaLite
Edición SpatiaLite
Figura 13. Edición SpatiaLite en Quantum GIS

5.  Conclusiones

SpatialLite es una solución de base de datos espaciales muy sencilla de instalar, de implementar y totalmente funcional cumpliendo con la mayor parte de las especificaciones de la OGC. Frente a otros sistemas de gestión de bases de datos, tiene ventajas y limitaciones, sin embargo queda demostrado los grandes avances que se ha logrado con esta herramienta.

Quantum GIS, en las próximas versiones 1.1.0, tendrá el soporte oficial de SpatiaLite, lo que posibilita tener un solución de visualización, edición de los datos geográficos y el enlace a funciones de análisis espacial muy completas a través de SpatiaLite y posiblemente a través del lenguaje de programación de Python .

6.  Recursos recomendados:

Sobre SpatialLite. http://www.gaia-gis.it/spatialite-2.3.0/spatialite-manual-2.3.0.html
Tutorial rápido de SpatiaLite. http://www.gaia-gis.it/spatialite-2.3.0/spatialite-tutorial-2.3.0.html
Lista de referencia de funciones SQL. http://www.gaia-gis.it/spatialite-2.3.0/spatialite-sql-2.3.0.html
Análisis de redes con VirtualNetwork. http://www.gaia-gis.it/spatialite-2.3.0/spatialite-network-2.3.0.html
SpatiaLite en 5 minutos. http://www.camptocamp.com/fr/blog/2009/02/kiss-spatialite-in-5-minutes/
Manual de inicio de SpatiaLite. http://www.bostongis.com/PrinterFriendly.aspx?content_name=spatialite_tut01