banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Pour sécuriser votre compte sur les forums du GeoRezo, nous demandons de changer votre mot de passe.

Vous allez recevoir un message pour effectuer ce changement de mot de passe.

Merci de bien respecter les règles préconisées.

#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

MathieuR
Membre
Lieu: aix-en-provence
Date d'inscription: 16 Feb 2009
Messages: 1690
Site web

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

 

Pied de page des forums

Powered by FluxBB