#1 Thu 10 April 2014 14:55
- Hydrolithe
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Apr 2010
- Messages: 223
QGIS 2.2: Etiquette multi-lignes sur un seul champ
Bonjour,
J'ai parcouru plusieurs post concernant l'étiquetage multi-lignes. J'arrive bien à créer une étiquette sur plusieurs lignes à partir de plusieurs champs.
Mais je n'arrive pas à créer une étiquette multi-ligne sur un seul champ : j'ai un champ ID qui contient des noms de zones assez longs en terme de caractères (> 50 caractères) et je cherche donc à adapter mes étiquettes en les affichant sur plusieurs lignes.
Existe-t-il une autres solution que d'insérer un caractère générique (* par exemple) dans mon champ et d'activer l'option "Retour à la ligne sur le caractère" ? Car je vais me retrouver avec des * dans le nom des champs et j'utilise ces données attributaires dans d'autres applications qui ne vont pas interpréter le caractère * de la même façon.
Je vous remercie d'avance, Pierre
Hors ligne
#2 Thu 10 April 2014 16:38
Re: QGIS 2.2: Etiquette multi-lignes sur un seul champ
Bonjour,
J'ai parcouru plusieurs post concernant l'étiquetage multi-lignes. J'arrive bien à créer une étiquette sur plusieurs lignes à partir de plusieurs champs.
Mais je n'arrive pas à créer une étiquette multi-ligne sur un seul champ : j'ai un champ ID qui contient des noms de zones assez longs en terme de caractères (> 50 caractères) et je cherche donc à adapter mes étiquettes en les affichant sur plusieurs lignes.
Existe-t-il une autres solution que d'insérer un caractère générique (* par exemple) dans mon champ et d'activer l'option "Retour à la ligne sur le caractère" ? Car je vais me retrouver avec des * dans le nom des champs et j'utilise ces données attributaires dans d'autres applications qui ne vont pas interpréter le caractère * de la même façon.
Je vous remercie d'avance.
Pierre
Une expression régulière par exemple. Celle ci coupe tous les 14 caractères, mais sans couper un mot pour que ça reste lisible:
Code:
regexp_replace( monchamp, '(.{14}[^\\s.]*)\\s', '\\1\n')
ne me demandez pas de l'expliquer, je crois que je n'arriverais jamais à écrire une expression régulière moi même... :-(
Régis
Hors ligne
#3 Thu 10 April 2014 16:55
- Hydrolithe
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Apr 2010
- Messages: 223
Re: QGIS 2.2: Etiquette multi-lignes sur un seul champ
Merci Haubourg pour cette réponse qui fonctionne bien.
Je pensais qu'il y avait quelque chose de plus simple comme ce qui existe sous ArcGIS par exemple mais je m'en contenterai en l'adaptant selon mes besoins.
Ca me fera une bonne excuse pour découvrir les expressions régulières.
Pierre
Hors ligne
#5 Fri 11 April 2014 11:33
Re: QGIS 2.2: Etiquette multi-lignes sur un seul champ
Bonjour,
Ça me fera une bonne excuse pour découvrir les expressions régulières.
Des bonnes excuses pour s'intéresser aux expressions régulières il y en a beaucoup ;-)
On s'éloigne du sujet du forum mais voici pour les curieux :
dans "mon champ" je cherche la chaine de caractères correspondant au motif suivant :
. -> n'importe quel caractère
{14} -> répété précisément 14 fois
[^\\s.] -> suivi de tout sauf ^ un espace \s
* -> répété n * fois
\\s -> suivi d'un espace \s
et je la remplace par
'\\1 -> la première chaine capturée (correspondant au motif ci-dessus décrit entre les parenthèses)
\n' -> Par un saut de ligne \n
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#6 Mon 14 April 2014 04:20
- Leyan
- Participant assidu
- Date d'inscription: 14 Oct 2013
- Messages: 160
Re: QGIS 2.2: Etiquette multi-lignes sur un seul champ
Si tu as accès à la version de développement, il y a la fonction wordwrap qui a été ajoutée récemment et qui permet de faire exactement cela: voir https://github.com/qgis/QGIS/pull/1181 pour un exemple d'utilisation.
Hors ligne
#7 Mon 14 April 2014 09:52
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3885
Re: QGIS 2.2: Etiquette multi-lignes sur un seul champ
Bonjour,
Testé et approuvé, Leyan!
C'est nettement beaucoup plus simple que de devoir taper l'expression regexp_replace (que j'ai testée sans succès d'ailleurs )
Hors ligne
#8 Mon 14 April 2014 16:05
Re: QGIS 2.2: Etiquette multi-lignes sur un seul champ
Bonjour,
Testé et approuvé, Leyan!
C'est nettement beaucoup plus simple que de devoir taper l'expression regexp_replace (que j'ai testée sans succès d'ailleurs)
Je viens de tester, ça marche très bien pour moi cette expression régulière. Peut être une petite erreur de frappe ?
En tout cas, en attendant wordwrap, pour ma part, ça me convient parfaitement (j'avais cherché une solution à ce problème il y a un moment).
EDIt : Pour référence (anglais) : https://docs.python.org/2/library/re.html
Dernière modification par Robin (Mon 14 April 2014 16:15)
Hors ligne
#9 Mon 14 April 2014 16:26
- Hydrolithe
- Participant assidu
- Lieu: Lyon
- Date d'inscription: 21 Apr 2010
- Messages: 223
Re: QGIS 2.2: Etiquette multi-lignes sur un seul champ
Merci beaucoup pour toutes ces précisions.
Hors ligne
#10 Fri 27 January 2017 13:56
- loupin
- Participant actif
- Date d'inscription: 23 Apr 2010
- Messages: 66
Re: QGIS 2.2: Etiquette multi-lignes sur un seul champ
Bonjour,
l'expression regexp_replace( "mon champ" ,'(.{5}[^\\s.]*)\\s','\\1\n'), fonctionne bien dans ma couche par contre quand je passe en mode composeur d'impression (en mode génération d'atlas) ça ne marche plus....
Est-il possible dans le composeur, quand on génère un atlas qui récupère a un endroit la valeur d'un champ, affecter cette expression pour que le retour à la ligne s'effectue??
Merci
Hors ligne
#11 Sat 28 January 2017 20:07
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3885
Re: QGIS 2.2: Etiquette multi-lignes sur un seul champ
Bonjour,
remplace monchamp par attribute($atlasfeature, 'monchamp') pour voir... Je n'ai pas QGIS sous la main pour tester la formule, cela dit...
Hors ligne