#1 Tue 15 July 2008 09:49
[ArcGis 9.1] Données attributaire selon l'entête légende
Bonjour à ceux qui ne sont pas encore en vacances.
Je cherche à extraire dans un tableau les données (parcellaires) de la table attribuaire que j'ai classé avec le système des entêtes dans ma légende. Je ne vois pas comment récupérer les valeurs d'entêtes que j'ai définies dans la légende (Particuliers, Copropriétaires, Bailleurs sociaux, etc.).
Si quelqu'un connaît un script ou une méthode, je suis preneur.
Merci.
Hors ligne
#2 Fri 18 July 2008 15:02
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: [ArcGis 9.1] Données attributaire selon l'entête légende
sous quelle forme souhaiterais tu récupérer les infos dans le tableau ?
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#3 Fri 18 July 2008 16:02
Re: [ArcGis 9.1] Données attributaire selon l'entête légende
Bonjour,
Je voudrais récupérer mes données dans une table, qui trierait mais entités grâce au nom de l'entête.
Je ne pense pas que ce soit possible, puisque le nom de l'entête n'est pas issu d'un champ, il s'agit juste d'une option de mise en forme de la légende.
La solution serait de créer un champ qui ventile ces valeurs, mais je me suis tapé un tri manuel dans l'onglet symbologie, si ça pouvez ne pas être à usage unique ça serait pas mal.
Si tu vois autre chose...
Hors ligne
#4 Fri 18 July 2008 16:19
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: [ArcGis 9.1] Données attributaire selon l'entête légende
via une macro vba j'ai reussi à récupérer les entêtes ainsi et le nom des données.
j'ai pris un exemple avec les départements français.
une entete correspond à une région et j'ai ranger chaque departements en fonction de l'entete. (fait manuellement)
à partir de là j'ai créé une table dbf toute simple (cf pieces jointes)
Dernière modification par Tnarbiv (Fri 18 July 2008 16:21)
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne
#5 Mon 21 July 2008 11:16
- Tnarbiv
- Participant assidu
- Lieu: Véretz
- Date d'inscription: 5 Sep 2005
- Messages: 392
Re: [ArcGis 9.1] Données attributaire selon l'entête légende
Voici un début de code :
Code:
Public Sub test() Dim fso Set fso = CreateObject("Scripting.FileSystemObject") If fso.fileexists("c:\temp\test.dbf") Then fso.deletefile "c:\temp\test.dbf", True Dim pmxdoc As IMxDocument Set pmxdoc = ThisDocument Dim pmap As IMap Set pmap = pmxdoc.FocusMap Dim player As ILayer Set player = pmap.Layer(0) Dim pfl As IFeatureLayer Set pfl = player Dim pgfl As IGeoFeatureLayer Set pgfl = pfl Dim pfr As IFeatureRenderer Set pfr = pgfl.Renderer Dim i As Integer Dim ptable As ITable Dim pwsf As IWorkspaceFactory Set pwsf = New ShapefileWorkspaceFactory Dim pws As IWorkspace Set pws = pwsf.OpenFromFile("c:\temp", 0) Dim pfldentete As IFieldEdit Dim pfldnom As IFieldEdit Dim pfieldsedit As IFieldsEdit Set pfieldsedit = New Fields Set pfldentete = New Field Set pfldnom = New Field With pfldentete .Name = "EN_TETE" .Type = esriFieldTypeString .Length = 30 End With With pfldnom .Name = "NOM" .Type = esriFieldTypeString .Length = 30 End With pfieldsedit.AddField pfldentete pfieldsedit.AddField pfldnom Dim pfields As IFields Set pfields = pfieldsedit Dim pfws As IFeatureWorkspace Set pfws = pws Set ptable = pfws.CreateTable("test", pfields, Nothing, Nothing, "") 'Debug.Print ptable.Fields.FieldCount Dim pcursor As ICursor Set pcursor = ptable.Search(Nothing, True) Dim prow As IRow If TypeOf pfr Is UniqueValueRenderer Then Dim puvr As IUniqueValueRenderer Set puvr = pfr For i = 0 To puvr.ValueCount - 1 Set prow = ptable.CreateRow 'Debug.Print puvr.Heading(puvr.Value(i)) prow.Value(1) = puvr.Heading(puvr.Value(i)) 'Debug.Print puvr.Value(i) prow.Value(2) = puvr.Value(i) prow.Store Next i Else Exit Sub End If Dim pli As ILegendInfo Set pli = pfr Debug.Print pli.LegendGroupCount Dim j As Integer For i = 0 To pli.LegendGroupCount - 1 Debug.Print pli.LegendGroup(i).Heading Debug.Print pli.LegendGroup(i).ClassCount For j = 0 To pli.LegendGroup(i).ClassCount - 1 Dim plegendclass As ILegendClass Set plegendclass = pli.LegendGroup(i).Class(j) Debug.Print plegendclass.Label Next j Next i End Sub
Ayez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne