#1 Mon 04 March 2019 14:39
- dodo28
- Juste Inscrit !
- Date d'inscription: 5 Nov 2015
- Messages: 5
QGIS: Zoom sur la selection à l'ouverture python
Bonjour,
Pouvez vous m'aider sur ce problème?
Je désirerais qu'un fichier Qgis (carto_territoire2.qgs) s'ouvre directement sur la sélection d'une couche. la couche se nomme N_PLAN_CHASSE_028. Sur la version Qgis 3.2 cela marchais très bien, a partir de la version 3.4 cela ne fonctionnais plus.
Avec les versions supérieurs à 3.2 je suis obliger d'ouvrir le fichier, ouvrir la table attributaire puis sélectionner l'unique ligne puis zoomer sur la sélection.
Voici le code qui fonctionner sur la version 3.2 (le problème c'est que je n'y connais rien en Python, et ce code a été fait par une personne qui n'est plus joignable) . Faut il modifier le code ci dessous ou en refaire un à jour avec les version supérieures à 3.2.
Code:
from qgis.gui import QgsMapCanvas; from qgis.gui import * from qgis.core import QgsProject from qgis.core import * import qgis.utils registry = QgsProject.instance(); canvas = QgsMapCanvas() layer = registry.mapLayersByName( 'N_PLAN_CHASSE_028' )[0]; #layer = qgis.utils.iface.activeLayer() #canvas.setExtent(layer.extent()) canvas = qgis.utils.iface.mapCanvas() extent=layer.extent() canvas.setExtent(extent) canvas.refresh() def openProject(): pass def saveProject(): pass def closeProject(): pass
Merci pour votre aide.
Hors ligne
#2 Mon 04 March 2019 14:49
Re: QGIS: Zoom sur la selection à l'ouverture python
Bonjour,
Il ne faut pas ouublier de mettre le code au sein de openProject.
Voici qqch qui marche chez moi en QGIS 3.4 :
Code:
from qgis.gui import QgsMapCanvas; from qgis.gui import * from qgis.core import QgsProject from qgis.core import * import qgis.utils def zoomToLayer(layerName) : registry = QgsProject.instance(); canvas = QgsMapCanvas() layer = registry.mapLayersByName( layerName )[0] #layer = qgis.utils.iface.activeLayer() #canvas.setExtent(layer.extent()) canvas = qgis.utils.iface.mapCanvas() extent=layer.extent() canvas.setExtent(extent) canvas.refresh()
def openProject():
zoomToLayer('ma_couche')
pass
def saveProject():
pass
def closeProject():
pass
geodata au cerema et petits billets en géomatique
Hors ligne
#3 Tue 05 March 2019 09:30
- dodo28
- Juste Inscrit !
- Date d'inscription: 5 Nov 2015
- Messages: 5
Re: QGIS: Zoom sur la selection à l'ouverture python
Bonjour,
Merci pour votre aide.
J'ai essayé votre code il marche très bien sur la version 3.2 mais sur les poste ou il y a une version 3.4 et 3.6 cela ne fonctionne pas, j'ai l'impression que le code ne s'exécute pas à l'ouverture du fichier. Y a t il une option pour activer les macros au démarrage?
De même sur les versions 3.4 et 3.6, j'ai un message qui apparait à l'ouverture (voulez vous enregistrer le projet courant?) ce message ne parait pas sur les versions 3.2.
Voici mon code :
Code:
from qgis.gui import QgsMapCanvas; from qgis.gui import * from qgis.core import QgsProject from qgis.core import * import qgis.utils def zoomToLayer(N_PLAN_CHASSE_028) : registry = QgsProject.instance(); canvas = QgsMapCanvas() layer = registry.mapLayersByName( 'N_PLAN_CHASSE_028' )[0] #layer = qgis.utils.iface.activeLayer() #canvas.setExtent(layer.extent()) canvas = qgis.utils.iface.mapCanvas() extent=layer.extent() canvas.setExtent(extent) canvas.refresh() def openProject(): zoomToLayer('N_PLAN_CHASSE_028') pass def saveProject(): pass def closeProject(): pass
En mettant à jour la version 3.2 j'ai du désactiver quelques choses ou j'ai oublié de faire une manipulation.
Merci pour votre aide
Hors ligne
#4 Wed 06 March 2019 10:21
- lylambda
- Participant actif
- Date d'inscription: 31 Aug 2016
- Messages: 127
Re: QGIS: Zoom sur la selection à l'ouverture python
Bonjour,
Bonjour, la macro suivante me permet l'ouverture d'un projet sur une emprise définie correspondant à une couche spécifique d'un projet. Elle est valable sur QGIS 3.4.
En préalable : activer les macros sur le projet QGis : Préférences > Options > Général > Activer les macros
Puis, aller dans : Projet > Propriétés du projet > Macros
Macro à insérer (en adaptant le chemin de data_source):
Code:
from qgis.PyQt.QtCore import * from qgis.PyQt.QtGui import * from qgis.core import * from PyQt5 import QtCore from qgis.PyQt.QtWidgets import QMessageBox from qgis.utils import iface def setExtentFromLayer(myLayer) : cnvs = iface.mapCanvas() cnvs.setExtent(myLayer.extent()) data_source="CHEMIN/DE/LA/COUCHE/SUR/LAQUELLE/LE/PROJET/DOIT/ZOOMMER/AU/LANCEMENT" layer_name="myLayer" provider_name="ogr" layer = QgsVectorLayer(data_source, layer_name, provider_name) #QMessageBox.information(None,"information:",str(layer)) def openProject(): if not layer.isValid(): QMessageBox.information(None,"information:","Layer failed to load!") else: setExtentFromLayer(layer) def saveProject(): pass def closeProject(): pass
Hors ligne