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é ?

Annonce

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


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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 !! smile

Merci beaucoup je vais essayer ça tout de suite et essayer de faire mes modifications !! smile

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 !! smile

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 ! smile

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 wink

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 smile
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: 698

Re: script python / masquer des champs

Spacejo a écrit:

Salut,

Ma soluce en passant par du SQL reste valable sur Qgis smile
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

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: script python / masquer des champs

Razorbak a écrit:

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 smile

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

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

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

 

Pied de page des forums

Powered by FluxBB