Les chaînes de texte d'une étiquette sont dérivées d'un ou plusieurs attributs d'entités. Les étiquettes sont dynamiques : si des valeurs d'attributs d'entités changent, les étiquettes changent aussi. Lorsque vous activez l'étiquetage, les entités sont initialement étiquetées en fonction d'un champ, par exemple, sur une carte météorologique, vous pouvez étiqueter des stations météorologiques avec les informations relatives aux précipitations journalières. Cette étiquette basée sur un champ unique est définie dans l'onglet Etiquetage.
Remarque :
Par défaut, il s’agit du premier champ d’étiquette de type chaîne qui contient le texte Nom dans son intitulé (la casse n’a pas d’importance). S'il n'existe aucun champ dont l'intitulé comprend ce texte, il s'agira par défaut du premier champ de type chaîne, plus du premier champ de type entier, puis du premier champ de type quelconque.
Vous pouvez ajouter des champs attributaires à vos étiquettes. Par exemple, vous pouvez étiqueter vos stations météorologiques avec les informations relatives aux précipitations journalières et à la vitesse maximale du vent. Que vos étiquettes possèdent un ou plusieurs champs attributaires, l'expression qui définit le texte d'une étiquette est appelée propriétés d'étiquette. Chaque classe d'étiquettes possède ses propres propriétés d'étiquette.
Pour en savoir plus sur la création d'expressions d'étiquette
Vous pouvez insérer vos propres propriétés d'étiquette afin de l'afficher avec vos étiquettes sur la carte. Par exemple, sur une carte météorologique, vous pouvez ajouter des unités de mesure abrégées à chaque étiquette (par exemple, po pour les pouces et km/h pour les kilomètres par heure). Vous pouvez aussi utiliser Arcade, Python, VBScript ou JScript dans vos expressions d’étiquette pour modifier l’affichage du texte. Par exemple, vous pouvez insérer une fonction afin d’afficher les valeurs de précipitations sur une ligne de texte et les valeurs de vitesse du vent sur une deuxième ligne. Ces deux exemples sont présentés dans l’image suivante :
Vous pouvez également contrôler l’apparence du texte sur la carte en utilisant des balises de mise en forme de texte ArcGIS Pro. Les balises de mise en forme de texte vous permettent de spécifier différentes propriétés d'affichage du texte pour différentes parties de votre texte d'étiquette. Par exemple, vous pouvez afficher les valeurs de précipitations avec un texte bleu en italique, et les valeurs de vitesse maximale du vent avec un texte noir normal, comme dans l’image suivante :
Expressions d'étiquette
Une expression d’étiquette avancée vous permet d’ajouter une logique Arcade, Python, VBScript ou JScript quelconque à vos expressions d’étiquettes, y compris une logique conditionnelle et une fonction de boucle. Par exemple, vous pouvez créer des étiquettes dont seule la première lettre de chaque mot s'affiche en majuscule, quelle que soit la méthode de stockage des chaînes de texte dans les champs attributaires. Vous pouvez également utiliser des expressions d’étiquette pour ajuster la mise en forme de vos étiquettes à l’aide des balises de mise en forme ArcGIS Pro. Il s'agit de caractères spéciaux permettant de modifier l'aspect de tout ou partie de vos étiquettes. Par exemple, vous pouvez utiliser la balise de formatage en gras pour faire apparaître en gras la première ligne d'une étiquette empilée à plusieurs lignes.
Conseil :
Les expressions Arcade sont utilisées dans tout ArcGIS. Le profil d’étiquetage est utilisé pour les expressions d’étiquette. Les expressions Arcade fonctionnent dans Runtime, ArcGIS Pro et les ArcGIS Runtime SDKs, ce qui n’est pas le cas d’autres langages.
Une expression d’étiquette peut être une simple expression de ligne unique ou une expression plus complexe couvrant plusieurs lignes de code et utilisant la logique de programmation de l’analyseur. Arcade active les expressions complexes par défaut. Si Python, VBScript ou JScript est utilisé, la case Advanced (Avancé) doit être cochée et le code doit être encapsulé dans une fonction pour activer les expressions multilignes.
Si vous avez des descriptions de valeurs codées dans vos données, vous pouvez utiliser l’option Use coded value descriptions (Utiliser les descriptions des valeurs codées) pour afficher ces descriptions dans l’étiquette au lieu du code.
Les valeurs de champ sont automatiquement redéfinies en chaînes de texte. Par conséquent, si vous souhaitez utiliser une valeur numérique dans une opération arithmétique, ou si vous effectuez une comparaison, vous devez la redéfinir en type de données numériques.
Remarque :
Les valeurs nulles ne sont pas redéfinies en chaînes de texte. Elles sont transmises à l’expression en tant que NULL.
Lorsque vous utilisez Arcade, les valeurs de champ conservent leur type de données.
Les exemples suivants ajoutent deux champs de nombre entier :$feature.FIELD1 + $feature.FIELD2
int([FIELD1]) + int([FIELD2])
cint([FIELD1]) + cint([FIELD2])
parseInt([FIELD1]) + parseInt([FIELD2])
Options supplémentaires du Moteur d’étiquetage Maplex
Maplex Label Engine vous permet en outre de contrôler l’espace utilisé dans votre étiquette.
L’option Remove extra spaces (Supprimer les espaces supplémentaires) permet d’éliminer les caractères d’espacement inutiles du texte d’une étiquette. Le terme « espaces inutiles » désigne tous les caractères d’espacement précédents, suivants et intérieurs. Si l’option est désactivée, les espaces sont utilisés pour la mise en forme, afin de vous permettre, par exemple, de mettre en retrait du texte dans une étiquette multiligne.
L’option Remove extra line breaks (Supprimer les sauts de ligne supplémentaires) permet de supprimer des sauts de ligne inutiles du texte d’une étiquette. Si elle est désactivée, l’espacement multiligne est possible dans une étiquette multiligne.
Écrire une expression d’étiquette
Pour écrire une d’étiquette, procédez comme suit :
- Vérifiez que List By Labeling (Répertorier par étiquetage) est la méthode d’affichage active dans la fenêtre Contents (Contenu). Cliquez sur l’onglet List By Labeling (Répertorier par étiquetage) .
- Sélectionnez une classe d’étiquette dans la fenêtre Contents (Contenu) et cliquez sur l’onglet Labeling (Étiquetage).
- Dans l’onglet Labeling (Étiquetage), dans le groupe Label Class (Classe d’étiquette), cliquez sur le bouton Expression .
- Sélectionnez un langage dans le menu Language (Langage).
- Saisissez une expression Arcade, Python, VBScript ou JScript. Vous pouvez également créer une expression en double-cliquant sur le champ afin de l'ajouter à l'expression. Vous pouvez également sélectionner le champ, cliquer avec le bouton droit et choisir Ajouter pour ajouter le champ à l'emplacement où vous avez cliqué, en utilisant un ou plusieurs espaces comme séparation. Utilisez les fonctions de texte fournies en double-cliquant pour les ajouter à l'expression.
Lorsque vous utilisez Python, VBScript et JScript, les champs se trouvent entre crochets [ ], quel que soit le type de données de la source de données de la couche. Arcade utilise une méthode différente pour spécifier des champs.
Syntaxe de champ $feature.fieldname
Syntaxe de champ joint $feature['tablename.fieldname']
Syntaxe de champ de domaine de valeurs précodées DomainName($feature, 'fieldname')
Conseil :
Lors de l’utilisation de l’expression Arcade, vous pouvez utiliser la fonction Console pour favoriser le débogage des expressions d’étiquette. Lorsque vous cliquez sur Verifiy (Vérifier) , un lien View console messages (Afficher les messages de console) s’affiche si la fonction Console est incluse dans l’expression. Cliquez sur ce lien pour ouvrir la fenêtre Console Messages (Messages de la console). Vous pouvez également donner un titre à votre expression lorsque vous utilisez Arcade.
Attention :
Lorsque vous étiquetez un champ dont le nom contient des caractères spéciaux ou commence par un nombre, Arcade utilise le même format que pour la syntaxe de champ joint, par exemple, $feature[’33field’], $feature[’acres²’], $feature[’st_area(SHAPE)’].
Vous pouvez également entrer des balises de mise en forme de texte ArcGIS Pro dans la zone Expression pour appliquer la mise en forme à une partie de votre texte d’étiquette.
Remarque :
Lorsque vous utilisez Arcade, la mise en forme de champs sur la couche n’est pas répercutée sur les étiquettes. Les méthodes de mise en forme Arcade doivent être employées.
Si l'expression doit couvrir plusieurs lignes de code, activez la case à cocher Avancé et entrez les propriétés d'étiquette. Cela est inutile lorsque vous utilisez Arcade.
- Cliquez sur Verify (Vérifier) pour vous assurer qu’il n’y a pas d’erreur de syntaxe, puis sur Apply (Appliquer).
S’il existe des erreurs de syntaxe, le motif et le numéro de la ligne concernée sont indiqués dans l’erreur. Pour afficher ces numéros, cliquez avec le bouton droit sur la zone de saisie de l’expression d’étiquette et sélectionnez Show Line Numbers (Afficher les numéros de lignes).
Les expressions d’étiquette classiques et avancées peuvent être exportées en tant que fichiers d’expressions d’étiquette (.lxp), qui peuvent être chargés dans d’autres couches ou cartes.
Exemples d'expressions :
Voici quelques exemples d'expressions d'étiquettes :
Concaténer une chaîne à une valeur de champ
Concaténez une chaîne à la valeur d’un champ. L’expression suivante permet, par exemple, de créer une étiquette en faisant précéder la valeur du champ PARCELNO par le texte "Parcel no:" :
"Parcel no: " + $feature.PARCELNO
"Parcel no: " + [PARCELNO]
"Parcel no: " & [PARCELNO]
"Parcel no: " + [PARCELNO]
Arrondir un nombre décimal
Arrondissez un nombre décimal à un nombre défini de décimales. Par exemple, cette expression affiche un champ AREA arrondi à un chiffre après la virgule :
round(number($feature.AREA), 1)
round(float([AREA]), 1)
Round ([AREA], 1)
function FindLabel ( [AREA] )
{
var ss;
var num= parseFloat([AREA]);
ss = num.toFixed(1);
return (ss);
}
Convertir en majuscules et en minuscules
Convertissez toutes vos étiquettes textuelles en majuscules ou en minuscules. Par exemple, l’expression suivante convertit un champ NAME en minuscules :
lower($feature.NAME)
def FindLabel ( [NAME] ):
S = [NAME]
S = S.lower()
return S
LCase ([NAME])
[NAME].toLowerCase()
Conversion à la casse appropriée
Convertissez vos étiquettes textuelles à la casse appropriée. Par exemple, l’expression suivante remplace la casse d’un champ NAME en majuscules par une autre casse appropriée :
Proper($feature.NAME, 'firstword')
def FindLabel ( [NAME] ):
S = [NAME]
S = S.title()
return S
Function FindLabel ( [NAME] )
FindLabel = UCase(Left([NAME],1)) & LCase(Right([NAME], Len([NAME]) -1))
End Function
function FindLabel ( [NAME] )
{
var str = [NAME];
var iLen = String(str).length;
var upper = (str.substring(0,1)).toUpperCase();
var lower = (str.substring(1, iLen)).toLowerCase()
return upper + lower;
}
Empiler du texte de plusieurs champs
Créez du texte empilé. Par exemple, cette expression crée une étiquette avec le champ NAME et le champ ADDRESS sur des lignes distinctes :
$feature.NAME + TextFormatting.NewLine + $feature.ADDRESS
[NAME] + '\n' + [ADDRESS]
[NAME] & vbCrLf& [ADDRESS]
[NAME] + "\r" + [ADDRESS]
Empiler du texte d’un seul champ
Créez du texte empilé en fonction du texte d'un champ. Par exemple, l'expression suivante utilise la virgule pour définir l'emplacement de la pile :
replace($feature.LABELFIELD, ', ', '\n')
def FindLabel ( [LABELFIELD] ):
S = [LABELFIELD]
S = S.replace(', ', '\n')
return S
Function FindLabel ( [LABELFIELD] )
FindLabel = replace([LABELFIELD], ", ", vbnewline)
End Function
function FindLabel ( [LABELFIELD] )
{
var r, re;
var str = [LABELFIELD];
re = /,/g;
r = str.replace(re, "\r");
return r;
}
Formater les étiquettes
Mettez en forme les étiquettes. Par exemple, cette expression affiche l'étiquette sous forme de devise :
"Occupancy Revenue: $" + round($feature.MAXIMUM_OC * $feature.RATE, 2)
def FindLabel ( [MAXIMUM_OC], [RATE] ):
import locale
locale.setlocale(locale.LC_ALL, '')
S = locale.currency(float([MAXIMUM_OC]) * float([RATE]))
return S
"Occupancy Revenue: " & FormatCurrency ([MAXIMUM_OC] * [RATE])
function FindLabel ( [MAXIMUM_OC], [RATE] )
{
var ss;
var num1 = parseFloat([MAXIMUM_OC]);
var num2 = parseFloat([RATE]);
var num3 = num1 * num2
ss = num3.toFixed(2);
return ("$" + ss);
}
Étiqueter avec une partie de la chaîne
Utilisez une seule partie du champ comme étiquette. Par exemple, cette expression affiche les caractères de 3 à 5 :
mid($feature.LABELFIELD, 2, 3)
def FindLabel ( [LABELFIELD] ):
S = [LABELFIELD]
return S[2:5]
Mid([LABELFIELD], 3, 3)
function FindLabel ( [LABELFIELD] )
{
var S;
var str = [LABELFIELD];
S = str.substring(2, 5);
return S;
}
Créer une instruction conditionnelle if-else
Définissez une instruction conditionnelle if-else. Ces fonctions permettent d'étiqueter les villes avec des noms dans une police rouge de grande taille si leur population est supérieure ou égale à 250 000 habitants et dans la police par défaut des étiquettes si la population est inférieure à 250 000 habitants :
if ($feature.POPULATION >=250000) {
return "<CLR red='255'><FNT size = '14'>" + $feature.NAME + "</FNT></CLR>"
}
else {
return $feature.NAME
}
def FindLabel ( [NAME], [POPULATION] ):
if int([POPULATION]) >= 250000:
return "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>"
else:
return [NAME]
Function FindLabel ([NAME], [POPULATION])
if (cLng([POPULATION]) >= 250000) then
FindLabel = "<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>"
else
FindLabel = [NAME]
end if
End Function
function FindLabel ( [NAME], [POPULATION] )
{
if (parseFloat([POPULATION]) >= 250000){
return ("<CLR red='255'><FNT size = '14'>" + [NAME] + "</FNT></CLR>");
}
else
return ([NAME]);
}
Remarque :
Pour étiqueter un sous-ensemble d'entités selon une valeur de champ, créez la requête SQL dans la classe d'étiquettes plutôt que via les propriétés d'étiquette.
Ressources supplémentaires
- Référence de langage Arcade
- Référence de langage Python
- Référence de langage Microsoft VBScript
- Microsoft JScript Language Reference
(Certaines informations sont stockées sur des pages Web qui ne sont ni créées, ni détenues, ni conservées par Esri. Esri ne peut en aucun cas garantir la disponibilité de ces pages et ne saurait être tenu responsable quant à la nature et au contenu de ces pages.)
Vous avez un commentaire à formuler concernant cette rubrique ?