About working with helper objects
The Spatial Analyst object model is composed of a collection of objects to perform raster analysis. Where most of the objects perform spatial operations, a small group of objects (commonly referred to as helper objects) are used to specify arguments, such as, neighborhood in a focal statistics operation. These objects are available in GeoAnalyst and SpatialAnalyst objects libraries.
The following table shows all helper objects and methods that require the helper object:
Library
|
Helper object
|
Method
|
GeoAnalyst
|
GeoAnalysisSemiVariogram
|
Variogram
|
GeoAnalyst
|
NumberRemap
|
ReclassByRemap
|
GeoAnalyst
|
RasterNeighborhood
|
BlockStatistics, FocalStatistics, PointDensity, PointStatistics
|
GeoAnalyst
|
RasterRadius
|
Variogram
|
GeoAnalyst
|
StringRemap
|
ReclassByRemap
|
SpatialAnalyst
|
PathDistanceHorizontalFactor
|
PathAllocation, PathBackLink, PathDistance, PathDistanceFull
|
SpatilaAnalyst
|
PathDistanceVerticalFactor
|
PathAllocation, PathBackLink, PathDistance, PathDistanceFull
|
The following code example shows how to create the NumberRemap helper object:
[C#]
public void UsingNumberRemap()
{
IRasterDataset inRaster;
inRaster = OpenRasterDataset("c:\\temp", "degs2");
//Create the NumberRemap object.
INumberRemap numRemap;
numRemap = new NumberRemapClass();
numRemap.MapRange(0.0, 15.0, 1);
numRemap.MapRange(15.0, 55.0, 2);
numRemap.MapRange(55.0, 300.0, 3);
numRemap.MapRange(300.0, 1000.0, 4);
IReclassOp reclassOp;
reclassOp = new RasterReclassOpClass();
//Use the NumberRemap object in RasterReclassOp.
IRaster rasOut;
rasOut = (IRaster)reclassOp.ReclassByRemap((IGeoDataset)inRaster, numRemap as
IRemap, true);
}
[VB.NET]
Public Sub UsingNumberRemap()
Dim inRaster As IRasterDataset
inRaster = OpenRasterDataset("c:\temp", "degs2")
'Create the NumberRemap object.
Dim numRemap As INumberRemap
numRemap = New NumberRemapClass()
numRemap.MapRange(0.0, 15.0, 1)
numRemap.MapRange(15.0, 55.0, 2)
numRemap.MapRange(55.0, 300.0, 3)
numRemap.MapRange(300.0, 1000.0, 4)
Dim reclassOp As IReclassOp
reclassOp = New RasterReclassOpClass()
'Use the NumberRemap object in RasterReclassOp.
Dim rasOut As IRaster
rasOut = reclassOp.ReclassByRemap(inRaster, numRemap, True)
End Sub
The following code example shows how to create the RasterRadius helper object:
[C#]
public void UsingRasterRadius()
{
IFeatureClass fcClass01 = default(IFeatureClass);
fcClass01 = OpenFeatureClassFromShapefile("c:\\temp", "ca.shp");
// Create FeatureClassDescriptor using a value field.
IFeatureClassDescriptor fcDescr = default(IFeatureClassDescriptor);
fcDescr = new FeatureClassDescriptorClass();
fcDescr.Create(fcClass01, null, "Ozone");
// Create raster radius using variable distance.
IRasterRadius rasRadius = default(IRasterRadius);
object object_Missing = System.Type.Missing;
rasRadius = new RasterRadiusClass();
rasRadius.SetVariable(12, ref object_Missing);
//RasterInterpolationOp - Method.
IRaster rasOut = default(IRaster);
IInterpolationOp interpOp = default(IInterpolationOp);
interpOp = new RasterInterpolationOpClass();
rasOut = (IRaster)interpOp.Krige((IGeoDataset)fcDescr,
esriGeoAnalysisSemiVariogramEnum.esriGeoAnalysisExponentialSemiVariogram,
rasRadius, false, ref object_Missing);
}
[VB.NET]
Public Sub UsingRasterRadius()
Dim fcClass01 As IFeatureClass
fcClass01 = OpenFeatureClassFromShapefile("c:\temp", "ca.shp")
' Create FeatureClassDescriptor using a value field.
Dim fcDescr As IFeatureClassDescriptor
fcDescr = New FeatureClassDescriptorClass()
fcDescr.Create(fcClass01, Nothing, "Ozone")
' Create raster radius using variable distance.
Dim rasRadius As IRasterRadius
rasRadius = New RasterRadiusClass()
rasRadius.SetVariable(12)
'RasterInterpolationOp - Method.
Dim rasOut As IRaster
Dim interpOp As IInterpolationOp
interpOp = New RasterInterpolationOpClass()
rasOut = interpOp.Krige(fcDescr, esriGeoAnalysisSemiVariogramEnum.esriGeoAnalysisExponentialSemiVariogram, rasRadius, False)
End Sub
The following code example shows how to create the RasterNeighborhood helper object:
[C#]
public void UsingRasterNeighborhood()
{
INeighborhoodOp neighborhoodOp;
neighborhoodOp = new RasterNeighborhoodOpClass();
//Input raster.
IGeoDataset inRas;
inRas = (IGeoDataset)OpenRasterDataset("c:\\temp", "block1");
//Create the raster neighborhood object.
IRasterNeighborhood rasNeighborhood;
rasNeighborhood = new RasterNeighborhoodClass();
rasNeighborhood.SetRectangle(2, 3, esriGeoAnalysisUnitsEnum.esriUnitsCells);
//Use the neighborhood object in FocalStatistics.
IRaster outRas;
outRas = (IRaster)neighborhoodOp.FocalStatistics(inRas,
esriGeoAnalysisStatisticsEnum.esriGeoAnalysisStatsMean, rasNeighborhood,
true);
}
[VB.NET]
Public Sub UsingRasterNeighborhood()
Dim neighborhoodOp As INeighborhoodOp
neighborhoodOp = New RasterNeighborhoodOpClass()
'Input raster.
Dim inRas As IGeoDataset
inRas = OpenRasterDataset("c:\temp", "block1")
'Create the raster neighborhood object.
Dim rasNeighborhood As IRasterNeighborhood
rasNeighborhood = New RasterNeighborhoodClass()
rasNeighborhood.SetRectangle(2, 3, esriGeoAnalysisUnitsEnum.esriUnitsCells)
'Use the neighborhood object in FocalStatistics.
Dim outRas As IRaster
outRas = CType(neighborhoodOp.FocalStatistics(inRas, esriGeoAnalysisStatisticsEnum.esriGeoAnalysisStatsMean, rasNeighborhood, True), IRaster)
End Sub
To 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):
Development licensing | Deployment licensing |
---|---|
ArcGIS for Desktop Basic: Spatial Analyst | ArcGIS for Desktop Basic: Spatial Analyst |
ArcGIS for Desktop Standard: Spatial Analyst | ArcGIS for Desktop Standard: Spatial Analyst |
ArcGIS for Desktop Advanced: Spatial Analyst | ArcGIS for Desktop Advanced: Spatial Analyst |