Georeferencing a raster using polynomial transformation
The following subroutine defines a polynomial transformation from two sets of control points and applies the transformation to an input raster datasets in two ways:
[C#]
public static void GeoreferenceRaster(IRasterDataset2 rasterDataset,
IPointCollection sourcePoints, IPointCollection targetPoints)
{
// The sourcePoints represent source control points.
// The targetPoints represent target control points.
IRasterGeometryProc rasterPropc = new RasterGeometryProcClass();
IRaster raster = rasterDataset.CreateFullRaster();
//Set the transformation. The number of control points must meet the minimum requirements
//of the order of transformation. The first order polynomial must have at least 3 non-correlated
//points; the second order polynomial must have at least 6; and the third order must have at
//least 10 control points.
rasterPropc.Warp(sourcePoints, targetPoints,
esriGeoTransTypeEnum.esriGeoTransPolyOrder1, raster);
//There are two ways to get the georeferenced result: Save the transformation with the
//input raster dataset,
rasterPropc.Register(raster);
//or save to another new raster dataset.
rasterPropc.Rectify(@"c:\temp\georeferencing_output.img", "IMAGINE Image",
raster);
}
[VB.NET]
Public Shared Sub GeoreferenceRaster(ByVal rasterDataset As IRasterDataset2, ByVal sourcePoints As IPointCollection, ByVal targetPoints As IPointCollection)
' The sourcePoints represent source control points.
' The targetPoints represent target control points.
Dim rasterPropc As IRasterGeomeTryProc = New RasterGeomeTryProcClass()
Dim raster As IRaster = rasterDataset.CreateDefaultRaster()
'Set the transformation.
rasterPropc.Warp(sourcePoints, targetPoints, esriGeoTransTypeEnum.esriGeoTransPolyOrder1, raster)
'There are two ways to get the georeferenced result: Save the transformation with the input
'raster dataset,
rasterPropc.Register(raster)
'or save to another new raster dataset.
rasterPropc.Rectify("c:\temp\georeferencing_output.img", "IMAGINE Image", raster)
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):
ESRI.ArcGIS.System (ESRI.ArcGIS.esriSystem)ESRI.ArcGIS.Display ESRI.ArcGIS.Geometry ESRI.ArcGIS.Geodatabase ESRI.ArcGIS.DataSourcesRaster
Development licensing | Deployment licensing |
---|---|
ArcGIS for Desktop Advanced | ArcGIS for Desktop Advanced |
ArcGIS for Desktop Standard | ArcGIS for Desktop Standard |
ArcGIS for Desktop Basic | ArcGIS for Desktop Basic |
Engine Developer Kit | Engine |