Nous avons vu la semaine dernière
comment mettre en place des popups
pour permettre à l'utilisateur d'obtenir plus d'informations sur les données
en cliquant dessus. Pour continuer notre
série de tutoriels sur l'API JavaScript d'ArcGIS, nous allons voir cette semaine comment étiqueter vos données avec des
labels, pour que les données donnent plus d'informations sans même que
l'utilisateur n'ait à les interroger.
Voici le résultat que nous obtiendrons à l'issue de cette nouvelle étape
:
Comme vous le voyez, le nom des arbres apparaît directement dans la scène.
Vous pouvez suivre le tutoriel ci-dessous pas à pas pour reproduire cette
fonctionnalité, ou allez tester interactivement le code sur
ce CodePen.
Créer des labels 3D
Afin de créer des labels, nous allons paramétrer une instance de
LabelClass.
let labelClass = {
//la suite du code ira ici :
//paramétrage des propriétés symbol et labelExpressionInfo
};
Nous utiliserons deux propriétés des
LabelClass
:
labelExpressionInfo
et
symbol. La première permet de définir ce que contiendra l'étiquette, et la seconde
de choisir la manière dont elle s'affichera
Commençons par
labelExpressionInfo.Cette propriété contient elle-même une propriété d'expression, qui doit
contenir une expression
Arcade
indiquant le texte à afficher. Pour l'application, le label affichera le nom
de chaque arbre, contenu dans le champ "com-nom_usuel" de l'entité (feature).
Voici comment écrire cela :
labelExpressionInfo: {
expression: "$feature.com_nom_usuel"
},
Si vous souhaitez en apprendre plus sur les bases d'Arcade, je vous renvoie
vers
cet article du blog arcOrama.
Nous allons maintenant paramétrer la propriété
symbol. Par défaut, les étiquettes s'affichent comme dans l'illustration ci-dessous
à gauche. En utilisant cette propriété, nous allons pouvoir jouer sur la
manière dont les étiquettes sont rendues, et obtenir le résultat à droite.
Voici le code pour paramétrer cette propriété :
symbol: {
type: "label-3d",
symbolLayers: [{
type: "text",
material: { color: "#7B656F"},
halo : {color : "#FFF", size : "1px"},
size: 12, // en points
font: {
family: "Playfair Display",
style : "italic",
weight : "bold",
size: 12,
}
}],
verticalOffset: {
screenLength: "25px",
},
callout: {
type: "line",
size: 0.2,
color: "#7B656F",
}
},
Comme vous le voyez, elle se compose elle-même d'un certain nombre de
paramètres. Tout d'abord, type. Il peut prendre deux valeurs : "text", pour les étiquettes des cartes 2D, et "label-3d", pour les étiquettes dans les scènes 3D. Nous choisissons donc ici
"label-3d".
Le premier
nous permet de paramétrer le symbole avec lequel l'étiquette s'affiche. Son
type
est toujours "texte". Nous pouvons choisir la couleur du texte avec la
prorpiété
material
et la couleur et la taille de son contour avec la propriété
halo. Nous réglons ensuite la taille (size) en points. Enfin, nous pouvons sélectionner et paramétrer une police (font). Notez que depuis la
version 4.27 de l'API, il est possible de charger des
polices personnalisée
chargées à partir de ressources statiques sans CSS personnalisé. J'ai
personnellement choisi la police Playfair Display, mais vous pouvez choisir
celle de votre choix
dans cette liste.
Le second paramètre de symbol,
verticalOffset, nous permet d'ajouter un décalage vertical, en pixels.
Enfin, le troisième,
callout, permet de créer une ligne entre l'étiquette et l'entité qu'elle décrit si
vous avez défini un décalage, dont vous pouvez choisir le type, la taille, la
couleur, et une bordure (que nous n'avons pas ajoutée ici).
Appliquer les labels à votre couche de données
A présent que les labels sont configurés, il faut configurer la couche pour
qu'elle y fasse appel. Nous allons accéder à une première propriété de la
couche,
labelsVisible, et la définir à true pour donner à la couche la capacité d'avoir des
labels. Il ne nous reste ensuite plus qu'à accéder à une seconde propriété,
labelingInfo, afin de le faire pointer vers le LabelClass que nous venons de créer. Après
cela, vous devriez voir apparaître les étiquettes des arbres sur votre carte.
arbresRemarquables.labelsVisible = true;
arbresRemarquables.labelingInfo = [labelClass];
C'est terminé pour aujourd'hui ! Vous pouvez retrouver le code complet de
cette étape et des précédentes sur
Github
et
CodePen. La semaine prochaine, nous faciliterons le déplacement de l'utilisateur
dans l'application en créant des géosignets au niveau de différents points
d'intérêt. En
attendant, n'hésitez pas à retrouver les
autres épisodes de cette série
si vous les avez manqués.
Aucun commentaire:
Enregistrer un commentaire