Pages: 1
- Sujet précédent - QGIS 2.14 & Python: Afficher des étiquettes selon une plage d'échelle - Sujet suivant
#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 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
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
Pages: 1
- Sujet précédent - QGIS 2.14 & Python: Afficher des étiquettes selon une plage d'échelle - Sujet suivant