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 sa 21ème année, l’association GeoRezo a toujours besoin de vous !

10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …

Faire un don 

Retrouver nos membres bienfaiteurs

#1 Thu 17 October 2024 22:57

liege67
Participant assidu
Lieu: Liège
Date d'inscription: 10 Apr 2014
Messages: 176

QGIS 3.38: mise en page centree sur objet selectionne sans atlas

bonjour

j'aimerais imprimer une mise en page avec table attributaire, sur l'objet courant sélectionné, et sans mettre en place un atlas de plans
est-ce possible ?

merci, jean marc

Hors ligne

 

#2 Sat 19 October 2024 14:23

arnaudp
Participant occasionnel
Date d'inscription: 20 Sep 2020
Messages: 36

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

Bonjour,

Dans le filtre de votre table attributaire, vous pouvez cocher la case Filtrer avec et ajouter le filtre :

Code:

 is_selected( @feature)

Cela ne vous affichera que les éléments sélectionnés.

Bonne journée.

Hors ligne

 

#3 Tue 22 October 2024 20:57

Tixi
Participant actif
Date d'inscription: 6 Jun 2022
Messages: 129

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

Et en faisant le x de l entite courante, - quelque chose pour le xmin, + quelque chose pour le xmax,
ce en fonction du niveau de zoom que vous voulez et la taille de votre fenetre
Et la meme chose pour y?

Hors ligne

 

#4 Wed 27 November 2024 18:47

liege67
Participant assidu
Lieu: Liège
Date d'inscription: 10 Apr 2014
Messages: 176

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

arnaudp a écrit:

Bonjour,

Dans le filtre de votre table attributaire, vous pouvez cocher la case Filtrer avec et ajouter le filtre :

Code:

 is_selected( @feature)

Cela ne vous affichera que les éléments sélectionnés.

Bonne journée.


merci

Hors ligne

 

#5 Wed 27 November 2024 21:57

liege67
Participant assidu
Lieu: Liège
Date d'inscription: 10 Apr 2014
Messages: 176

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

bonjour

Tixi a écrit:

Et en faisant le x de l entite courante, - quelque chose pour le xmin, + quelque chose pour le xmax,
ce en fonction du niveau de zoom que vous voulez et la taille de votre fenetre
Et la meme chose pour y?


j'ai préparé ces formules que j'ai inséré dans les paramètres de l'emprise (pas de message d'erreur - voir la PJ) --> cadrer sur l'objet sélectionné (un point) et reculer de 100 m

xmin(bounds(overlay_intersects(layer:='Mairies', expression:='is_selected(@feature)'))) - 100
ymin(bounds(overlay_intersects(layer:='Mairies', expression:='is_selected(@feature)'))) - 100
xmax(bounds(overlay_intersects(layer:='Mairies', expression:='is_selected(@feature)'))) + 100
ymax(bounds(overlay_intersects(layer:='Mairies', expression:='is_selected(@feature)'))) + 100

la table attributaire se met bien à jour avec les valeurs de la sélection courante, mais je n'ai pas le cadrage dans la carte, qui s'affiche avec une échelle qui n'a rien à voir avec ce qui est attendu (une grande échelle)

bref ... je n'avance guère :-)

jean marc

Dernière modification par liege67 (Wed 27 November 2024 22:05)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#6 Thu 28 November 2024 14:38

anthony.v
Participant occasionnel
Date d'inscription: 13 Apr 2023
Messages: 29

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

Bonjour,

Essayez de jeter un oeil du coté de la fonction boundingBoxOfSelected : https://qgis.org/pyqgis/master/core/Qgs … OfSelected
Cette fonction python retourne l'emprise d'un sélection.

Vous pouvez l'utiliser comme ci-dessous dans l'éditeur de fonction :

Code:

def getxmax(feature, parent):
    return iface.activeLayer().boundingBoxOfSelected().xMaximum()

Puis appeler cette nouvelle fonction via l'onglet expression :

