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?
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"=?