2016-11-16 2 views
0

J'ai un fichier ArcMap (.MXD) que je veux rechercher pour ses couches et ensuite choisir un calque et Python me montre les noms des champs de la table attributaire de ce calque.Liste les noms des champs de couche dans le fichier MXD

J'ai été si loin que Python (ArcPy) me liste les noms de calques du mxd mais je n'arrive pas à comprendre comment obtenir les noms de champs.

Dans ArcMap lui-même, je peux facilement le faire de cette façon:

fields = arcpy.ListFields(Layer) 
for field in fields: 
    print field.name 

mais comment dois-je accomplir qu'en dehors de ArcMap par un fichier MXD? J'ai beaucoup cherché et n'ai rien trouvé, alors j'attends votre aide avec impatience! Merci beaucoup!

Répondre

1

Accédez au fichier mxd via la méthode arcpy.mapping.MapDocument. Ensuite, obtenir le nom et ouvrez la table des attributs

mxd = arcpy.mapping.MapDocument(r"path/Project.mxd") 
for df in arcpy.mapping.ListLayers(mxd): 
    print df.name 

Vous pouvez utiliser arcpy et exécuter un script python pour afficher la table fileds en utilisant la méthode ListFileds

import arcpy 
fieldList = arcpy.ListFields("path/shapefile.shp")  
for field in fieldList:  
    print field.baseName 
+0

Ouais pour un shapefile il est clair. Le point est de le faire avec un MXD et de pointer vers la couche à partir de là. Quelque chose comme 'arcpy.ListFields (mxd, Layer)', mais cela ne fonctionne pas. Une idée? – Khaled

+0

@Khaled ok j'ai ajouté l'option pour itérer les shapefiles du mxd –

+0

cette autre solution me donne alors seulement les couches du MXD. Je veux que Python ouvre le MXD, présentez-moi une liste de tous les calques dont je choisis un (GUI) et ensuite récupérez les champs de ce calque. Mais j'ai trouvé une solution (voir ci-dessous). J'ai dû en tromper. N'importe qui a une meilleure solution, est invité à le poster! – Khaled

0

Ok j'ai trouvé une bonne solution. Je récupère d'abord toutes les couches du fichier MXD, puis enregistre le nom et la source de chaque couche dans un dictionnaire. Ensuite, je vais choisir la couche que je veux à partir d'une interface graphique et ont vérifié que les noms de calques dans le dictionnaire à travers lequel je peux alors accéder aux noms de champs:

import arcpy 
mxd = arcpy.mapping.MapDocument(r"C:\MyMap.mxd") # loads my map 
df = arcpy.mapping.ListDataFrames(mxd) # checks out the dataframes 

layersources = {} # creates an empty dictionary 

for d in df: 
    layers = arcpy.mapping.ListLayers(mxd, "", d) # lists all available layers 

    for lyr in layers: 
     layersources[lyr.name] = lyr.dataSource # fills keys and values of the layers (names and sources) into the dictionary 

selecteditem = "the wanted layer" # this I choose from a GUI then, just defined it here as a variable for testing purposes 

fields = arcpy.ListFields(layersources[selecteditem]) # creates a list with all the fields from that layer 

for field in fields: # iterates through the list of fields 
    print field.name # and prints them one by one :-)