Code:

getxmax() - 100

ça semble fonctionner avec une seule couche, je n'ai pas testé quand il y en a plusieurs (il faudra peut-être remplacer le activeLayer par votre couche Mairies)

Dernière modification par anthony.v (Thu 28 November 2024 16:19)

Hors ligne

 

#7 Thu 28 November 2024 14:58

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 1126

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

Je tenterais autre chose :
- Filtrer les entités sélectionnées dans l'export de la page en fonction de la sélection ou non de l'entité (via les propriétés de la page). cf : https://gis.stackexchange.com/questions … nformation
- Et dans l'emprise de la carte, mettre les expressions que vous connaissez sans

Code:

expression:='is_selected(@feature)

soit

Code:

ymin(bounds(overlay_intersects(layer:='Mairies'))) - 100

Ca fonctionne ?

Hors ligne

 

#8 Fri 29 November 2024 10:15

liege67
Participant assidu
Lieu: Liège
Date d'inscription: 10 Apr 2014
Messages: 176

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

anthony.v a écrit:

Bonjour,

Essayez de jeter un oeil du coté de la fonction boundingBoxOfSelected : https://qgis.org/pyqgis/master/core/Qgs … OfSelected
Cette fonction python retourne l'emprise d'un sélection.

Vous pouvez l'utiliser comme ci-dessous dans l'éditeur de fonction :

Code:

def getxmax(feature, parent):
    return iface.activeLayer().boundingBoxOfSelected().xMaximum()

Puis appeler cette nouvelle fonction via l'onglet expression :

Code:

getxmax() - 100

ça semble fonctionner avec une seule couche, je n'ai pas testé quand il y en a plusieurs (il faudra peut-être remplacer le activeLayer par votre couche Mairies)


bonjour

j'ai une erreur sur l'insertion du code : expression invalide (voir illus)

jean marc

Dernière modification par liege67 (Fri 29 November 2024 10:32)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#9 Fri 29 November 2024 11:06

anthony.v
Participant occasionnel
Date d'inscription: 13 Apr 2023
Messages: 29

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

Il vous faut créer une nouvelle fonction pour chaque variable à récupérer (xmin, xmax,...) avec l'icone "+" situé en bas de la fenêtre.
Vous pourrez ensuite appeler chacune d'elles via l'onglet expression (getxmin(), getxmax(),...)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#10 Fri 29 November 2024 12:22

liege67
Participant assidu
Lieu: Liège
Date d'inscription: 10 Apr 2014
Messages: 176

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

anthony.v a écrit:

Il vous faut créer une nouvelle fonction pour chaque variable à récupérer (xmin, xmax,...) avec l'icone "+" situé en bas de la fenêtre.
Vous pourrez ensuite appeler chacune d'elles via l'onglet expression (getxmin(), getxmax(),...)


j'ai une erreur sur iface, que ce soit avec iface.activeLayer() ou iface.Mairies

from qgis.core import *
from qgis.gui import *

@qgsfunction(group='Custom', referenced_columns=[])
def getxmax(feature, parent):
    return iface.Mairies().boundingBoxOfSelected().xMaximum()
   


    Erreur d'évaluation: name 'iface' is not defined:
Traceback (most recent call last):
  File "C:\PROGRA~1/QGIS34~1.1/apps/qgis/./python\qgis\core\additions\qgsfunction.py", line 74, in func
    return self.function(*values, **kwvalues)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "", line 6, in getxmax
NameError: name 'iface' is not defined

Hors ligne

 

#11 Fri 29 November 2024 12:50

liege67
Participant assidu
Lieu: Liège
Date d'inscription: 10 Apr 2014
Messages: 176

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

avec une IA, j'ai corrigé le code comme suit, ... il n'y a plus de messages d'erreur mais cela ne marche pas mieux

from qgis.core import *
from qgis.gui import *

