以下为影像图配准程序。其中pointTo1-4的坐标值是其中的一幅CAD数据通过ArcMap工具手工配准后生成的地理坐标得到的。
private void geoReferencing()
{
/*配准主要使用IGeoReference这个接口来完成工作。
还有使用ActiveView来进行坐标转换,将MapControl中鼠标的点击位置转换为
地图和影像图上的坐标。
下面介绍IGeoReference接口
首先RasterLayer实现了这个接口
CanGeoRef 监测该图层是否可以做配准
PointsTransform 将鼠标的位置转换为栅格文件上的相对坐标。
Rectify 将纠正的结果保存为一个新的栅格文件相当于另存为
*/
//如何确定图片与georeference的关系
IGeoReference pGeoreference ;
IRasterLayer pRasterLayer = new RasterLayerClass();
pRasterLayer = (IRasterLayer)axMapControl1.get_Layer(0);// mapMain.Layer(0)
pGeoreference = (IGeoReference)pRasterLayer;
IRaster pRaster = pRasterLayer.Raster;
if (pGeoreference.CanGeoRef == true)
{
IPointCollection frmPoint = new Multipoint();
IPointCollection toPoint = new Multipoint();
IPoint pointFrm1 = new PointClass();
IPoint pointFrm2 = new PointClass();
IPoint pointFrm3 = new PointClass();
IPoint pointFrm4 = new PointClass();
pointFrm1.PutCoords(0.0, 0.0);
pointFrm2.PutCoords(5000.0, 0.0);
pointFrm3.PutCoords(0.0, -5000.0);
pointFrm4.PutCoords(5000.0, -5000.0);
object missing = Type.Missing;
frmPoint.AddPoint(pointFrm1, ref missing, ref missing);
frmPoint.AddPoint(pointFrm2, ref missing, ref missing);
frmPoint.AddPoint(pointFrm3, ref missing, ref missing);
frmPoint.AddPoint(pointFrm4, ref missing, ref missing);
IPoint pointTo1 = new PointClass();
IPoint pointTo2 = new PointClass();
IPoint pointTo3 = new PointClass();
IPoint pointTo4 = new PointClass();
pointTo1.PutCoords(493000.0, 4376000.0);
pointTo2.PutCoords(494000.0, 4376000.0);
pointTo3.PutCoords(493000.0, 4375000.0);
pointTo4.PutCoords(494000.0, 4375000.0);
toPoint.AddPoint(pointTo1, ref missing, ref missing);
toPoint.AddPoint(pointTo2, ref missing, ref missing);
toPoint.AddPoint(pointTo3, ref missing, ref missing);
toPoint.AddPoint(pointTo4, ref missing, ref missing);
IRasterGeometryProc pRasterGProc = new RasterGeometryProcClass();
pRasterGProc.Warp(frmPoint, toPoint, esriGeoTransTypeEnum.esriGeoTransPolyOrder1, pRaster);
pRasterGProc.Register(pRaster);
pRasterGProc.Rectify("E:\\GIS\\7593.img", "IMAGINE Image", pRaster);//路径和格式(String)
//pGeoreference.Warp(frmPoint, toPoint, (int)esriGeoTransTypeEnum.esriGeoTransPolyOrder1);
//pGeoreference.Register();
//pGeoreference.Rectify("E:\\GIS\\test1111.tif", "TIFF"); //导出成此格式有问题
//axMapControl1.Refresh();
}
else
{
MessageBox.Show("不能进行配准");
}
}