[QGIS-Developer] Error changing the value of geometry using changeGeometryValues in SpatiaLite layer

Francisco Danubio Salas Rosette franksalas1965 at gmail.com
Sun Nov 7 18:28:19 PST 2021


Hi,

I am trying to update a geometry using changeGeometryValues, it works fine
when the layer is of type shp or geopakage, but when I use it in
SpatialLite layer it gives me the following error.

This is part of the code that I use. How can I solve this error?

patialLite layer it gives me the following error.

This is part of the code that I use. How can I solve this error?


feats1 = [ feat for feat in
QgsProject.instance().mapLayersByName('trapecio_lineal')[0].getFeatures()
]

feats2 = [ feat for feat in
QgsProject.instance().mapLayersByName('malezas_areal')[0].getFeatures()
]

tempLayer = QgsVectorLayer('Polygon?crs=EPSG:3795', 'templayer', 'memory')
dptemp = tempLayer.dataProvider()
feattemp = QgsFeature()
for feats_trapecio in feats1:
    geom1 = feats_trapecio.geometry()
    iter = feats_trapecio.geometry().vertices()
    listOfVertices = []
    while iter.hasNext():
        vertex = iter.next()
        listOfVertices.append([vertex.x(), vertex.y()])

    poligonotrapecio = listOfVertices

    points =[]

    for i in range(len(poligonotrapecio)):
        point=QgsPointXY(float(poligonotrapecio[i][0]),
float(poligonotrapecio[i][1]))
        points.append(point)

    polig = QgsGeometry.fromPolygonXY([points])
    feattemp.setGeometry(polig)

    tempLayer.dataProvider().addFeatures([feattemp])
    tempLayer.commitChanges()
    geomtemplayer = feattemp.geometry()

    for feats in feats2:
        geom2 = feats.geometry()
        fid = feats.id()

        if geomtemplayer.intersects(geom2):

            geom4 = geom2.intersection(geomtemplayer)

            QgsProject.instance().mapLayersByName('malezas_areal')[0].dataProvider().changeGeometryValues({fid:
geom4})

QgsProject.instance().mapLayersByName('malezas_areal')[0].commitChanges()
QgsProject.instance().addMapLayer(tempLayer)

QgsProject.instance().removeMapLayer(tempLayer.id())













This is the error that appears in the Qgis panel:

Error de SQLite: areas_verdes_y_terrenos.malezas_areal.GEOMETRY violates
Geometry constraint [geom-type or SRID not allowed] SQL: UPDATE
"areas_verdes_y_terrenos.malezas_areal" SET "geometry"=GeomFromWKB(?, 3795)
WHERE "ogc_fid"=?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20211107/3f05c245/attachment-0001.html>


More information about the QGIS-Developer mailing list