#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 SubAyez le réflexe "Développement Durable": N'imprimez ce message que si nécessaire.
Hors ligne


