I have a collection of rasters (all in separate geodatabases) that I am trying to put into a MOSAIC using a python script. I have a bunch of these to make so I was thinking that the easiest way to do it would be to create a .lyr file containing all the rasters I want to add and then have a script read through that layer file and add the rasters using AddRastersToMosaicDataset_management. The problem is that I haven't been able to read through the contents of a layer file. This line seems to break my code: layerfile=arcpy.mapping.MapDocument(r"S:\path_to_layer.lyr")
. I try to catch the error message with except: print arcpy.GetMessages()
but nothing prints.
I thought I'd try the other approach and use an mxd instead of a layer file. I created an mxd with just the rasters I wanted to add, but I couldn't read the path of the raster (shapefiles did work though). Here is my code:
import arcpy
mxd=arcpy.mapping.MapDocument(r"S:\path_to_mxd.mxd")
dataframes=arcpy.mapping.ListDataFrames(mxd)
for dataframe in dataframes:
for lyr in arcpy.mapping.ListLayers(mxd, "", dataframe):
desc = arcpy.Describe(lyr)
print desc.catalogPath
#print(arcpy.Describe(lyr).catalogPath)
This will print a path to a shapefile, but gives IOError: "Raster_Name" does not exist
when the layer is a raster.
At the moment my only working solution is to manually generate a text file with the path to each of the rasters and read through that line by line. I don't want to have to generate a text file for every MOSAIC I need to create. I feel like I've got 4 possible paths I could go down and I'm getting stuck on each one. Can anyone help me either;
- read through a .lyr file or an mxd and extract the paths of the raster datasets; or
- convert a .lyr or an mxd to a text file listing the paths of the datasets contained?
Best Answer
Your code tries to get the
catalogPath
property of the group layer containing your rasters, which doesn't exist. Instead, I would retrieve thedataSource
property of the Layer, after testing that it is indeed applicable with thesupports()
method (group layers don't support this property).Your code would look like this:
See the help page for Layer properties and methods for more details.
If you want to follow @Hélène's suggestion and list all rasters in a gdb, use the arcpy.ListRasters() function. If all your rasters are in the same workspace, this would indeed be more straightforward than putting everything in an mxd to get your list.