使用arcpy将多个shapefile添加到MXD

时间:2013-03-18 18:55:36

标签: python arcgis arcpy

我正在尝试使用此处的一些代码将多个文件添加到MXD文件中: How do I add a shapefile in ArcGIS via python scripting?

下面的代码不会返回任何错误,但是没有一个shapefile似乎被添加到空白的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)

3 个答案:

答案 0 :(得分:0)

很难知道没有文件可以玩,但上面的代码可能没有给出错误但没有显示任何内容的一个原因是,对于许多arcgis地图显示操作,你必须确保arcgis地理处理选项'将地理处理操作的结果添加到地理处理>下的'显示'地理处理选项已开启。

答案 1 :(得分:0)

可能你错过了这两条重要的路线:

arcpy.RefreshActiveView()
arcpy.RefreshTOC()

答案 2 :(得分:0)

看起来你几乎就在那里,如果您的代码在活动会话中运行,Lucas和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')