4 votos

pyspatialite: No insertar geometría

Me gustaría insertar una fila con una geometría de puntos con pyspatialite. El sql tiene el siguiente aspecto:

insert into eqdata(origin_time, url, mag, lat, lon, depth, m_a, region, mt, the_geom)
                 values ('2013-11-10 07:39:59', 'http://geofon.gfz-potsdam.de/event.php?id=gfz2013walq', 4.300000, -19.840000, 70.050000, 45.000000, 'M', 
                 'Near Coast of Northern Chile', 'None', geomfromtext('POINT(-19.840000 70.050000)', 4326));

Esto no funciona y produce este error:

spatialite.dbapi2.IntegrityError: eqdata.the_geom violates Geometry constraint [geom-type or SRID not allowed]

Si ejecuto el mismo SQL en la misma base de datos con spatialite_gui funciona sin ningún problema.

¿Cómo puedo solucionar este problema con pyspatialite?

1voto

Nathan Feger Puntos 7675

La causa más probable de la violación de la restricción geométrica es el uso de un tipo de geometría incorrecto (por ejemplo, usted utilizó PUNTO pero lo declaró como LÍNEA o similar). Sin embargo, este no parece ser el caso aquí, basado en sus pruebas con spatialite_gui.

Una de las diferencias que presenta spatialite_gui (y el spatialite de línea de comandos) tienen sobre libspatialite y cualquier cosa que use libspatialite directamente (incluyendo la carga de la extensión pysqlite y pyspatialite) es que la tabla spatial_ref_sys no se inicializa automáticamente en el arranque normal de libspatialite. Así que es posible que no hayas creado la tabla spatial_ref_sys correctamente, o que hayas seleccionado una opción que no incluya el SRID 4326.

Puede comprobarlo con algo como

SELECT * FROM spatial_ref_sys WHERE srid = 4326

Si eso no devuelve ninguna fila, entonces este es definitivamente el problema. Puede leer más sobre cómo funciona esto en el Libro de cocina SpatiaLite sin embargo, hay cambios recientes que hacen que InitSpatialMetadata() sea más flexible (y un poco más complejo), así que revise el referencia de la función (asegurándose de que la versión de la referencia de la función coincide con la versión que está utilizando si no es la 4.1.0)

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