-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlabels.py
More file actions
95 lines (81 loc) · 2.92 KB
/
Copy pathlabels.py
File metadata and controls
95 lines (81 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# -*- coding: utf-8 -*-
"""
labels.py — Extraction de la configuration d'étiquetage (labeling) QGIS d'une couche,
pour reproduire l'affichage des étiquettes côté Leaflet (tooltips permanents).
"""
import logging
logger = logging.getLogger(__name__)
def extraire_etiquettes(layer):
"""
Extrait la configuration d'étiquetage QGIS (labeling) d'une couche,
si l'étiquetage est activé. Retourne un dict exploitable côté Leaflet
(champ, taille, couleur, police, tampon/buffer) ou None si pas d'étiquette.
"""
try:
if not layer.labelsEnabled():
return None
labeling = layer.labeling()
if not labeling:
return None
# On essaie de lire les paramètres du premier "settings" disponible
settings = None
try:
settings = labeling.settings()
except Exception:
# Rule-based labeling : on prend la première règle
try:
root = labeling.rootRule()
enfants = root.children()
if enfants:
settings = enfants[0].settings()
except Exception:
settings = None
if not settings:
return None
champ_label = settings.fieldName
text_format = settings.format()
couleur = "#000000"
taille = 10
police = "sans-serif"
# Données par défaut pour le tampon (Buffer)
tampon_actif = False
tampon_couleur = "#ffffff"
tampon_taille = 1.0
try:
c = text_format.color()
if c.isValid():
couleur = c.name()
taille = text_format.size()
if taille <= 0:
taille = 10
# Police de caractères
font = text_format.font()
if font and font.family():
police = font.family()
# Extraction du Tampon (Buffer)
buffer_settings = text_format.buffer()
if buffer_settings and buffer_settings.enabled():
tampon_actif = True
bc = buffer_settings.color()
if bc.isValid():
tampon_couleur = bc.name()
# Taille du tampon ramenée à une valeur propre pour le CSS web
sz = buffer_settings.size()
tampon_taille = round(sz, 1) if sz > 0 else 1.0
except Exception as exc:
logger.debug(
"Impossible de lire le format du texte de l'étiquette : %s",
exc,
)
return {
"champ": champ_label,
"couleur": couleur,
# conversion approx pt -> px lisible web
"taille": round(taille * 1.4, 1),
"police": police,
"tampon_actif": tampon_actif,
"tampon_couleur": tampon_couleur,
"tampon_taille": tampon_taille,
}
except Exception:
return None