6 votos

¿Cómo crear una capa SpatiaLite en QGIS 3 con Python?

Tengo una base de datos existente de SQLITE y quiero crear varias capas adicionales de geometría con Python.

Dentro de QGIS 2.x usaba la siguiente biblioteca

from pyspatialite import dbapi2

Según este problema Pyspatialite in QGIS 3 crash QGIS 2.99 ya no tiene la biblioteca pyspatialite. Con la biblioteca sqlite3 obviamente no se incluye la extensión spatialite.

Así que ahora estoy atascado. ¿Hay alguna otra biblioteca que pueda usar?

6voto

Elliott Maynard Puntos 11

Acabo de abrir un PR para solucionar este problema en QGIS v3 (en Windows). Recuerda que esta es una versión de desarrollo.

Mientras tanto, podrías utilizar este instalador y ajustarlo por ti mismo (¡el software libre es genial!) después de la instalación. Solo necesitas cambiar la línea 602 de C:\\Program Files\\QGIS 2.99\\apps\\qgis-dev\\python\\qgis\\utils.py por:

    ("spatialite", "spatialite_init_ex"),

Reinicia QGIS y ahora podrás utilizar conexiones de sqlite3 con soporte de SpatiaLite utilizando la siguiente línea desde la Consola de Python de QGIS o desde tu complemento:

con = qgis.utils.spatialite_connect("/ruta/a/tu/base_de_datos_spatialite.sqlite")

Ahora, puedes crear una nueva capa de punto en tu base de datos de esta forma (ver la documentación):

cur = con.cursor()
# Ejecuta la siguiente línea si tu base de datos fue recién creada, podría tardar un momento...
cur.execute("SELECT InitSpatialMetaData()") 
cur.execute("""CREATE TABLE test_geom (
  id INTEGER NOT NULL
    PRIMARY KEY AUTOINCREMENT,
  name TEXT NOT NULL,
  measured_value DOUBLE NOT NULL);""")
cur.execute("""SELECT AddGeometryColumn('test_geom', 'the_geom',
  4326, 'POINT', 'XY');""")
cur.close()
con.close()

Este pequeño arreglo también hace que db_manager pueda abrir bases de datos de SpatiaLite.

2voto

apocalysque Puntos 131

Como dijo Jürgen Fischer en el feed del rastreador de errores aquí

Utilice sqlite3 en lugar de pyspatialite para las conexiones de SpatiaLite

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X