#1 Mon 23 January 2006 14:07
- Jaq2
- Participant occasionnel
- Lieu: Niort
- Date d'inscription: 7 Oct 2005
- Messages: 18
Etiquette de la même couleur que l'objet etiquetté
Bonjour,
Je cherche à réaliser des etiquette qui auraient la même la même couleur que l'objet etiquetté.Pour l'exemple concret, j'ai un réseau hydraulique composé de tronçon. Chaque tronçon a une couleur et je veux que les etiquettes aient une couleur identique a tronçon qui lui correspond.
Si quelqu'un à une idée, je susi preneur
Je vous remerie
Stéphane GONZALEZ
Hors ligne
#2 Mon 23 January 2006 14:34
- Emilie Duc
- Juste Inscrit !
- Date d'inscription: 26 Sep 2005
- Messages: 5
Re: Etiquette de la même couleur que l'objet etiquetté
Bonjour,
Si le nombre de couleurs n'est pas trop important, vous pouvez créer des classes d'étiquettes.
Une classe d'étiquette permet de définir un style particulier pour les objets répondant à une requête SQL donnée.
C'est une piste... J'espère qu'elle vous sera utile.
Bon courage.
Hors ligne
#3 Mon 23 January 2006 14:44
- Jaq2
- Participant occasionnel
- Lieu: Niort
- Date d'inscription: 7 Oct 2005
- Messages: 18
Re: Etiquette de la même couleur que l'objet etiquetté
Disons que je voulais automatier la chose car j'ai un grand nombre d'entité et chauqe entité à une couleur. J'ai commencé à explorer cette solution mais elle est laborieuse.
Je vous remercie de cette participation.
Stéphane Gonzalez
Dernière modification par Jaq2 (Mon 23 January 2006 14:45)
Hors ligne
#4 Mon 23 January 2006 19:24
- Pascal LAMBERT
- Participant actif
- Lieu: Orry la Ville
- Date d'inscription: 16 Sep 2005
- Messages: 112
Re: Etiquette de la même couleur que l'objet etiquetté
Il suffit d'utiliser dans l'onglet "étiquettes" de ta couche la méthode "
utiliser différentes classes d'entité" : pour chaque classe, tu définit une
requête qui correspond à une couleur donnée et tu lui attribue une étiquette
définie avec la couleur de ton choix.
Cordialement,
Pascal LAMBERT,
chargé de mission SIG/Evaluation
tel. : 03 44 63 65 62
---------------------------------------------------------
Parc naturel régional Oise-Pays de France
Château du Fond de l'Arche - 1, avenue de Compiègne
60300 Senlis
Tel : 03 44 63 65 65 Fax: 03 44 63 65 60
Hors ligne
#5 Mon 23 January 2006 19:25
- Pascal LAMBERT
- Participant actif
- Lieu: Orry la Ville
- Date d'inscription: 16 Sep 2005
- Messages: 112
Re: Etiquette de la même couleur que l'objet etiquetté
Ça me parait difficile à faire ! à moins d'être un dieu vivant du VBA ou du
PYTHON ;-))
Par contre je te libre une idée qui m'a traversé l'esprit : si tu duplique
ta couche en autant de catégorie de couleur nécessaire, et pour chaque
duplication, tu crées un ensemble de définition qui sélectionne les tronçons
pour une couleur donnée : tu n'as plus alors qu'à définir pour chaque
duplication une étiquettes avec la couleur de ton choix (chaque tronçons de
chaque duplication étant transparents si tu veux garder l'ensemble des
tronçons apparents sous la même couche).
Si tu regroupe chaque couche dupliquée sous un groupe que tu appelles
"étiquette", tu peux cocher/décocher les étiquettes très facilement...
Je ne suis pas sur que cette méthode change considérablement la donne par
rapport à la méthode "classe d'étiquette", mais bon, à toi de voir....
Cordialement,
Pascal LAMBERT,
chargé de mission SIG/Evaluation
tel. : 03 44 63 65 62
---------------------------------------------------------
Parc naturel régional Oise-Pays de France
Château du Fond de l'Arche - 1, avenue de Compiègne
60300 Senlis
Tel : 03 44 63 65 65 Fax: 03 44 63 65 60
Hors ligne
#6 Mon 23 January 2006 19:27
- Pascal LAMBERT
- Participant actif
- Lieu: Orry la Ville
- Date d'inscription: 16 Sep 2005
- Messages: 112
Re: Etiquette de la même couleur que l'objet etiquetté
PS : quand je dis "dupliquer la couche", j'entend bien sur copier la couche
dans le projet en x exemplaires (c'est toujours la même source de donnée),
ou x est le nombre de couleur dont tu as besoin... en espérant avoir été
assez clair...
Pascal LAMBERT,
chargé de mission SIG/Evaluation
tel. : 03 44 63 65 62
---------------------------------------------------------
Parc naturel régional Oise-Pays de France
Château du Fond de l'Arche - 1, avenue de Compiègne
60300 Senlis
Tel : 03 44 63 65 65 Fax: 03 44 63 65 60
Hors ligne
#7 Tue 24 January 2006 08:54
- Christophe Tourret
- Participant actif
- Date d'inscription: 5 Sep 2005
- Messages: 63
Re: Etiquette de la même couleur que l'objet etiquetté
Bonjour,
En fait, il y a une fonction qui fait déjà la moitié du travail (c'est déjà ça...) :
1) vous mettez en place votre légende sur les entités linéaires
2) vous allez mettre en place les étiquettes :
- Dans les propriétés de couche, "étiquettes", vous choissisez la méthode "Define Classes of features(...)", désolé, c'est la version US sur mon poste !
- Vous cliquez sur le bouton "Get Symbol Classes" et vous créez magiquement un classe d'étiquettes par classe de symbole dans votre légende !
3) il ne vous reste plus que la partie manuelle du process : affecter la bonne couleur de police pour chaque classe en fonction de la couleur de chaque symbole...
Christophe
Hors ligne
#8 Tue 24 January 2006 12:33
- Jaq2
- Participant occasionnel
- Lieu: Niort
- Date d'inscription: 7 Oct 2005
- Messages: 18
Re: Etiquette de la même couleur que l'objet etiquetté
Merci de vos réponse.
Cependant, le fait de passer par la commande "utiliser les différentes classes d'entités" dans le menu "Etiquette" n'automatise pas la tâche d'attribution, de la couleur à la police de l'étiquette. Pour vous donner une idée, j'ai 190 entités différentes donc étiquettes qui y sont rattachées. Si je définis pour chaque etiquette la couleur cela me fais 190 fois la même opération sans compter qu'il faut que je consulte, au préalable, le code couleur de l'entité afin de l'attribuer à l'etiquette. Cette opération me paraît assez laborieuse et d'autre part, il ne faut pas re-changer le code couleur d'un grand nombre d'entité par la suite.
J'ai téléphoné à la hotligne d'Esri, il m'ont précisé qu'utiliser les différentes classes d'entités etait la seule solution ou alorsil fallat developper.
Merci je continue mes recherches et vous tiens au courant
Stéphane gonzalerz
Dernière modification par Jaq2 (Tue 24 January 2006 13:28)
Hors ligne
#9 Tue 24 January 2006 15:22
- Pascal LAMBERT
- Participant actif
- Lieu: Orry la Ville
- Date d'inscription: 16 Sep 2005
- Messages: 112
Re: Etiquette de la même couleur que l'objet etiquetté
Je ne comprend pas bien le problème : si tu définis une classe d'étiquette
qui sélectionne l'ensemble des entités associés à la couleur "rouge" (par
une requête sur le ou les champs thématiques), peu importe le nombre
d'entité correspondant ! il te faut créer autant de classe que de couleur
simplement (chaque classe regroupe l'ensemble des entités associées à une
couleur donnée), et cela une fois pour toute... et pour chaque classe, tu
définis un modèle d'étiquette, une fois pour toute aussi...
Pascal LAMBERT,
chargé de mission SIG/Evaluation
tel. : 03 44 63 65 62
---------------------------------------------------------
Parc naturel régional Oise-Pays de France
Château du Fond de l'Arche - 1, avenue de Compiègne
60300 Senlis
Tel : 03 44 63 65 65 Fax: 03 44 63 65 60
Hors ligne
#10 Wed 25 January 2006 11:21
- Jaq2
- Participant occasionnel
- Lieu: Niort
- Date d'inscription: 7 Oct 2005
- Messages: 18
Re: Etiquette de la même couleur que l'objet etiquetté
Merci pascal,
j'ai peut être mal compris ta façon de procéder.
Pour te répondre, j'ai effectué une symbologie en valeur unique sur le code tronçon de mes 190 entités. Sachant que chaque code tronçon est unique, j'ai au total 190 classes d'entités qui contiennnent chacune 1 entité. Donc définir la couleur de chaque classe d'entité ne me permet pas d'automatiser le système. Est-ce que je t'éclaire où est ce que c'est moi qui est mal compris?
Merci
Hors ligne
#11 Thu 26 January 2006 14:47
- Pascal LAMBERT
- Participant actif
- Lieu: Orry la Ville
- Date d'inscription: 16 Sep 2005
- Messages: 112
Re: Etiquette de la même couleur que l'objet etiquetté
S'il y a autant de couleur que de tronçon, je ne vois pas trop comment tu
peux faire!
J'entrevois toutefois une solution, mais elle est complexe :
Il faut créer une couche surfacique qui contient des petits rectangles situé
au centre de chaque tronçon (on peut "facilement" récupérer le centroïde des
tronçons, et créer un code VBA qui crée un rectangle de taille défini,
placer au niveau du centroïde en question) : à chaque rectangle, tu associe
le même identifiant que le tronçon, ainsi que la légende que tu veux faire
apparaître.
Ensuite tu fais "appliquer le style d'une couche" sur cette couche
étiquette, en reprenant les codes couleurs de ta couche tronçon (j'ignore si
le système permet de passer une symbologie d'une couche polyligne à une
couche polygone !) et tu fais apparaître l'étiquette au centre de chaque
rectangle (il faut définir une bonne taille de rectangle pour que ta légende
ne dépasse pas).
Le plus compliqué c'est de créer le code qui génère les rectangles en les
plaçant sur les centroïdes des tronçons (ensuite avec une jointure spatiale,
tu affecte l'identifiant des tronçons aux rectangles appropriés) : pour
info, tu trouveras des exemple de code générant des rectangles dans
l'aide...
Bon courage...
Pascal LAMBERT,
chargé de mission SIG/Evaluation
tel. : 03 44 63 65 62
---------------------------------------------------------
Parc naturel régional Oise-Pays de France
Château du Fond de l'Arche - 1, avenue de Compiègne
60300 Senlis
Tel : 03 44 63 65 65 Fax: 03 44 63 65 60
Hors ligne
#12 Fri 27 January 2006 14:38
- Frédéric Prally
- Participant occasionnel
- Date d'inscription: 25 Oct 2005
- Messages: 16
Re: Etiquette de la même couleur que l'objet etiquetté
Bonjour,
Ce petit bout de code devrait faire l'affaire.
Il permet d'appliquer à toutes les étiquettes créées (classes d'étiquettes), la même couleur qui est utilisée pour représenter les entités linéaires.
Procédure d'utilisation :
- Copier le code suivant dans une feuille Editeur Visual basic du projet courant :
.Outils > Macros > Editeur Visual basic
- Lancement de la procédure :
.Outils > Macros > Macro,
.Choisir dans la liste le nom de la macro intitulée "CouleurEtiquetteIdentiqueEntite"
.Cliquer sur Exécuter
- A l'invite d'une boite de dialogue, il faut saisir le nom de la couche sur lequel on veut que le processus fonctionne. (Nom identique à celui qui apparait dans la TOC).
Code:
Public Sub CouleurEtiquetteIdentiqueEntite()
'Description : Applique la même couleur des entités représentées aux classes d'étiquettes créées
'Limitation : il faut que les entités de la couche soit représentée en valeur unique
'Auteur : F. Prally
'Date : Janvier 2006
Dim pMxDocument As IMxDocument
Dim pFeatureLayer As IFeatureLayer
Dim pGeoLayer As IGeoFeatureLayer
Dim pRenderer As IFeatureRenderer
Dim pUVRenderer As IUniqueValueRenderer
Dim pAnnoPropsCollection As IAnnotateLayerPropertiesCollection
Dim pLabelEngine As ILabelEngineLayerProperties
Dim pALayerProperties As IAnnotateLayerProperties
Dim pTextSym As ITextSymbol
Dim pFont As IFontDisp
Dim sValue As String
Dim MyLayer As String, sLabelField As String
Dim i As Long, j As Long
Dim pSymbol As ISymbol
Dim pLineSymbol As ILineSymbol
Dim pColor As IColor
Dim pRgbColor As IRgbColor
Dim sNameClass As String
Set pMxDocument = ThisDocument
'Récupére le nom de la couche
MyLayer = InputBox("Saisir le nom de la couche :", "Couleur étiquetage identique entité")
If MyLayer = "" Then Exit Sub
Set pFeatureLayer = GetLayer(MyLayer)
Set pGeoLayer = pFeatureLayer
'Test si on a bien à faire UniqueValueRenderer
If Not TypeOf pGeoLayer.Renderer Is IUniqueValueRenderer Then
MsgBox "Veuillez représenter votre couche en valeur unique.", vbInformation
Exit Sub
End If
'Récupére le renderer de la couche
Set pUVRenderer = pGeoLayer.Renderer
Set pRenderer = pGeoLayer.Renderer
'Identification du champ devant servir à l'étiquetage
sLabelField = pUVRenderer.Field(FieldValue)
'***Part 2 : Affichage des annotations
'Définition des propriétés des étiquettes
Set pAnnoPropsCollection = pGeoLayer.AnnotationProperties
pAnnoPropsCollection.Clear
'Pour chaque valeur on crée une classe d'étiquettes
For j = 0 To pUVRenderer.ValueCount - 1
Set pLabelEngine = New LabelEngineLayerProperties
Set pALayerProperties = pLabelEngine
'Récupère le nom de la classe
sNameClass = pUVRenderer.Value(j)
'Création de la classe
pALayerProperties.Class = sNameClass
'Récupère la couleur du symbole
Set pLineSymbol = pUVRenderer.Symbol(sNameClass)
Set pColor = pLineSymbol.Color
Set pRgbColor = New RgbColor
pRgbColor.RGB = pColor.RGB
'Création de la requete SQL
pALayerProperties.WhereClause = "[" & sLabelField & "]=" & sNameClass
Set pLabelEngine = pALayerProperties
'Supprime l'expression précédente
pLabelEngine.Expression = ""
'Ecriture du champ de l'étiquette
pLabelEngine.Expression = "[" & sLabelField & "]"
'Applique la couleur à l'étiquette
Set pTextSym = New TextSymbol
pTextSym.Color = pRgbColor
Set pFont = New StdFont
With pFont
.Bold = True
.size = 12
End With
Set pLabelEngine.Symbol = pTextSym
'Valider les propriétés d'étiquetage
pAnnoPropsCollection.Add pALayerProperties
'Valide l'étiquetage de cette classe
pALayerProperties.DisplayAnnotation = True
Next j
'N'affiche pas la classe toutes les valeurs
Dim k As Long
For k = 0 To pAnnoPropsCollection.Count - 1
pAnnoPropsCollection.QueryItem k, pALayerProperties
Select Case pALayerProperties.Class
Case "<Toutes les autres valeurs>"
pALayerProperties.DisplayAnnotation = False
Case "Par défaut"
pALayerProperties.DisplayAnnotation = False
End Select
Next k
'Valide l'étiquetage de cette couche
pGeoLayer.DisplayAnnotation = True
'Rafraichissement des vues
pMxDocument.ActiveView.Refresh
'Vide les variables
Set pMxDocument = Nothing
Set pFeatureLayer = Nothing
Set pGeoLayer = Nothing
Set pRenderer = Nothing
Set pUVRenderer = Nothing
Set pAnnoPropsCollection = Nothing
Set pLabelEngine = Nothing
Set pALayerProperties = Nothing
Set pTextSym = Nothing
Set pSymbol = Nothing
Set pLineSymbol = Nothing
Set pColor = Nothing
Set pRgbColor = Nothing
End Sub
Public Function GetLayer(strLayerName As String, Optional pMap As IMap = Nothing) As ILayer
If pMap Is Nothing Then
Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument
Set pMap = pMxDoc.FocusMap
End If
Dim pLayer As ILayer
Dim i As Integer
For i = 0 To pMap.LayerCount - 1
Set pLayer = pMap.Layer(i)
If pLayer.Name = strLayerName Then
Set GetLayer = pLayer
Exit Function
End If
Next
Set GetLayer = Nothing
End FunctionEn espérant que cela t'aide.
Hors ligne
#13 Wed 22 March 2006 17:06
- autocartho
- Participant occasionnel
- Lieu: MOULINS
- Date d'inscription: 22 Mar 2006
- Messages: 22
Re: Etiquette de la même couleur que l'objet etiquetté
Merci pour ce code !! J'avais le même besoin et c'est presque résolu.
J'arrive à récupérer la couleur de l'entité pour chaque classe mais j'ai un message d'erreur pour l'affichage des étiquettes type "Erreur FD0 : l'affichage des étiquettes a échoué". Sauriez vous d'où pourrais venir ce pb ?
Par ailleurs, est il possible de récupérer la couleur pour la mettre en fond d'étiquettes rectangulaire avec un texte noir ? Comment faire ?
Merci
Hors ligne
#14 Mon 22 May 2006 17:33
- Jaq2
- Participant occasionnel
- Lieu: Niort
- Date d'inscription: 7 Oct 2005
- Messages: 18
Re: Etiquette de la même couleur que l'objet etiquetté
Pareil pour moi,
J'arrive à récupérer les couleurs poura chaque classe d'étiquette mais une erreur m'empèche d'afficher les étiquettes en question:
Voici l'erreur :
Code:
Une ou plusieurs couches n'ont pas été dessinées: FDO error: 0 [L'étiquetage de la couche HYDROMM pour la classe II0002 a échoué.
Si quelqu'un à une idée
Hors ligne
#15 Tue 01 March 2011 12:20
- laure.briard
- Participant occasionnel
- Lieu: Laon
- Date d'inscription: 18 Aug 2008
- Messages: 22
Re: Etiquette de la même couleur que l'objet etiquetté
Bonjour à tous,
Même erreur pour moi !
Une ou plusieurs couches n'ont pas été dessinées:
FDO error: 0 [L'étiquetage de la couche texte pour la classe 1 a échoué.
Je pense que quelqu'un a finalement réussi à régler le problème depuis 2005... ![]()
Merci d'avance !
Hors ligne


