banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#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 Function

En 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... smile
Merci d'avance !

Hors ligne

 

Pied de page des forums

Powered by FluxBB