用arcpy将多个shapefile添加到MXD中
我正在尝试使用这里找到的一些代码,将多个文件添加到一个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地图显示操作需要确保在“地理处理”菜单下的“地理处理选项”里,勾选了“将地理处理操作的结果添加到显示中”这个选项。