#1 Fri 08 August 2008 10:14
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Définir un ensemble de définition de façon automatique
Bonjour à tous,
Je cherche depuis un bon moment à définir de façon automatique les ensembles de définition de toutes les couches d'un projet donné...
Je dispose d'un projet "modèle" dans lequel j'ai prédéfini l'ensemble de mes couches et leur symbologie.
Lorsque je commence un nouveau projet je copie ce "modèle" (mxd) et j'applique sur chacune des couches un ensemble de définition.
Toutes les couche dispose d'un champ "CODEID" sur lequel j'applique le filtre.
Je cherche à réaliser un script qui listerait les couches de mon projet et appliquerait sur chacunes d'elles le même ensemble de définition.
J'ai cherché à partir des différent outils disponible pour Arctoolbox mais je n'ai rien trouvé...
J'ai recherché sur ce forum mais peu de sujets parlent des ensembles de définition... et aucun d'un automatisme possible...
Quelqu'un aurait-il une piste pour m'orienter ? Un bout de code a adapter ?
Faut-il passer par du VB ?
Merci d'avance :-)
Dernière modification par GeoMax (Tue 21 December 2010 22:35)
Hors ligne
#2 Fri 08 August 2008 11:34
- nicolas valls
- Participant assidu
- Date d'inscription: 28 Oct 2005
- Messages: 154
Re: Définir un ensemble de définition de façon automatique
Bonjour,
Par vba ca devrait donner quelque chose comme :
Code:
Dim mondoc As IMxDocument, i As Integer dim monensemblededefinition as iFeatureLayerDefinition Set mondoc = ThisDocument for i=0 to mondoc.FocusMap.LayerCount -1 set monensemblededefinition = mondoc.FocusMap.layer(i) monensemblededefinition.DefinitionExpression="[CODEID]=14" 'c'est un exempl, il faut copier coller votre ensemble de definition Next i mondeoc.activeview.refresh
Donc après il suffit de créer un bouton dans le normal.mxt (pour qu'il soit accessible par défaut dans arcmap) qui lance cette procédure.
En espérant que cela vous aide !
Hors ligne
#3 Fri 08 August 2008 11:41
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Re: Définir un ensemble de définition de façon automatique
Merci beaucoup pour cette réponse très rapide et très claire !!
Je vais tester ça au plus vite.
Merci
Hors ligne
#4 Fri 08 August 2008 12:34
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Re: Définir un ensemble de définition de façon automatique
Le script marche parfaitement !
il y a juste un "e" qui s'est glissé dans le dernier "mondoc"
Code:
Dim mondoc As IMxDocument, i As Integer dim monensemblededefinition as iFeatureLayerDefinition Set mondoc = ThisDocument for i=0 to mondoc.FocusMap.LayerCount -1 set monensemblededefinition = mondoc.FocusMap.layer(i) monensemblededefinition.DefinitionExpression="[CODEID]=14" 'c'est un exempl, il faut copier coller votre ensemble de definition Next i mondoc.activeview.refresh
Y aurait-il par hasard un moyen pour que la valeur de l'ensemble de définition, ici "14" soit saisie par l'utilisateur ...? :-)
Merci encore ;-)
Dernière modification par GeoMax (Tue 21 December 2010 22:36)
Hors ligne
#5 Fri 08 August 2008 12:44
- nicolas valls
- Participant assidu
- Date d'inscription: 28 Oct 2005
- Messages: 154
Re: Définir un ensemble de définition de façon automatique
Oui en faisant comme ca :
je remets tout le code
Code:
Dim mondoc As IMxDocument, i As Integer dim monensemblededefinition as iFeatureLayerDefinition dim mavaleur as string 'si la valeur est un chiffre il faut mettre as integer mavaleur = InputBox("Quelle valeur voulez vous ?", "Ensemble de définition", "valeur par défaut") if mavaleur<>"" then Set mondoc = ThisDocument for i=0 to mondoc.FocusMap.LayerCount -1 set monensemblededefinition = mondoc.FocusMap.layer(i) monensemblededefinition.DefinitionExpression="[CODEID]=" & mavaleur & "" 'c'est un exempl, il faut copier coller votre ensemble de definition Next i mondoc.activeview.refresh else Msgbox "Vous avez annulé" end if
Attention cependant car si votre champ CODEID est de type texte, il faut que votre ensemble de définition soit : "[CODEID]='" & mavaleur &"'"
Hors ligne
#6 Fri 08 August 2008 12:46
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Re: Définir un ensemble de définition de façon automatique
J'ai trouvé, je poste ici pour en faire profiter les autres ^^
Code:
Private Sub UIButtonControl1_Click() Dim mondoc As IMxDocument, i As Integer Dim monensemblededefinition As IFeatureLayerDefinition Dim message, title, defaultvalue As String Dim saisie As String message = "Code ID ?" title = "Assisant carto" defaultvalue = "ID" saisie = InputBox(message, title, defaultvalue) Set mondoc = ThisDocument For i = 0 To mondoc.FocusMap.LayerCount - 1 Set monensemblededefinition = mondoc.FocusMap.Layer(i) monensemblededefinition.DefinitionExpression = "[CODEID]='" + saisie + "'" Next i mondoc.ActiveView.Refresh End Sub
Dernière modification par GeoMax (Tue 21 December 2010 22:36)
Hors ligne
#7 Fri 08 August 2008 14:03
- nicolas valls
- Participant assidu
- Date d'inscription: 28 Oct 2005
- Messages: 154
Re: Définir un ensemble de définition de façon automatique
La réponse que j'ai faite au dessus de la votre permet d'avoir un code plus propre et de pouvoir contrôler la saisie de l'utilisateur
Hors ligne
#8 Fri 08 August 2008 14:08
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Re: Définir un ensemble de définition de façon automatique
Merci !
J'ai également corrigé le précédent
[EDIT]
Ce script bug lorsque l'on utilise des groupes de couche apparemment ...
On obtient le message d'erreur suivant :
Run-time error '13':
Type mismatch
Y-a-t'il un moyen de pallier a ça ...?
Dernière modification par GeoMax (Tue 21 December 2010 22:36)
Hors ligne
#9 Fri 08 August 2008 14:56
- nicolas valls
- Participant assidu
- Date d'inscription: 28 Oct 2005
- Messages: 154
Re: Définir un ensemble de définition de façon automatique
Effectivement quand les couches sont groupées ca ne marche pas donc voila le nouveau code :
Code:
Sub test() Dim mondoc As IMxDocument, i As Integer Dim monensemblededefinition As IFeatureLayerDefinition Dim message, title, defaultvalue As String Dim saisie As String Dim macarte As IMap, macouche As ILayer Dim identifiant As New UID Dim collection_couche As IEnumLayer message = "Code ID ?" title = "Assisant carto" defaultvalue = "ID" saisie = InputBox(message, title, defaultvalue) Set mondoc = ThisDocument Set macarte = mondoc.FocusMap identifiant = "{E156D7E5-22AF-11D3-9F99-00C04F6BC78E}" Set collection_couche = macarte.Layers(identifiant, True) collection_couche.Reset Set macouche = collection_couche.Next Do While Not macouche Is Nothing Set monensemblededefinition = macouche monensemblededefinition.DefinitionExpression = "[CODEID]='" & saisie & "'" Set macouche = collection_couche.Next Loop mondoc.ActiveView.Refresh End Sub
Par contre attention ça ne mettra une ensemble de définition qu'aux couches carto (pas aux tables de géodatabase ni Dbase).
Voila, tenez moi au courant si ça fonctionne
Hors ligne
#10 Fri 08 August 2008 15:12
- GeoMax
- Participant occasionnel
- Lieu: Toulouse
- Date d'inscription: 15 Feb 2006
- Messages: 21
Re: Définir un ensemble de définition de façon automatique
Ça marche parfaitement bien !
Merci beaucoup pour votre aide
Dernière modification par GeoMax (Tue 21 December 2010 22:36)
Hors ligne