2016-11-16 3 views
0

У меня есть файл ArcMap (.MXD), который я хочу найти для его слоев, а затем выберите слой и пусть Python покажет мне имена полей таблицы атрибутов этого слоя.Укажите имена полей слоя в файле MXD

Я до сих пор понял, что Python (ArcPy) перечисляет мне имена слоев mxd, но я не могу понять, как получить имена полей.

В самом я легко могу сделать это таким образом ArcMap:

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

но как я выполняю, что вне ArcMap с помощью файла MXD? Я много искал и ничего не придумал, поэтому я с нетерпением жду вашей помощи! Большое спасибо!

ответ

1

Доступ к mxd через метод arcpy.mapping.MapDocument. Затем получить имя и открыть таблицу атрибутов

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

Вы можете использовать arcpy и запустить питон скрипт, чтобы показать fileds таблицы с помощью метода ListFileds

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

Да, для шейп-файла это понятно. Дело в том, чтобы сделать это с помощью MXD и указать на слой оттуда. Что-то вроде 'arcpy.ListFields (mxd, Layer)', но это не работает. Есть идеи? – Khaled

+0

@Khaled ok Я добавил параметр для итерации шейп-файлов из mxd –

+0

, чтобы другое решение затем дало мне только слои MXD. Я хочу, чтобы Python открывал MXD, представил мне список всех слоев, из которых я выбираю один (GUI), а затем возвращаю поля этого слоя. Но я нашел решение (см. Ниже). Пришлось обмануть некоторых. У любого есть лучшее решение, можно отправить его! – Khaled

0

Ok я нашел хорошее решение. Сначала я получаю все слои из файла MXD, а затем сохраняю имя и источник каждого слоя в словаре. Затем я выберу слой, который я хочу из графического интерфейса, и проверил его с именами слоев в словаре, через которые я могу получить доступ к именам полей:

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 :-)