About the Create a Raster Function template Sample
[C#]
CreateRasterFunctionTemplate.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ESRI.ArcGIS;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.DataSourcesRaster;
namespace RasterSamples
{
class CreateRasterFunctionTemplate
{
[STAThread]
static void Main(string[] args)
{
ESRI.ArcGIS.esriSystem.AoInitialize aoInit;
#region Initialize License
try
{
Console.WriteLine("Obtaining license");
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop);
aoInit = new AoInitializeClass();
esriLicenseStatus licStatus = aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcView);
Console.WriteLine("Ready with license.");
}
catch (Exception exc)
{
// If it fails at this point, shutdown the test and ignore any subsequent errors.
Console.WriteLine(exc.Message);
return;
}
#endregion
try
{
#region Specify input directory and dataset name
// The directory which contains the Panchromatic Image.
string panDir = @"C:\Data\QB\Pan";
// The directory which contains the Multispectral Image.
string rgbDir = @"C:\Data\QB\MS";
string panImageName = "05JAN27104436-P1BS-005533787010_01_P002.TIF";
string rgbImageName = "05JAN27104436-M1BS-005533787010_01_P002.TIF";
// Output filename.
string outputDataset = @"c:\Temp\QBTemplateCS.afr";
#endregion
#region Initialize
// Setup Workspaces.
Type factoryType = Type.GetTypeFromProgID("esriDataSourcesRaster.RasterWorkspaceFactory");
IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);
IRasterWorkspace panRasterWorkspace = (IRasterWorkspace)workspaceFactory.OpenFromFile(panDir, 0);
IRasterWorkspace rgbRasterWorkspace = (IRasterWorkspace)workspaceFactory.OpenFromFile(rgbDir, 0);
// Open Datasets
IRasterDataset panDataset = panRasterWorkspace.OpenRasterDataset(panImageName);
IRasterDataset rgbDataset = rgbRasterWorkspace.OpenRasterDataset(rgbImageName);
#endregion
#region Create Variables
// Create one variable of type IRasterFunctionVariable for each
// Raster Dataset opened above
// Create a new Raster Function Variable
IRasterFunctionVariable panVar = new RasterFunctionVariableClass();
// Set the name of the variable
panVar.Name = "panImage";
// Describe the variable
panVar.Description = "Panchromatic Image to be used for pansharpening";
// Specify whether it represents a dataset
panVar.IsDataset = true;
// Create a new Raster Function Variable
IRasterFunctionVariable rgbVar = new RasterFunctionVariableClass();
// Set the name of the variable
rgbVar.Name = "rgbImage";
// Describe the variable
rgbVar.Description = "Multispectral Image to be used for pansharpening";
// Specify whether it represents a dataset
rgbVar.IsDataset = true;
#endregion
#region Prepare the Pan Image
// Setup statistics for each band
IArray statsArrayPan = new ArrayClass();
IRasterStatistics statsPanBand = new RasterStatisticsClass();
statsPanBand.Minimum = 1;
statsPanBand.Maximum = 2047;
statsArrayPan.Add(statsPanBand);
// Create the arguments object for the stretching function
IStretchFunctionArguments stretchingPanFunctionArguements = new StretchFunctionArgumentsClass();
// Set the stretching type
stretchingPanFunctionArguements.StretchType =
esriRasterStretchType.esriRasterStretchMinimumMaximum;
// Set the statistics created above
stretchingPanFunctionArguements.Statistics = statsArrayPan;
// Set the input raster, in this case, the variable for the Pan Image
stretchingPanFunctionArguements.Raster = panVar;
// Create the function object to stretch the Pan Image.
IRasterFunction stretchingPanFunction = new StretchFunction();
// Create a Raster Function Template object for the stretch function
IRasterFunctionTemplate stretchingPanFunctionT = new RasterFunctionTemplateClass();
// Set the function on the template
stretchingPanFunctionT.Function = (IRasterFunction)stretchingPanFunction;
// Set the arguments for the function
stretchingPanFunctionT.Arguments = stretchingPanFunctionArguements;
#endregion
#region Prepare the Multispectral (RGB) Image
// Create an array which defines the order of bands
ILongArray bandIDs = new LongArrayClass();
bandIDs.Add(2);
bandIDs.Add(1);
bandIDs.Add(0);
// Create an Extract Band Function Arguments object
IExtractBandFunctionArguments extractRgbBandFunctionArgs = (IExtractBandFunctionArguments)
new ExtractBandFunctionArguments();
// Set the order of bands of the output
extractRgbBandFunctionArgs.BandIDs = bandIDs;
// Set the input raster, in this case the variable for the Multispectral Image
extractRgbBandFunctionArgs.Raster = rgbVar;
// Create the Extract Band Function object
IRasterFunction extractRgbBandFunction = new ExtractBandFunction();
// Create a Raster Function Template object for the function created above
IRasterFunctionTemplate extractRgbBandFunctionT = new RasterFunctionTemplateClass();
// Set the function on the template
extractRgbBandFunctionT.Function = (IRasterFunction)extractRgbBandFunction;
// Set the arguments for the function
extractRgbBandFunctionT.Arguments = extractRgbBandFunctionArgs;
// Setup statistics for each band
IArray statsArray = new ArrayClass();
IRasterStatistics statsMulBand1 = new RasterStatisticsClass();
statsMulBand1.Minimum = 100;
statsMulBand1.Maximum = 1721;
statsArray.Add(statsMulBand1);
IRasterStatistics statsMulBand2 = new RasterStatisticsClass();
statsMulBand2.Minimum = 95;
statsMulBand2.Maximum = 2047;
statsArray.Add(statsMulBand2);
IRasterStatistics statsMulBand3 = new RasterStatisticsClass();
statsMulBand3.Minimum = 34;
statsMulBand3.Maximum = 2006;
statsArray.Add(statsMulBand3);
// Create a stretching function for the multispectral image
IRasterFunction stretchingRGBFunction = new StretchFunction();
// Create an arguments object for the stretch function
IStretchFunctionArguments stretchingRGBFunctionArguments =
new StretchFunctionArgumentsClass();
// Set the type of stretchings to perform
stretchingRGBFunctionArguments.StretchType =
esriRasterStretchType.esriRasterStretchMinimumMaximum;
// Set the statistics created above
stretchingRGBFunctionArguments.Statistics = statsArray;
// Set the extract band function template created above as the input
stretchingRGBFunctionArguments.Raster = extractRgbBandFunctionT;
// Create a Raster Function Template object for the function created above
IRasterFunctionTemplate stretchingRGBFunctionT = new RasterFunctionTemplateClass();
// Set the function on the template
stretchingRGBFunctionT.Function = (IRasterFunction)stretchingRGBFunction;
// Set the arguments for the function
stretchingRGBFunctionT.Arguments = stretchingRGBFunctionArguments;
#endregion
#region Pansharpen the Pan Image with the Multispectral
// Create a Raster Function Arguments object for the pansharpen function
IPansharpeningFunctionArguments pansharpFunctionArguements =
new PansharpeningFunctionArgumentsClass();
// Set the Panchromatic image which has been prepared above
pansharpFunctionArguements.PanImage = stretchingPanFunctionT;
// Set the Multispectral image which has been prepared above
pansharpFunctionArguements.MSImage = stretchingRGBFunctionT;
// Create a new pansharpen raster function object
IRasterFunction pansharpenFunction = new PansharpeningFunction();
// Create a new pansharpen function arguments object
IPansharpeningFunctionArguments pansharpenFunctionArguements =
new PansharpeningFunctionArgumentsClass();
// Set the pansharpening type
pansharpenFunctionArguements.PansharpeningType =
esriPansharpeningType.esriPansharpeningESRI;
// Create an array of doubles that sets the weights for each band
IDoubleArray weightsArray = new DoubleArrayClass();
weightsArray.Add(0.167);
weightsArray.Add(0.166);
weightsArray.Add(0.166);
// and set it on the arguments object
pansharpenFunctionArguements.Weights = weightsArray;
// Create a Raster Function Template object for the pansharpen function
IRasterFunctionTemplate rasterFunction = new RasterFunctionTemplateClass();
rasterFunction.Function = (IRasterFunction)pansharpenFunction;
rasterFunction.Arguments = pansharpFunctionArguements;
((IRasterFunction)rasterFunction).PixelType = rstPixelType.PT_UCHAR;
#endregion
#region Resolve variables
// Create a PropertySet object to set the values for the
// Raster Function Variables created above
IPropertySet variables = new PropertySet();
variables.SetProperty("panImage", panDataset);
variables.SetProperty("rgbImage", rgbDataset);
#endregion
#region Create the Function Raster Dataset
// Create the Function Raster Dataset Object for the Pansharpened Dataset
IFunctionRasterDataset functionRasterDataset = new FunctionRasterDataset();
// Create a name object for the Function Raster Dataset.
IFunctionRasterDatasetName functionRasterDatasetName =
new FunctionRasterDatasetNameClass();
// Specify the output filename for the new dataset (including
// the .afr extension at the end).
functionRasterDatasetName.FullName = outputDataset;
functionRasterDataset.FullName = (IName)functionRasterDatasetName;
// Initialize the new Function Raster Dataset with the Raster Function
// Template and the property set containing the variables and their values.
functionRasterDataset.Init((IRasterFunction)rasterFunction, variables);
ITemporaryDataset myTempDset = (ITemporaryDataset)functionRasterDataset;
myTempDset.MakePermanent();
#endregion
#region Shutdown
Console.WriteLine("Success.");
Console.WriteLine("Press any key...");
Console.ReadKey();
// Shutdown License
aoInit.Shutdown();
#endregion
}
catch (Exception exc)
{
#region Shutdown
Console.WriteLine("Exception Caught while creating Function Raster Dataset. " + exc.Message);
Console.WriteLine("Failed.");
Console.WriteLine("Press any key...");
Console.ReadKey();
// Shutdown License
aoInit.Shutdown();
#endregion
}
}
}
}
[Visual Basic .NET]
CreateRasterFunctionTemplate.vb
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports ESRI.ArcGIS
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.DataSourcesRaster
Namespace RasterSamples
Class CreateRasterFunctionTemplate
<STAThread()> _
Public Shared Sub Main(ByVal args As String())
Dim aoInit As ESRI.ArcGIS.esriSystem.AoInitialize
' Initialize License
Try
Console.WriteLine("Obtaining license")
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Desktop)
aoInit = New AoInitializeClass()
Dim licStatus As esriLicenseStatus = aoInit.Initialize(esriLicenseProductCode.esriLicenseProductCodeArcView)
Console.WriteLine("Ready with license.")
Catch exc As Exception
' If it fails at this point, shutdown the test and ignore any subsequent errors.
Console.WriteLine(exc.Message)
Exit Sub
End Try
Try
' Specify input directory and dataset name
' The directory which contains the Panchromatic Image.
Dim panDir As String = "C:\Data\QB\Pan"
' The directory which contains the Multispectral Image.
Dim rgbDir As String = "C:\Data\QB\MS"
Dim panImageName As String = "05JAN27104436-P1BS-005533787010_01_P002.TIF"
Dim rgbImageName As String = "05JAN27104436-M1BS-005533787010_01_P002.TIF"
' Output filename.
Dim outputDataset As String = "c:\Temp\RFT\QBTemplateVB.afr"
' Initialize
' Setup Workspaces.
Dim factoryType As Type = Type.GetTypeFromProgID("esriDataSourcesRaster.RasterWorkspaceFactory")
Dim workspaceFactory As IWorkspaceFactory = DirectCast(Activator.CreateInstance(factoryType), IWorkspaceFactory)
Dim panRasterWorkspace As IRasterWorkspace = DirectCast(workspaceFactory.OpenFromFile(panDir, 0), IRasterWorkspace)
Dim rgbRasterWorkspace As IRasterWorkspace = DirectCast(workspaceFactory.OpenFromFile(rgbDir, 0), IRasterWorkspace)
' Open Datasets
Dim panDataset As IRasterDataset = panRasterWorkspace.OpenRasterDataset(panImageName)
Dim rgbDataset As IRasterDataset = rgbRasterWorkspace.OpenRasterDataset(rgbImageName)
' Create Variables
' Create one variable of type IRasterFunctionVariable for each
' Raster Dataset opened above
' Create a new Raster Function Variable
Dim panVar As IRasterFunctionVariable = New RasterFunctionVariableClass()
' Set the name of the variable
panVar.Name = "panImage"
' Describe the variable
panVar.Description = "Panchromatic Image to be used for pansharpening"
' Specify whether it represents a dataset
panVar.IsDataset = True
' Create a new Raster Function Variable
Dim rgbVar As IRasterFunctionVariable = New RasterFunctionVariableClass()
' Set the name of the variable
rgbVar.Name = "rgbImage"
' Describe the variable
rgbVar.Description = "Multispectral Image to be used for pansharpening"
' Specify whether it represents a dataset
rgbVar.IsDataset = True
' Prepare the Pan Image
' Setup statistics for each band
Dim statsArrayPan As IArray = New ArrayClass()
Dim statsPanBand As IRasterStatistics = New RasterStatisticsClass()
statsPanBand.Minimum = 1
statsPanBand.Maximum = 2047
statsArrayPan.Add(statsPanBand)
' Create the arguments object for the stretching function
Dim stretchingPanFunctionArguements As IStretchFunctionArguments = New StretchFunctionArgumentsClass()
' Set the stretching type
stretchingPanFunctionArguements.StretchType = esriRasterStretchType.esriRasterStretchMinimumMaximum
' Set the statistics created above
stretchingPanFunctionArguements.Statistics = statsArrayPan
' Set the input raster, in this case, the variable for the Pan Image
stretchingPanFunctionArguements.Raster = panVar
' Create the function object to stretch the Pan Image.
Dim stretchingPanFunction As IRasterFunction = New StretchFunction()
' Create a Raster Function Template object for the stretch function
Dim stretchingPanFunctionT As IRasterFunctionTemplate = New RasterFunctionTemplateClass()
' Set the function on the template
stretchingPanFunctionT.[Function] = DirectCast(stretchingPanFunction, IRasterFunction)
' Set the arguments for the function
stretchingPanFunctionT.Arguments = stretchingPanFunctionArguements
' Prepare the Multispectral (RGB) Image
' Create an array which defines the order of bands
Dim bandIDs As ILongArray = New LongArrayClass()
bandIDs.Add(2)
bandIDs.Add(1)
bandIDs.Add(0)
' Create an Extract Band Function Arguments object
Dim extractRgbBandFunctionArgs As IExtractBandFunctionArguments = DirectCast(New ExtractBandFunctionArguments(), IExtractBandFunctionArguments)
' Set the order of bands of the output
extractRgbBandFunctionArgs.BandIDs = bandIDs
' Set the input raster, in this case the variable for the Multispectral Image
extractRgbBandFunctionArgs.Raster = rgbVar
' Create the Extract Band Function object
Dim extractRgbBandFunction As IRasterFunction = New ExtractBandFunction()
' Create a Raster Function Template object for the function created above
Dim extractRgbBandFunctionT As IRasterFunctionTemplate = New RasterFunctionTemplateClass()
' Set the function on the template
extractRgbBandFunctionT.[Function] = DirectCast(extractRgbBandFunction, IRasterFunction)
' Set the arguments for the function
extractRgbBandFunctionT.Arguments = extractRgbBandFunctionArgs
' Setup statistics for each band
Dim statsArray As IArray = New ArrayClass()
Dim statsMulBand1 As IRasterStatistics = New RasterStatisticsClass()
statsMulBand1.Minimum = 100
statsMulBand1.Maximum = 1721
statsArray.Add(statsMulBand1)
Dim statsMulBand2 As IRasterStatistics = New RasterStatisticsClass()
statsMulBand2.Minimum = 95
statsMulBand2.Maximum = 2047
statsArray.Add(statsMulBand2)
Dim statsMulBand3 As IRasterStatistics = New RasterStatisticsClass()
statsMulBand3.Minimum = 34
statsMulBand3.Maximum = 2006
statsArray.Add(statsMulBand3)
' Create a stretching function for the multispectral image
Dim stretchingRGBFunction As IRasterFunction = New StretchFunction()
' Create an arguments object for the stretch function
Dim stretchingRGBFunctionArguments As IStretchFunctionArguments = New StretchFunctionArgumentsClass()
' Set the type of stretchings to perform
stretchingRGBFunctionArguments.StretchType = esriRasterStretchType.esriRasterStretchMinimumMaximum
' Set the statistics created above
stretchingRGBFunctionArguments.Statistics = statsArray
' Set the extract band function template created above as the input
stretchingRGBFunctionArguments.Raster = extractRgbBandFunctionT
' Create a Raster Function Template object for the function created above
Dim stretchingRGBFunctionT As IRasterFunctionTemplate = New RasterFunctionTemplateClass()
' Set the function on the template
stretchingRGBFunctionT.[Function] = DirectCast(stretchingRGBFunction, IRasterFunction)
' Set the arguments for the function
stretchingRGBFunctionT.Arguments = stretchingRGBFunctionArguments
' Pansharpen the Pan Image with the Multispectral
' Create a Raster Function Arguments object for the pansharpen function
Dim pansharpFunctionArguements As IPansharpeningFunctionArguments = New PansharpeningFunctionArgumentsClass()
' Set the Panchromatic image which has been prepared above
pansharpFunctionArguements.PanImage = stretchingPanFunctionT
' Set the Multispectral image which has been prepared above
pansharpFunctionArguements.MSImage = stretchingRGBFunctionT
' Create a new pansharpen raster function object
Dim pansharpenFunction As IRasterFunction = New PansharpeningFunction()
' Create a new pansharpen function arguments object
Dim pansharpenFunctionArguements As IPansharpeningFunctionArguments = New PansharpeningFunctionArgumentsClass()
' Set the pansharpening type
pansharpenFunctionArguements.PansharpeningType = esriPansharpeningType.esriPansharpeningESRI
' Create an array of doubles that sets the weights for each band
Dim weightsArray As IDoubleArray = New DoubleArrayClass()
weightsArray.Add(0.167)
weightsArray.Add(0.166)
weightsArray.Add(0.166)
' and set it on the arguments object
pansharpenFunctionArguements.Weights = weightsArray
' Create a Raster Function Template object for the pansharpen function
Dim rasterFunction As IRasterFunctionTemplate = New RasterFunctionTemplateClass()
rasterFunction.[Function] = DirectCast(pansharpenFunction, IRasterFunction)
rasterFunction.Arguments = pansharpFunctionArguements
DirectCast(rasterFunction, IRasterFunction).PixelType = rstPixelType.PT_UCHAR
' Resolve variables
' Create a PropertySet object to set the values for the
' Raster Function Variables created above
Dim variables As IPropertySet = New PropertySet()
variables.SetProperty("panImage", panDataset)
variables.SetProperty("rgbImage", rgbDataset)
' Create the Function Raster Dataset
' Create the Function Raster Dataset Object for the Pansharpened Dataset
Dim functionRasterDataset As IFunctionRasterDataset = New FunctionRasterDataset()
' Create a name object for the Function Raster Dataset.
Dim functionRasterDatasetName As IFunctionRasterDatasetName = New FunctionRasterDatasetNameClass()
' Specify the output filename for the new dataset (including
' the .afr extension at the end).
functionRasterDatasetName.FullName = outputDataset
functionRasterDataset.FullName = DirectCast(functionRasterDatasetName, IName)
' Initialize the new Function Raster Dataset with the Raster Function
' Template and the property set containing the variables and their values.
functionRasterDataset.Init(DirectCast(rasterFunction, IRasterFunction), variables)
Dim myTempDset As ITemporaryDataset = DirectCast(functionRasterDataset, ITemporaryDataset)
myTempDset.MakePermanent()
' Shutdown
Console.WriteLine("Success.")
Console.WriteLine("Press any key...")
Console.ReadKey()
' Shutdown License
aoInit.Shutdown()
Catch exc As Exception
' Shutdown
Console.WriteLine("Exception Caught while creating Function Raster Dataset. " & exc.Message)
Console.WriteLine("Failed.")
Console.WriteLine("Press any key...")
Console.ReadKey()
' Shutdown License
aoInit.Shutdown()
End Try
End Sub
End Class
End Namespace