Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 06 July 2016 16:21

Cerise45
Participant actif
Date d'inscription: 31 Aug 2011
Messages: 132

QGIS 2.14 & Python: Afficher des étiquettes selon une plage d'échelle

Bonjour,

J'ai un problème avec l'utilisation de la classe https://qgis.org/api/classQgsPalLayerSettings.html

Je veux l'utiliser pour faire afficher des étiquettes mais seulement entre deux niveaux de zoom.
Ainsi, j'utilise les paramètres MinScale & MaxScale.

Or, je n'arrive pas à déterminer la valeur que je veux leur donner, quelle que soit les valeurs que j'introduise, les étiquettes s'affichent à tous les niveaux de zoom.

Je voudrais que mes étiquettes soient visibles entre les échelles suivantes :
1:15 000 et 1:900 000

J'avais donc essayé plusieurs choses (bien sûr, toutes ces solutions pas en même temps) mais qui n'ont pas été concluantes..

Code:

        layer.MinScale = 0
        layer.MaxScale = 1000000

        layer.MinScale = 15000
        layer.MaxScale = 900000

        layer.MinScale = 0.000066
        layer.MaxScale = 0.0000011

        layer.MinScale = -15000
        layer.MaxScale =-900000

Est-ce que quelqu'un saurait mieux comment déterminer ces valeurs ?

Merci beaucoup

Hors ligne

 

#2 Wed 06 July 2016 23:15

michel56
Participant assidu
Lieu: Lorient
Date d'inscription: 14 Jul 2012
Messages: 474

Re: QGIS 2.14 & Python: Afficher des étiquettes selon une plage d'échelle

si tu mets seulement:

Code:

 
 layer.MinScale 15 000
 layer.MaxScale 900 000

ou la virgule à la fin des lignes

Code:

 
 layer.MinScale 15 000,
 layer.MaxScale 900 000,

Dernière modification par michel56 (Wed 06 July 2016 23:38)


Opérateur cartographique & DAO & PHP.

Hors ligne

 

#3 Thu 07 July 2016 12:44

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: QGIS 2.14 & Python: Afficher des étiquettes selon une plage d'échelle

Bonjour,

voici un bout de code qui vous permettra de vous dépatouiller :

Code:

layer = iface.activeLayer()
pal_layer = QgsPalLayerSettings()
#pour lire les informations du layer
pal_layer.readFromLayer(layer)
#pour activer la visibilité selon l'échelle
pal_layer.scaleVisibility = True
#pour ajuster les zooms
pal_layer.scaleMax = 100000
pal_layer.scaleMin = 15000
#pour enregistrer les informations dans le layer
pal_layer.writeToLayer(layer)

Cordialement,

Dernière modification par lejedi76 (Thu 07 July 2016 12:46)

Hors ligne

 

#4 Thu 07 July 2016 15:10

Cerise45
Participant actif
Date d'inscription: 31 Aug 2011
Messages: 132

Re: QGIS 2.14 & Python: Afficher des étiquettes selon une plage d'échelle

Merci beaucoup, j'ai bien essayé les deux solutions mais sans succès...

C'est seulement layer.MinScale et layer.MaxScale qui ne fonctionne pas dans ma fonction car par exemple, lorsque je met layer.enabled = False, mes étiquettes ne s'affichent pas (comme demandé dans la fonction).

(à noter j'ai modifié ma variable layer par le nom label... ce qui est beaucoup plus logique !)

D'autres idées pour me débloquer ?
Je suis en version 2.14.3 de QGIS et 2.7 de python.

Code:

    def applyLabellingB2B(self, vectorLayer):
        label = QgsPalLayerSettings()
        label.readFromLayer(vectorLayer)
        label.enabled = True
        label.fieldName = 'REV_B2B'
        label.MinScale = 15000
        label.MaxScale = 900000
        label.writeToLayer(vectorLayer)
        self.iface.mapCanvas().refresh()

Dernière modification par Cerise45 (Thu 07 July 2016 15:10)

Hors ligne

 

#5 Thu 07 July 2016 15:35

Cerise45
Participant actif
Date d'inscription: 31 Aug 2011
Messages: 132

Re: QGIS 2.14 & Python: Afficher des étiquettes selon une plage d'échelle

Merci beaucoup lejedi76 !

Il me manquait effectivement la fameuse ligne pal_layer.scaleVisibility = True car je n'avais pas compris que c'était un booléen qu'il fallait entrer...

Dernière modification par Cerise45 (Thu 07 July 2016 15:37)

Hors ligne

 

#6 Thu 07 July 2016 18:50

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3943

Re: QGIS 2.14 & Python: Afficher des étiquettes selon une plage d'échelle

Bonjour,
un truc qui m'interpelle est que là où Anakin smile utilise scaleMax, vous utilisez MaxScale. Je me trompe peut-être mais il serait étonnant que les devs aient choisi ces deux écritures pour la même variable.

Hors ligne

 

#7 Fri 08 July 2016 02:16

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: QGIS 2.14 & Python: Afficher des étiquettes selon une plage d'échelle

Bonsoir,
Je confirme, je pense qu'il a une confusion entre les attributs scaleMax et scaleMin de la classe QgsPalLayerSettings et les fonctions minimumScale et maximumScale de la classe QgsMapLayer qui permettent de d avoir les plages de visibilité du layer.
Bonne remarque Carlos smile

Hors ligne

 

#8 Fri 08 July 2016 12:58

Cerise45
Participant actif
Date d'inscription: 31 Aug 2011
Messages: 132

Re: QGIS 2.14 & Python: Afficher des étiquettes selon une plage d'échelle

J'avais effectivement remarqué sans m'y pencher plus que ça jusque là.

La proposition de lejedi76, ie scaleMin et scaleMax fonctionne alors que MinScale et MaxScale (ma proposition de départ) ne fonctionnent pas !

J'ai bien du mal à comprendre cela étant donné la doc... https://qgis.org/api/classQgsPalLayerSettings.html

J'ai du louper quelque chose !

Dernière modification par Cerise45 (Fri 08 July 2016 12:58)

Hors ligne

 

#9 Sat 09 July 2016 20:34

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: QGIS 2.14 & Python: Afficher des étiquettes selon une plage d'échelle

Bonsoir,

en fait si tu fais références au MinScale et MaxScale de DataDefinedProperties, c'est quand tu définis les propriétés de ton étiquetage en fonction de tes sources de données.
C'est encore autre chose.

Bonne soirée,

Hors ligne

 

Pied de page des forums

Powered by FluxBB