Creating a raster unique value renderer
Do the following steps to create a raster unique value renderer:
- Get the raster attribute table and table size.
- Create colors for each unique value.
- Create a unique value renderer.
- Set the renderer properties.
See the following code example:
public IRasterRenderer UnqueValueRenderer(ESRI.ArcGIS.Geodatabase.IRasterDataset
rasterDataset)
{
try
{
//Get the raster attribute table and the size of the table.
IRaster2 raster = (IRaster2)rasterDataset.CreateDefaultRaster();
ITable rasterTable = raster.AttributeTable;
if (rasterTable == null)
{
return null;
}
int tableRows = rasterTable.RowCount(null);
//Create colors for each unique value.
IRandomColorRamp colorRamp = new RandomColorRampClass();
colorRamp.Size = tableRows;
colorRamp.Seed = 100;
bool createColorRamp;
colorRamp.CreateRamp(out createColorRamp);
if (createColorRamp == false)
{
return null;
}
//Create a unique value renderer.
IRasterUniqueValueRenderer uvRenderer = new RasterUniqueValueRendererClass();
IRasterRenderer rasterRenderer = (IRasterRenderer)uvRenderer;
rasterRenderer.Raster = rasterDataset.CreateDefaultRaster();
rasterRenderer.Update();
//Set the renderer properties.
uvRenderer.HeadingCount = 1;
uvRenderer.set_Heading(0, "All Data Value");
uvRenderer.set_ClassCount(0, tableRows);
uvRenderer.Field = "Value"; //Or any other field in the table.
IRow row;
ISimpleFillSymbol fillSymbol;
for (int i = 0; i < tableRows; i++)
{
row = rasterTable.GetRow(i);
uvRenderer.AddValue(0, i, Convert.ToByte(row.get_Value(1)));
// Assuming the raster is 8-bit.
uvRenderer.set_Label(0, i, Convert.ToString(row.get_Value(1)));
fillSymbol = new SimpleFillSymbolClass();
fillSymbol.Color = colorRamp.get_Color(i);
uvRenderer.set_Symbol(0, i, (ISymbol)fillSymbol);
}
return rasterRenderer;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
return null;
}
}
[VB.NET]
Public Function UnqueValueRenderer(ByVal rasterDataset As ESRI.ArcGIS.GeodataMyBase.IRasterDataset) As IRasterRenderer
Try
'Get the raster attribute table and the size of the table.
Dim raster As IRaster2 = CType(rasterDataset.CreateDefaultRaster(), IRaster2)
Dim rasterTable As ITable = raster.AttributeTable
If rasterTable Is Nothing Then
Return Nothing
End If
Dim tableRows As Integer = rasterTable.RowCount(Nothing)
'Create colors for each unique value.
Dim colorRamp As IRandomColorRamp = New RandomColorRampClass()
colorRamp.Size = tableRows
colorRamp.Seed = 100
Dim createColorRamp As Boolean
colorRamp.CreateRamp( createColorRamp)
If createColorRamp = False Then
Return Nothing
End If
'Create a unique value renderer.
Dim uvRenderer As IRasterUniqueValueRenderer = New RasterUniqueValueRendererClass()
Dim rasterRenderer As IRasterRenderer = CType(uvRenderer, IRasterRenderer)
rasterRenderer.Raster = rasterDataset.CreateDefaultRaster()
rasterRenderer.Update()
'Set the renderer properties.
uvRenderer.HeadingCount = 1
uvRenderer.set_Heading(0, "All Data Value")
uvRenderer.set_ClassCount(0, tableRows)
uvRenderer.Field = "Value" 'Or any other field in the table.
Dim row As IRow
Dim fillSymbol As ISimpleFillSymbol
Dim i As Integer
For i = 0 To tableRows - 1 Step i + 1
row = rasterTable.GetRow(i)
Dim ' Assuming the raster is 8-bit As uvRenderer.AddValue(0,i,Convert.ToByte(row.get_Value(1))).
uvRenderer.set_Label(0, i, Convert.ToString(row.get_Value(1)))
fillSymbol = New SimpleFillSymbolClass()
fillSymbol.Color = colorRamp.get_Color(i)
uvRenderer.set_Symbol(0, i, CType(fillSymbol, ISymbol))
Next
Return rasterRenderer
Catch ex As Exception
System.Diagnostics.Debug.WriteLine(ex.Message)
Return Nothing
End Try
End Function
}
See Also:
How to create a raster layerTo use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
ESRI.ArcGIS.System (ESRI.ArcGIS.esriSystem)ESRI.ArcGIS.Display ESRI.ArcGIS.Geometry ESRI.ArcGIS.DataSourcesGDB ESRI.ArcGIS.Geodatabase ESRI.ArcGIS.DataSourcesRaster ESRI.ArcGIS.Carto
Development licensing | Deployment licensing |
---|---|
ArcGIS for Desktop Standard | ArcGIS for Desktop Advanced |
ArcGIS for Desktop Standard | ArcGIS for Desktop Standard |
ArcGIS for Desktop Basic | ArcGIS for Desktop Basic |
Engine Developer Kit | Engine |