2013-03-18 4 views
1

Я пытаюсь добавить несколько файлов в файл MXD, используя некоторые из кода здесь: How do I add a shapefile in ArcGIS via python scripting?Добавить несколько шейп в МКД с arcpy

ниже код не возвращает никаких ошибок, однако ни один из шейпфайлы не кажется, для добавления в пустой документ mxd.

Любая помощь относительно того, почему это не работает, будет оценена по достоинству.

import arcpy 
import arcpy.mapping 
from shutil import copyfile 
from os import listdir 
from os.path import isfile, join 

def AddAllShapeFilesToNewMXD(source_directory): 
    # Source file is the template that the will be copied to the directory with 
    # All the shape files in it. 
    source_file = 'M:\Ops Field Map\Blank Map.mxd' 

    # Output file is the name of the file that will have the shape files added to it 
    output_file = 'GPS_Map' 
    rev_count = 0 
    while isfile(join(source_directory, output_file + '.mxd')): 
     #Make sure a unique file is created 
     print ('File ' + output_file + '.mxd exists.'), 
     rev_count += 1 
     output_file = output_file + '_rev' + str(rev_count) 
     print ('Trying ' + output_file + '.mxd ...') 

    # Create the destination file. This is the file the shape files are added to 
    destination_file = join(source_directory, output_file + '.mxd') 
    copyfile(source_file, destination_file) 
    print 'MXD file created: ' + destination_file 

    # Get the map doccument 
    mxd = arcpy.mapping.MapDocument(destination_file) 
    # Get the data frame 
    data_frame = arcpy.mapping.ListDataFrames(mxd, "*")[0] 

    # Get a list of all the shape files 
    shp_files = [ f for f in listdir(source_directory) if isfile(join(source_directory, f)) and f.endswith('.shp') ] 

    # Add all the shapefiles to the mxd file 
    for s in shp_files: 
     new_layer_full_path = join(source_directory, s) 
     new_layer = arcpy.mapping.Layer(new_layer_full_path) 
     arcpy.mapping.AddLayer(data_frame, new_layer, "BOTTOM") 
     print 'Layer added ' + new_layer_full_path 
     del new_layer 

    return True 

directory = 'C:\Users\gps\Desktop\dd test' 
AddAllShapeFilesToNewMXD(directory) 
+0

Появляются ли утверждения печати (т.е. «Слой добавлен»)? Если да, можете ли вы опубликовать этот вывод? – garnertb

ответ

0

Трудно знать, без файлов, чтобы играть, но одна причина, по которой выше код не может давать ошибку, но ничего не показывает, что для многих операций ArcGIS карты отображения, вы должны убедиться, что arcgis опция геообработки «добавить результаты геообработки на дисплей» в разделе «Геообработка»> параметры геообработки включены.

0

Это может быть, что вам не хватает этих двух важных линий:

arcpy.RefreshActiveView() 
arcpy.RefreshTOC() 
0

Похоже, вы почти там, и что как Лукас и BelowZero предлагают хорошие предложения, если ваш код выполняется ж/в активной сессия. Если он создает * .mxd для последующего использования, я не вижу, где результаты сохраняются. Вот несколько простых примеров кода, обратите внимание на последнюю строку:

mxd = arcpy.mapping.MapDocument(srcdir+'/data_bin/Untitled.mxd') 
data_frame = arcpy.mapping.ListDataFrames(mxd)[0] 
mxd.activeView = data_frame.name 

flowlinesLyr=arcpy.mapping.Layer('..\\NHDPlus\\nhdflowline_en') 
flowlinesLyr.name='NHDPlus Flowlines' 
arcpy.mapping.AddLayer (data_frame, flowlinesLyr,'TOP') 

gagesEventLyr=arcpy.mapping.Layer('..\\NHDPlus\\StreamGageEvent') 
gagesEventLyr.name='Original stream gage locations' 
arcpy.mapping.AddLayer (data_frame, gagesEventLyr,'TOP') 

mxd.saveACopy(datadir+'\NHDPlus'+Region+'_Gage_QAQC.mxd')