Performing a geodata transformation on a raster
To perform a geodata transformation on a raster, follow these steps:
- Set the transformation on the raster using the IRaster2 interface.
- Set the cell size.
- Set the output extent.
See the following code example:
[C#]
public static void SetGeodataXformAndSaveAs(IRaster2 raster, IGeodataXform xform)
{
//Get the original extent and cell size of the raster.
IRasterProps rasterProp = raster as IRasterProps;
IEnvelope extent = rasterProp.Extent;
IPnt cellSize = rasterProp.MeanCellSize();
double xCell = cellSize.X;
double yCell = cellSize.Y;
//Set the xform on the raster.
raster.GeodataXform = xform;
//Transform the cell size first, then the extent; the sequence matters.
xform.TransformCellsize(esriTransformDirection.esriTransformForward, ref xCell,
ref yCell, extent);
xform.TransformExtent(esriTransformDirection.esriTransformForward, extent);
//Put the transformed extent and cell size on the raster and save as.
rasterProp.Extent = extent;
rasterProp.Width = Convert.ToInt32(extent.Width / xCell);
rasterProp.Height = Convert.ToInt32(extent.Height / yCell);
//Save the raster.
ISaveAs saveAs = raster as ISaveAs;
saveAs.SaveAs(@"c:\temp\image1.img", null, "IMAGINE Image");
}
[VB.NET]
Public Sub SetGeodataXformAndSaveAs(ByVal raster As IRaster2, ByVal xform As IGeodataXform)
'Get the original extent and cell size of the raster.
Dim rasterProp As IRasterProps = TryCast(raster, IRasterProps)
Dim extent As IEnvelope = rasterProp.Extent
Dim cellSize As IPnt = rasterProp.MeanCellSize()
Dim xCell As Double = cellSize.X
Dim yCell As Double = cellSize.Y
'Set the xform on the raster.
raster.GeodataXform = xform
'Transform the cell size first, then the extent; the sequence matters.
xform.TransformCellsize(esriTransformDirection.esriTransformForward, xCell, yCell, extent)
xform.TransformExtent(esriTransformDirection.esriTransformForward, extent)
'Put the transformed extent and cell size on the raster and save as.
rasterProp.Extent = extent
rasterProp.Width = Convert.ToInt32(extent.Width / xCell)
rasterProp.Height = Convert.ToInt32(extent.Height / yCell)
'Save the raster.
Dim saveAs As ISaveAs = TryCast(raster, ISaveAs)
saveAs.SaveAs("c:\temp\image1.img", Nothing, "IMAGINE Image")
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 | ArcGIS for Desktop Basic |
ArcGIS for Desktop Standard | ArcGIS for Desktop Standard |
ArcGIS for Desktop Advanced | ArcGIS for Desktop Advanced |
Engine Developer Kit | Engine |