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
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
Página oficial: http://www.gaia-gis.it/spatialite/
> 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
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
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.
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.
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.
3.3. Realizando algunas operaciones y consultas espaciales
- 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;
- 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;
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.
- 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”;
- 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
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.
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.
Figura 12. Base de datos espaciales SpatiaLite Colombia
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
Comentarios recientes