zoukankan      html  css  js  c++  java
  • 影像图配准代码实现

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

                }

               

     

            }

  • 相关阅读:
    Openjudge 1.3 算数表达式与顺序执行
    Openjudge 1.2 变量定义、赋值并转换
    Openjudge 1.4 逻辑表达式与条件分支
    Openjudge 1.5 循环控制
    Openjudge 1.6 一位数组
    Openjudge 1.8 多维数组
    poj-3134 ida*||记录路径bfs
    wust-1588 日期模拟题
    wust 1599弗洛伊德
    hdu5667 费马小定理加矩阵快速幂
  • 原文地址:https://www.cnblogs.com/weihongli/p/2555737.html
Copyright © 2011-2022 走看看