Add several raster files (ecw) from one folder, Symbology RGB

4614
11
Jump to solution
06-16-2016 05:03 AM
SilvanStöckli
New Contributor III

Hello

I'd like to add several raster files (format: .ecw) from one folder with several subfolders to my mxd-file. It works fine with the following code:

workspace = r"C:\Workspace"   #Workspace
... 
... 
... #Code
... import arcpy, os
... 
... mxd = arcpy.mapping.MapDocument("CURRENT")
... df = arcpy.mapping.ListDataFrames(mxd, "*")[0]
... 
... walk = arcpy.da.Walk(workspace)
... 
... for dirpath, dirnames, filenames in walk:
...     for filename in filenames:
...         arcpy.mapping.AddLayer(df, arcpy.mapping.Layer(os.path.join(dirpath, filename)))

The Problem is, that after adding them like this, they appear with a symbology "stretched values along a color ramp" but they should be drawn as "RGB composite".

Can someone help me?

0 Kudos
11 Replies
Luke_Pinner
MVP Regular Contributor

I got it to work by adding the ECWs, then updating the stretched layer using a template RGB .lyr file:

import os

workspace = r"C:\Temp\Test"  #Workspace 
rgb_lyr = arcpy.mapping.Layer(r"C:\Temp\rgb.lyr")

mxd = arcpy.mapping.MapDocument("CURRENT") 
df = mxd.activeDataFrame

walk = arcpy.da.Walk(workspace) 

for dirpath, dirnames, filenames in walk: 
    for filename in filenames: 
        print os.path.join(dirpath, filename)
        lyr = arcpy.mapping.Layer(os.path.join(dirpath, filename))
        arcpy.mapping.AddLayer(df, lyr) 
        updateLayer = arcpy.mapping.ListLayers(mxd, lyr.name, df)[0]
        arcpy.mapping.UpdateLayer(df, updateLayer, rgb_lyr)

You could also use replaceDatasource on the template layer:

import os

workspace = r"C:\Temp\Test"   #Workspace  
rgb_lyr = r"C:\Temp\rgb.lyr"

mxd = arcpy.mapping.MapDocument("CURRENT")  
df = mxd.activeDataFrame
  
walk = arcpy.da.Walk(workspace)  
  
for dirpath, dirnames, filenames in walk:  
    for filename in filenames:  
        lyr = arcpy.mapping.Layer(rgb_lyr)
        lyr.replaceDataSource (dirpath, 'RASTER_WORKSPACE', filename)
        lyr.name = filename
        arcpy.mapping.AddLayer(df, lyr)  
SilvanStöckli
New Contributor III

that's perfect!

Thanks a lot! 😄

0 Kudos