[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