@qgsfunction(group='Custom', referenced_columns=[])
def getxmax2(feature, parent):
    layer = QgsProject.instance().mapLayersByName('Mairies')[0]
    if not layer:
        return None
    if not layer.selectedFeatureCount():
        return None
   
    # Obtenir la bounding box des entités sélectionnées
    bbox = layer.boundingBoxOfSelected()
    if bbox.isEmpty():
        return None
   
    return bbox.xMaximum()


le mode "atlas de plans" est maintenant actif, la couche de couvertures est "Mairie", et le filtre est  is_selected(@feature)')
la couche active est bien Mairies, et j'ai un object sélectionné, mais à l'ouverture de la mise en page le cadrage set toujours sur le cadrage initial, celui de la création de la mise en page

jean marc

Hors ligne

 

#12 Fri 29 November 2024 14:08

anthony.v
Participant occasionnel
Date d'inscription: 13 Apr 2023
Messages: 29

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

Et comme ça ?

Code:

from qgis.core import *
from qgis.gui import *
from qgis.utils import iface

@qgsfunction(args='auto', group='Custom', referenced_columns=[])
def getxmax(feature, parent):
    layer = QgsProject.instance().mapLayersByName("Mairies")[0]
    iface.setActiveLayer(layer)
    return layer.boundingBoxOfSelected().xMaximum()

"from qgis.utils import iface" pour résoudre l'erreur "name 'iface' is not defined:"

Dernière modification par anthony.v (Fri 29 November 2024 14:11)

Hors ligne

 

#13 Fri 29 November 2024 14:27

liege67
Participant assidu
Lieu: Liège
Date d'inscription: 10 Apr 2014
Messages: 176

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

Super ça marche ;-)

merci

la cerise sur la crème fraiche du gâteau serait qu'il y ait un refresh automatique sur le cadrage courant quand on ouvre la mise en page

Hors ligne

 

#14 Fri 29 November 2024 18:45

liege67
Participant assidu
Lieu: Liège
Date d'inscription: 10 Apr 2014
Messages: 176

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

j'ai trouvé la cerise

layer = QgsProject.instance().mapLayersByName("NomDeVotreCouche")[0]
layer.triggerRepaint()

Hors ligne

 

#15 Wed 04 December 2024 08:37

anthony.v
Participant occasionnel
Date d'inscription: 13 Apr 2023
Messages: 29

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

liege67 a écrit:

j'ai trouvé la cerise

layer = QgsProject.instance().mapLayersByName("NomDeVotreCouche")[0]
layer.triggerRepaint()


A quel endroit avez-vous placez ces lignes de code ?

Hors ligne

 

#16 Fri 06 December 2024 13:29

liege67
Participant assidu
Lieu: Liège
Date d'inscription: 10 Apr 2014
Messages: 176

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

anthony.v a écrit:

A quel endroit avez-vous placez ces lignes de code ?


bonjour  Anthony
voici le code qui inclut le refresh

jean marc


Code:

def open_layout(layout_name):
    project = QgsProject.instance()
    layout_manager = project.layoutManager()
    layout = layout_manager.layoutByName(layout_name)
    if layout:
        iface.openLayoutDesigner(layout)
        layout.refresh()  # Forcer le rafraîchissement de la mise en page
    else:
        iface.messageBar().pushMessage("Erreur", "Mise en page non trouvée", level=Qgis.Critical)

Hors ligne

 

#17 Fri 06 December 2024 14:29

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 1126

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

liege67, je pense que anthony.v demandait où dans Qgis avez saisi ces lignes de code ?

Hors ligne

 

#18 Fri 06 December 2024 14:31

liege67
Participant assidu
Lieu: Liège
Date d'inscription: 10 Apr 2014
Messages: 176

Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas

GlaDal a écrit:

liege67, je pense que anthony.v demandait où dans Qgis avez saisi ces lignes de code ?


ces lignes de code font partie d'un script pyhton

jm

Hors ligne

 

Pied de page des forums

Powered by FluxBB