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 Desktop Basic | ArcGIS Desktop Basic |
ArcGIS Desktop Standard | ArcGIS Desktop Standard |
ArcGIS Desktop Advanced | ArcGIS Desktop Advanced |
Engine Developer Kit | Engine |