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 …
Retrouver nos membres bienfaiteurs
Pages: 1
- Sujet précédent - QGIS 3.38: mise en page centree sur objet selectionne sans atlas - Sujet suivant
#1 Thu 17 October 2024 22:57
- liege67
- Participant assidu
- Lieu: Liège
- Date d'inscription: 10 Apr 2014
- Messages: 168
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: 35
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: 128
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: 168
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.
merci
Hors ligne
#5 Wed 27 November 2024 21:57
- liege67
- Participant assidu
- Lieu: Liège
- Date d'inscription: 10 Apr 2014
- Messages: 168
Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas
bonjour
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)
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: 1111
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: 168
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)
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)
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(),...)
Hors ligne
#10 Fri 29 November 2024 12:22
- liege67
- Participant assidu
- Lieu: Liège
- Date d'inscription: 10 Apr 2014
- Messages: 168
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(),...)
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: 168
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: 168
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: 168
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
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 Hier 13:29
- liege67
- Participant assidu
- Lieu: Liège
- Date d'inscription: 10 Apr 2014
- Messages: 168
Re: QGIS 3.38: mise en page centree sur objet selectionne sans atlas
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 Hier 14:29
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1111
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 Hier 14:31
- liege67
- Participant assidu
- Lieu: Liège
- Date d'inscription: 10 Apr 2014
- Messages: 168
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 ?
ces lignes de code font partie d'un script pyhton
jm
Hors ligne
Pages: 1
- Sujet précédent - QGIS 3.38: mise en page centree sur objet selectionne sans atlas - Sujet suivant