#1 Tue 17 March 2020 22:34
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1052
QGIS: Export d'un atlas a partir des geosignets
Bonjour à tous,
Tout est dans le titre ! Ca me semble pourtant évident de pouvoir le faire.... Mais pas si sûr que ce soit faisable.
J'imagine que je ne suis pas le seul à m'être posé la question.
Si jamais quelqu'un a une piste je suis preneur.
Hors ligne
#2 Wed 18 March 2020 08:35
Re: QGIS: Export d'un atlas a partir des geosignets
Un peu de code python à exécuter depuis la console :
Code:
# Import des modules utilisés dans le script from PyQt5.QtCore import QVariant from qgis.core import ( QgsProject, QgsVectorLayer, QgsField, QgsGeometry, QgsFeature ) # Récupération de l'instance du projet p = QgsProject.instance() # Récupération de l'instance du gestionnaire de signets bm = p.bookmarkManager() # Création d'une couche temporaire (en mémoire) de polygones en Lambert 93 (EPSG:2154) tmp = QgsVectorLayer('Polygon?crs=epsg:2154', 'bookmarks', 'memory') tmpProvider = tmp.dataProvider() # Activation de l'édition pour la couche temporaire tmp.startEditing() # Ajout d'un champ attributaire de type texte pour stocker le nom # et le groupe des signets et le scr du projet tmpProvider.addAttributes([ QgsField('name', QVariant.String), QgsField('group', QVariant.String), QgsField('crs', QVariant.String) ]) tmp.updateFields() # Boucle sur les signets feat = QgsFeature() for b in bm.bookmarks(): # Ajout d'une géométrie correspondant à l'emprise du signet feat.setGeometry(QgsGeometry.fromRect(b.extent())) # Ajout du nom, du groupe et du crs du signet crs = b.extent().crs().authid() feat.setAttributes([ b.name(), b.group(), crs ]) # Ajout de l'entité à la couche temporaire b = tmp.addFeatures([feat]) # Mise à jour de l'emprise de la couche tmp.updateExtents() # Sauvegarde de la couche temporaire tmp.commitChanges() # Ajout de la couche temporaire au projet QgsProject.instance().addMapLayer(tmp)
Dernière modification par SIGEAL (Thu 02 April 2020 14:57)
Christophe Damour (SIGéal)
Hors ligne
#3 Thu 26 March 2020 23:09
- Julien81
- Participant assidu
- Lieu: Giroussens
- Date d'inscription: 14 Jan 2019
- Messages: 174
Re: QGIS: Export d'un atlas a partir des geosignets
Bonsoir
tout d'abord merci pour ce petit post ; cette possibilité m'intéresse mais je ne pratique pas encore python, j'ai donc copié collé assez bêtement votre code pour tenter depuis des géosignets importés dans mon projet (depuis un xml) de les transformer un couche temporaire pour Atlas ou autre.
Cependant j'ai un message d'erreur à l'issu de l'éxécution
Code:
Processing: Traceback (most recent call last): File "C:/OSGEO4~1/apps/qgis/./python/plugins\processing\script\ScriptEditorDialog.py", line 224, in runAlgorithm exec(self.editor.text(), _locals) File "", line 14, in NameError: name 'QgsField' is not defined
Comme je comprends pas grand chose j'aurai souhaité avoir des indications complémentaires sur le fonctionnement du script pour extraire les bookmarks et générer une couche et pourquoi chez moi j'ai ce problème ? cf.capture
Je suis sur QGIS 3.10 x64 win10
Merci d'avance pour votre attention
Hors ligne
#4 Fri 27 March 2020 07:57
Re: QGIS: Export d'un atlas a partir des geosignets
Bonjour,
J'ai testé le script également sous QGIS 3.10 x64 win10, je ne sais pas pourquoi il fonctionne chez moi et pas chez toi...
Tu peux cependant essayer d'ajouter QgsField dans les import de modules :
Code:
from qgis.core import ( QgsProject, QgsVectorLayer, QgsGeometry, QgsField )
Christophe Damour (SIGéal)
Hors ligne
#5 Fri 27 March 2020 09:38
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1052
Re: QGIS: Export d'un atlas a partir des geosignets
Merci SIGEAL. Je viens de tester et de mon côté ça marche ! Avec une bonne gestion des géosignets, ce méthodo peut être un bon outil de suivi.
Encore merci.
Au plaisir
Hors ligne
#6 Fri 27 March 2020 09:57
Re: QGIS: Export d'un atlas a partir des geosignets
Ravi que ce code te soit utile.
J'ai ajouté des commentaires dans le code initial, ainsi que l'import du module QsgField.
Christophe Damour (SIGéal)
Hors ligne
#7 Fri 27 March 2020 12:33
- Julien81
- Participant assidu
- Lieu: Giroussens
- Date d'inscription: 14 Jan 2019
- Messages: 174
Re: QGIS: Export d'un atlas a partir des geosignets
Bonjour Christophe merci pour ce retour! Désolé de revenir à la charge mais j'ai exactement cela comme install
Code:
Version de QGIS 3.10.2-A Coruña Révision du code d4cd3cfe5a Compilé avec Qt 5.11.2 Utilisant Qt 5.11.2 Compilé avec GDAL/OGR 3.0.3 Utilisé avec GDAL/OGR 3.0.4 Compilé avec GEOS 3.8.0-CAPI-1.13.1 Utilisé avec GEOS 3.8.0-CAPI-1.13.1 Compiled against SQLite 3.29.0 Running against SQLite 3.29.0 Version du client PostgreSQL 11.5 Version de SpatiaLite 4.3.0 Version de QWT 6.1.3 Version de QScintilla2 2.10.8 Compilé avec PROJ 6.3.0 Fonctionne avec PROJ Rel. 6.3.1, February 10th, 2020 OS Version Windows 10 (10.0)
Peut-être un pb de version QT chez moi? Toujours est il que ce doit être lié à mon environnent, j'ai beau repartir d'un projet neuf et de bookmarks créés pour tester je constate toujours ce même message ; y a t-il des logs accessibles pour comprendre mon problème?
Merci encore!
Hors ligne
#8 Fri 27 March 2020 12:40
Re: QGIS: Export d'un atlas a partir des geosignets
La seule différence que je vois entre ton environnement et le mien, c'est que tu as installé QGIS avec l'installateur réseau OsGeo4w, alors que j'utilise l'installateur indépendant, mais je ne vois pas bien pourquoi cela provoquerait ce type d'erreur.
Cela dit une désinstallation/réinstallation peut toujours être tentée...
Christophe Damour (SIGéal)
Hors ligne
#9 Fri 27 March 2020 13:21
- Julien81
- Participant assidu
- Lieu: Giroussens
- Date d'inscription: 14 Jan 2019
- Messages: 174
Re: QGIS: Export d'un atlas a partir des geosignets
Merci pour ta précision je vais faire un test via une install indépendante pour tester, et peut-être pour comprendre ce que j'ai pu louper via l'installateur réseau ou ce qui peut différer dans l'environnement si j'ai le temps^^
Bonne journée
Hors ligne
#10 Wed 01 April 2020 16:53
- guillaume
- Participant actif
- Date d'inscription: 5 Sep 2005
- Messages: 64
Re: QGIS: Export d'un atlas a partir des geosignets
Bonjour à tous,
je voulais tester ce script avec 3.10 mais j'ai un message d'erreur :
- lorsque je le lance directement depuis la fenêtre éditeur de scripts = geosignet1.png
- lorsque depuis cette même fenêtre, je souhaite l'enregistrer = geosignet2.png
Dans les 2 cas, il est question de QVariant' is not defined
Merci de votre aide
Cordialement
Guillaume
Hors ligne
#11 Wed 01 April 2020 17:12
Re: QGIS: Export d'un atlas a partir des geosignets
Bonjour,
Tu peux essayer d'ajouter cette ligne au début du script :
Code:
from PyQt5.QtCore import QVariant
Christophe Damour (SIGéal)
Hors ligne
#12 Thu 02 April 2020 08:12
- guillaume
- Participant actif
- Date d'inscription: 5 Sep 2005
- Messages: 64
Re: QGIS: Export d'un atlas a partir des geosignets
Merci SIGEAL,
le plantage se fait un peu plus loin !
" line 28, in NameError: name 'QgsFeature' is not defined "
Bonne journée
Hors ligne
#13 Thu 02 April 2020 08:31
Re: QGIS: Export d'un atlas a partir des geosignets
Même remède : ajouter QgsFeature dans la liste des imports.
Je ne comprends pas pourquoi ces imports ne sont pas nécessaires en mode console sur ma configuration...
J'ai mis à jour le script en début de discussion.
Christophe Damour (SIGéal)
Hors ligne
#14 Thu 02 April 2020 09:53
- Julien81
- Participant assidu
- Lieu: Giroussens
- Date d'inscription: 14 Jan 2019
- Messages: 174
Re: QGIS: Export d'un atlas a partir des geosignets
Trop bien!!
Merci à toi Christophe, effectivement cela résout aussi tout à fait mes problèmes sur mon install Osgeo4w de QGIS et je peux voir la couche temporaire créée à partir de mes géosignets.
Du coup je n'ai pas eu le temps de me pencher sur une installation indépendante de QGIS mais il doit y avoir une différence sur des paramètres par défaut dudit logiciel selon l'install et la conf concernant ces 'composants python importés' par défaut en mode console.
Un grand merci en tout cas, portez vous bien et passez une agréable journée.
Hors ligne
#15 Thu 02 April 2020 13:03
- Julien81
- Participant assidu
- Lieu: Giroussens
- Date d'inscription: 14 Jan 2019
- Messages: 174
Re: QGIS: Export d'un atlas a partir des geosignets
Puis-je être un tantinet embêtant sur un complément?
si je souhaite également par exemple rapatrier dans un champ 'epsgsrc' le code epsg des coordonnées utilisées pour la bbox/géosignet ;
de même comment puis je définir un champs 'group' et y intégrer la valeur Groupe qui a été saisie/renseignée pour chaque géosignets.
J'ai tenté naïvement d'intégrer après la ligne 24 :
Code:
# Ajout d'un champ attributaire de type texte pour stocker le nom des signets tmpProvider.addAttributes([QgsField('group', QVariant.String) ])
Puis après l'actuelle ligne 33 :
Code:
# Ajout du groupe du signet feat.setAttributes([b.group()])
Sans succès, étonnamment!!^^
Comment récupère-t-il dans ton script la valeur Name/Nom, peut-on faire de même avec cette valeur Groupe, car je crois que si je lui ai fait créer le champs dans la couche temp de destination, c'est pour la récupération de la valeur que je pêche? Il me sort une couche vide du coup, mais bien avec un champ group..
cordialement
Hors ligne
#16 Thu 02 April 2020 14:04
- guillaume
- Participant actif
- Date d'inscription: 5 Sep 2005
- Messages: 64
Re: QGIS: Export d'un atlas a partir des geosignets
Merci SIGEAL,
Cela fonctionne !
Hors ligne
#17 Thu 02 April 2020 14:48
Re: QGIS: Export d'un atlas a partir des geosignets
@Julien81 :
Les méthodes addAttributes et setAttributes prennent une liste en argument :
Code:
tmpProvider.addAttributes([ QgsField('name', QVariant.String), QgsField('group', QVariant.String), QgsField('crs', QVariant.String) ])
Code:
crs = QgsProject.instance().crs().authid() feat.setAttributes([ b.name(), b.group(), crs ])
J'ai mis aussi le code qui permet de récupérer le code du scr du projet (normalement celui qui a été utilisé lors de la création des signets).
Mieux, le scr du signet lui-même :
Code:
crs = b.extent().crs().authid()
Dernière modification par SIGEAL (Thu 02 April 2020 14:57)
Christophe Damour (SIGéal)
Hors ligne
#18 Thu 02 April 2020 15:01
Re: QGIS: Export d'un atlas a partir des geosignets
Pour aller plus loin :
https://qgis.org/pyqgis/master/
Christophe Damour (SIGéal)
Hors ligne
#19 Thu 02 April 2020 16:54
- Julien81
- Participant assidu
- Lieu: Giroussens
- Date d'inscription: 14 Jan 2019
- Messages: 174
Re: QGIS: Export d'un atlas a partir des geosignets
Excellent je te remercie pour le code et les explications, je vais aller voir cette doc de ce pas, même s'il faut que je vois d'abord quelques bases sur python que je n'ai pas!
Hors ligne
#20 Tue 07 April 2020 10:54
- guillaume
- Participant actif
- Date d'inscription: 5 Sep 2005
- Messages: 64
Re: QGIS: Export d'un atlas a partir des geosignets
Bonjour,
je voulais simplement rappeler que la version 3.10 de QGIS propose 2 nouveaux algorithmes :
- Convertir les signets spatiaux en couche,
- Convertir une couche en signets spatiaux.
Bonne journée
Hors ligne
#22 Mon 15 June 2020 19:45
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3927
Re: QGIS: Export d'un atlas a partir des geosignets
Bonjour,
Non, un algorithme de la boîte à outils Traitement: https://docs.qgis.org/3.10/fr/docs/user … s-to-layer
Hors ligne