用arcpy将多个shapefile添加到MXD中

1 投票
3 回答
4234 浏览
提问于 2025-04-17 19:32

我正在尝试使用这里找到的一些代码,将多个文件添加到一个MXD文件中:如何通过Python脚本在ArcGIS中添加一个形状文件?

下面的代码没有返回任何错误,但似乎没有任何形状文件被添加到空的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

看起来你快成功了,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')
0

可能是你漏掉了这两行重要的代码:

arcpy.RefreshActiveView()
arcpy.RefreshTOC()
0

没有文件可以操作,很难确定问题所在。不过,上面这段代码可能没有报错但也不显示任何内容的一个原因是,很多arcgis地图显示操作需要确保在“地理处理”菜单下的“地理处理选项”里,勾选了“将地理处理操作的结果添加到显示中”这个选项。

撰写回答