1

I am trying to add multiple files to an MXD file using some of the code found here: How do I add a shapefile in ArcGIS via python scripting?

The code below does not return any errors, however none of the shapefiles seem to get added to the blank mxd document.

Any help as to why this is not working would be appreciated.

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)
Community
  • 1
  • 1
David
  • 759
  • 2
  • 9
  • 19

3 Answers3

0

It is hard to know without files to play with, but one reason the code above may not be giving an error but not displaying anything is that for many arcgis map display operations, you have to make sure that the arcgis geoprocessing option of 'add results of geoprocessing operations to the display' under geoprocessing> geoprocessing options is turned on.

Lucas Fortini
  • 2,420
  • 15
  • 26
0

It could be that you are missing those two important lines:

arcpy.RefreshActiveView()
arcpy.RefreshTOC()
0

Looks like you're almost there and that both Lucas and BelowZero are offering good suggestions if your code is running w/in a active session. If it's creating an *.mxd for later use, I don't see where the results are saved. Here's some simpler sample code, note the last line:

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')
Roland
  • 499
  • 6
  • 16