#1 Sat 25 April 2020 16:46
- jportemer
- Juste Inscrit !
- Date d'inscription: 25 Aug 2014
- Messages: 7
QGIS/pyQgis: Copier .shp et Editer la copie
Bonjour à tous !
Je débute en programmation sous QGIS. Je cherche à copier un shapefile existant et à éditer la copie.
Cela me paraissait simple de prime abord mais à l'usage j'obtiens quand même une erreur ; apparemment la copie est verrouillée en édition.
Voici mon code, exécuté depuis la console QGIS :
Code:
path_in = r" ... " path_out = r" ... " QgsVectorFileWriter.deleteShapeFile(path_out) layer_in = QgsVectorLayer(path_in) QgsVectorFileWriter.writeAsVectorFormat(layer_in, path_out,"utf-8",driverName="ESRI Shapefile") layer_out = QgsVectorLayer(path_out) with edit(layer_out): [...]
Et l'erreur que j'obtiens :
Code:
Traceback (most recent call last): File "C:\PROGRA~1\QGIS3~1.4\apps\Python37\lib\code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> File "<string>", line 20, in <module> File "C:/PROGRA~1/QGIS3~1.4/apps/qgis-ltr/./python\qgis\core\additions\edit.py", line 38, in __enter__ assert self.layer.startEditing() AssertionError
Désolé si la question a déjà été posée, je dois sûrement manquer quelque chose d'évident. Vous avez des idées ?
Merci beaucoup pour votre aide !
Jean
Hors ligne
#2 Mon 27 April 2020 14:50
- Njoy
- Participant actif
- Lieu: Lyon
- Date d'inscription: 29 Nov 2018
- Messages: 89
Re: QGIS/pyQgis: Copier .shp et Editer la copie
Bonjour,
Quelle est ta version de qgis ?
J'ajoute les couches de cette manière moi :
layer_out = iface.addVectorLayer(path_out, "nom du calque", "ogr")
L'erreur est dans le bout de code que tu as ajouté ? Ou peut être une erreur dans ta fonction edit ?
Hors ligne
#3 Wed 29 April 2020 00:02
- jportemer
- Juste Inscrit !
- Date d'inscription: 25 Aug 2014
- Messages: 7
Re: QGIS/pyQgis: Copier .shp et Editer la copie
Hello,
Merci pour ta réponse, je suis sur QGIS 3.4.12.
Le problème venait apparemment de QgsVectorFileWriter.deleteShapeFile, qui ne supprimait pas tous les fichiers du shapefile (.shp et .dbf).
J'ai également remplacé ma ligne par la tienne : layer_out = iface.addVectorLayer(path_out, "nom du calque", "ogr")
Cela fonctionne ainsi très bien !
Merci beaucoup.
Jean
Hors ligne