#1 Thu 25 February 2010 11:04
- papyrus
- Juste Inscrit !
- Date d'inscription: 24 Feb 2010
- Messages: 5
script python / masquer des champs
Bonjour à tous,
Je voudrai modifier un script récupéré sur Internet afin de masquer automatiquement certains champs sous ArcMap (version 9.3). Le script que j'ai récupéré permet de supprimer des champs et marche super bien, mais moi je voudrais le modifier pour qu'il ne fasse que les masquer...
Savez-vous quelle fonction je pourrai utiliser ? Voici le script en question en pièce jointe.
Merci à tous !
Hors ligne
#2 Thu 25 February 2010 16:04
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: script python / masquer des champs
Bonjour,
Je ne comprends pas trop bien votre attente.
Le script python que vous avez téléchargé fonctionne sans l'interface d'Arcgis.
La fonctionnalité qui permet de masquer ou non un champ est une propriété de l'interface utilisateur Arcgis. Il n'est pas possible de définir cette propriété directement au fichier Shape (enfin je crois). Ce n'est donc pas à partir d'un script python que vous aller parvenir à masquer un champ d'un fichier shape.
Il faudrait pour faire une telle manipulation utiliser les objets ...UI (User Interface) mais je ne pense pas que le géoprocesseur en python y est accès.
En effet les fonctionnalités du géoprocesseur sont limités par rapport aux développements basé sur les arcobjets
A+
Vous pouvez faire le test en masquant un champ depuis arcgis, puis en enregistant le shape et en le re-ouvrant. EN revanche un fichier mxd doit conserver l'apparence utilisateur.
Hors ligne
#3 Thu 25 February 2010 16:27
- papyrus
- Juste Inscrit !
- Date d'inscription: 24 Feb 2010
- Messages: 5
Re: script python / masquer des champs
Merci pour votre réponse !
J'ai en effet un script qui fonctionne sans l'interface d'Arcgis, mais qui remplace une fonction d'ArcMap puisque la fonction "supprimer un champ" existe dans l'interface d'ArcGis. Je pensais donc pouvoir modifier le script pour faire en sorte que la suppression devienne juste un masquage.
J'ai aussi contacté la personne qui a crée ce script, et elle m'a dit qu'elle n'avait pas le temps de modifier le script mais ne m'a pas dit que c'était impossible...
Ce que je voudrais c'est que, dans ma table attributaire sous ArcMap, au lieu de devoir masquer les champs "à la main" et un par un, j'ai un petit script qui me permette de faire ça en une opération (étant donné que je vais devoir masquer toujours les mêmes champs).
Apparemment je suis vraiment sur la mauvaise piste, mais je suis novice et nulle en Python donc j'avoue que je suis un peu perdue !
Hors ligne
#4 Thu 25 February 2010 16:40
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: script python / masquer des champs
Salut,
Et avec une requète SQL ---> le "select" t'affiche uniquement les champs que tu veux.
A+
Joël
Hors ligne
#5 Thu 25 February 2010 16:52
- papyrus
- Juste Inscrit !
- Date d'inscription: 24 Feb 2010
- Messages: 5
Re: script python / masquer des champs
Oui mais avec une requête SQL je suis obligée de refaire la manipulation à chaque fois ...
Si y'avait que moi je me casserai pas la tête avec un script !
Mais c'est une bonne idée en tout cas je vais essayer ça et j'espère que ça suffira !!
MERCI !!
Hors ligne
#6 Thu 25 February 2010 17:18
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: script python / masquer des champs
Tu peux enregistrer une requète SQL.
Et tu peux exporter une couche avec uniquement les champs que tu veux voir.
A+
Joël
Hors ligne
#7 Fri 26 February 2010 11:20
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: script python / masquer des champs
Bonjour ,
J'ai fais un rapide test et oui c'est bien cela, le fait de masquer un champ ne peut exister que dans l'interface ArcMap.
J'ai rédigé un bout de code en VBA pour vous donner un exmple de la syntaxe a utiliser.
il vous suffit de copier ce code dans l'édituer visual basic d'Arcmap (Alt + F11) et de l'executer.
Avec très peu de modifications, vous pourrez l'adapter facilement à votre besoin.
Code:
Private Sub champ() Dim doc As IMxDocument Set doc = ThisDocument Dim pLayer As ILayer Set pLayer = doc.FocusMap.Layer(0) ' s'applique à la première couche Dim pTable As ITable Set pTable = pLayer Dim pTableFields As ITableFields Set pTableFields = pTable Dim nom_champ As String 'je récuère le nom du champ dans une variable nom_champ = InputBox("Saisissez le nom du champ à masquer :", "COUCHE " + pLayer.Name) If pTableFields.FindField(nom_champ) >= 0 Then 'je retrouve l'index du champ grace à son nom Dim pFieldInfo As IFieldInfo Set pFieldInfo = pTableFields.FieldInfo(pTableFields.FindField(nom_champ)) pFieldInfo.Visible = False 'modifier içi à TRUE pour rendre le champ visible If pFieldInfo.Visible = True Then MsgBox "champ " + nom_champ + " visible" Else MsgBox "champ " + nom_champ + " invisible" End If Else MsgBox "le nom du champ inscrit n'existe pas dans la base !" + Chr(10) + "Ne pas condondre avec l'alias", vbExclamation End If End Sub
Voila
A+
Hors ligne
#8 Fri 26 February 2010 11:26
- papyrus
- Juste Inscrit !
- Date d'inscription: 24 Feb 2010
- Messages: 5
Re: script python / masquer des champs
Waouh mais c'est super sympa !!
Merci beaucoup je vais essayer ça tout de suite et essayer de faire mes modifications !!
Je vous dirai ce que ça me donne !
Encore MERCI !!
A +
Hors ligne
#9 Fri 26 February 2010 15:05
- papyrus
- Juste Inscrit !
- Date d'inscription: 24 Feb 2010
- Messages: 5
Re: script python / masquer des champs
Merci Nicolas ton code marche super bien !!
Je vais maintenant essayer de trouver comment le modifier pour avoir le choix de la table sur laquelle masquer / afficher les données et aussi pour pouvoir supprimer plusieurs champs en même temps !
Mais merci pour ce code qui est déjà un grand pas pour moi qui n'y connais rien !
Hors ligne
#10 Fri 26 February 2010 15:39
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: script python / masquer des champs
Mais de rien
Hors ligne
#11 Fri 26 February 2010 16:27
- Razorbak
- Participant assidu
- Lieu: Clermont Ferrand
- Date d'inscription: 7 Oct 2007
- Messages: 505
Re: script python / masquer des champs
Bonjour,
Je rejoins ce post car j'essaie de faire la même chose...mais sur QGis...mais vous allez peut-être pouvoir me renseigner.
En fait, je dispose d'une table ayant une bonne centaine de champs. Et donc, j'aimerais pouvoir masquer les champs qui ne m'intéressent pas, mais sans effacer les autres (car ils me serviront à un moment donné).
Est-ce que ce bout de code peut être utilisé dans QGis et si oui, comment ?
Ou bien dois-je plutôt créer ce type de post dans la section Geolibre ?
Je vous remercie. Bonne fin de journée
Hors ligne
#12 Fri 26 February 2010 16:43
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: script python / masquer des champs
Salut,
Ma soluce en passant par du SQL reste valable sur Qgis
Maintenant pour le code en VB je ne sais pas.
A+
Joël
Hors ligne
#13 Fri 26 February 2010 16:51
- n314
- Participant assidu
- Date d'inscription: 6 Sep 2005
- Messages: 706
Re: script python / masquer des champs
Salut,
Ma soluce en passant par du SQL reste valable sur Qgis
Maintenant pour le code en VB je ne sais pas.
A+
Joël
C'est du code vba, donc lié à arcgis. Le vba, pour simplifier, permet la manipulation dans une syntaxe VB des objets et classes d'un logiciel. Le code est donc lié au logiciel en question
http://fr.wikipedia.org/wiki/Visual_Bas … plications
La réponse est donc: non...
Dernière modification par n314 (Fri 26 February 2010 16:52)
Hors ligne
#14 Fri 26 February 2010 17:14
- Razorbak
- Participant assidu
- Lieu: Clermont Ferrand
- Date d'inscription: 7 Oct 2007
- Messages: 505
Re: script python / masquer des champs
Merci Spacejo.
Cependant, pourrais-tu me dire où se trouve la fenêtre où je peux écrire une requête SQL ? Dans la recherche multicritère d'une couche ?
Merci
Hors ligne
#15 Fri 26 February 2010 17:35
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: script python / masquer des champs
dans Qgis? aucune idée mais regarde ceci --> http://www.forumsig.org/showthread.php? … amp;page=2
notament le post #19 -->
Tu peux réaliser des requêtes en ouvrant la table attributaire, en bas il y a un formulaire pour réaliser de simple requête et un bouton 'avancé'
Je sais seulement que le SQL est généralement dans tous les log SIG (il me semble)
Le "select" en début de requète te donneras l'affichage des champs que tu désires.
A+
Joël
Dernière modification par Spacejo (Fri 26 February 2010 17:40)
Hors ligne
#16 Sat 27 February 2010 10:08
Re: script python / masquer des champs
Est-ce que ce bout de code peut être utilisé dans QGis et si oui, comment ?
Ou bien dois-je plutôt créer ce type de post dans la section Geolibre ?
Bonjour,
Vous aurez sans doute plus de réponses en posant cette question dans la section Geolibre.
Je ne suis pas certains que les férus de QGis lisent le forum ESRI
A+
Franck
NB : j'ai créé une discussion dans Geolibre : http://georezo.net/forum/viewtopic.php? … 01#p160601
Hors ligne
#17 Sat 27 February 2010 10:19
Re: script python / masquer des champs
Re-bonjour,
Pour répondre sur le fond de la question : Est-il possible par un script Python fonctionnant en dehors d'ArcGIS via GProcessor de masquer les champs d'un shapefile ?
Il me semble que ce n'est pas possible, par contre il est possible de générer un fichier de couche (.lyr) dans lequel on peut masquer certain champ :
1 - créer la couche : http://webhelp.esri.com/arcgisdesktop/9 … agement%29
2 - sauvegarder cette couche dans un fichier LYR sur le disque : http://webhelp.esri.com/arcgisdesktop/9 … agement%29
Ensuite, au lieu d'ajouter les shapefiles dans un document ArcMap, on ajouter les lyrs et les champs seront masqués.
Bonne chance
Franck
Hors ligne
#18 Mon 01 March 2010 09:39
- dominique.lys
- Participant assidu
- Date d'inscription: 5 Oct 2006
- Messages: 473
- Site web
Re: script python / masquer des champs
je tiens à préciser que sous ArcGIS la premiere partie d'une requête est toujours "SELECT * FROM", il est donc impossible de définir les champs que l'on souhaite afficher, tout comme certaines clauses comme le GROUP BY ne peuvent être appliquées.
Voir ici
SELECT * FROM forms the first part of the SQL expression and is automatically supplied for you. Because you are selecting columns as a whole, you cannot restrict the SELECT to return only some of the columns in the corresponding table; thus, the hard-coded SELECT * syntax. For this reason, keywords like DISTINCT, ORDER BY, GROUP BY, and so on, cannot be used readily in a SQL query except when using subqueries.
Depending on the dialog box in which you are building your query, the name of the layer or table may be supplied for you or you may need to choose it from a drop-down list.
The next part of the expression is the WHERE clause, which is the part you must build.
QGIS, il me semble, fonctionne sur le même principe; à ma connaissance seul Mapinfo permet d'interpréter directement du "vrai" code SQL
Hors ligne
#19 Mon 01 March 2010 09:44
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: script python / masquer des champs
Même en passant par la fenêtre ligne de commande?
Dernière modification par Spacejo (Mon 01 March 2010 10:05)
Hors ligne