影像图配准代码实现

以下为影像图配准程序。其中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("不能进行配准");

            }

           

 

        }

原文地址:https://www.cnblogs.com/weihongli/p/2555737.html