zoukankan      html  css  js  c++  java
  • 影像数据的裁切和保存

     

     ArcGIS 的栅格影像可以供保存的格式有:

    The format strings used for the supported formats are below, and they are case sensitive:

    Format NameString Used
    Imagine "IMAGINE Image"
    TIFF "TIFF"
    GRID "GRID"
    JPEG "JPG"
    JP2000 "JP2"
    BMP "BMP"
    PNG "PNG"
    GIF "GIF"
    PCI Raster "PIX"
    X11 Pixmap "XPM"
    PCRaster "MAP"
    Memory Raster "MEM"
    HDF4 "HDF4"
    BIL "BIL"
    BIP "BIP"
    BSQ "BSQ"
    Idrisi Raster Format "RST"
    ENVI Raster Format "ENVI"
    Geodatabase Raster "GDB"

     保存栅格影像的方法

    public void SaveAs(IRasterDataset rasterDataset, IWorkspace workspace, string      sFormat, string sName)  
    {  
        //Using ISaveAs2, you can specify the storage property for the output raster, such as tile size, compression,   
        //and pyramid building, etc. for geodatabase raster, some also applies to output as a file format.  
        ISaveAs saveAs = rasterDataset as ISaveAs;  
        saveAs.SaveAs(sName, workspace, sFormat);  
    }    
    public void SaveAsWithCompressionAndTile(IRasterDataset rasterDataset)  
    {      //rasterDataset can be created from any data source, file system, or geodatabase. 
      
        //It could also be a raster object (IRaster).  
        ISaveAs2 saveAs2 = (ISaveAs2)rasterDataset;        //Set storage.   
        IRasterStorageDef rasterStorageDef = new RasterStorageDefClass();  
        IRasterStorageDef2 rasterStorageDef2 = (IRasterStorageDef2)rasterStorageDef;  
        rasterStorageDef2.CompressionType =          esriRasterCompressionType.esriRasterCompressionJPEG2000;  
        rasterStorageDef2.CompressionQuality = 50;  
        rasterStorageDef2.Tiled = true;  
        rasterStorageDef2.TileHeight = 128;  
        rasterStorageDef2.TileWidth = 128;  
        //Set output workspace.  
        IRasterWorkspaceEx rasterWorkspaceEx = OpenFileGDBWorkspace("c:\temp\fgdb.gdb")          ;  
        IWorkspace workspace = (IWorkspace)rasterWorkspaceEx;  
        saveAs2.SaveAsRasterDataset("filegdbRaster", workspace, "gdb", rasterStorageDef2)          ;  
    }      
    public IRasterWorkspaceEx OpenFileGDBWorkspace(string sPath)  
    {  
        IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactoryClass();  
        IWorkspace workspace = workspaceFactory.OpenFromFile(sPath, 0);  
        IRasterWorkspaceEx rasterWorkspaceEx = (IRasterWorkspaceEx)workspace;  
        return rasterWorkspaceEx;  
    }
    Turning off pyramid building
     
    You can also turn off pyramid building for outputs, such as IMG, GRID, and TIFF formats using the ISaveAs2
    interface. See the following code example:
     
    public void SaveAsWithoutBuildingPyramids(IRaster raster)  
    {  
        ISaveAs2 saveAs2 = (ISaveAs2)raster;    
        IRasterStorageDef rasterStorageDef = new RasterStorageDefClass();  
        IRasterStorageDef2 rasterStorageDef2 = (IRasterStorageDef2)rasterStorageDef;    
        rasterStorageDef2.PyramidLevel = 0;    
        IRasterWorkspace rasterWorkspace = SetRasterWorkspace("c:\temp");  
        IWorkspace workspace = (IWorkspace)rasterWorkspace;    
        saveAs2.SaveAsRasterDataset("image1.img", workspace, "IMAGINE Image",          rasterStorageDef2);    
    }      
    public IRasterWorkspace SetRasterWorkspace(string sPath)  
    {  
        IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass();  
        IWorkspace workspace = workspaceFactory.OpenFromFile(sPath, 0);  
        IRasterWorkspace rasterWorkspace = (IRasterWorkspace)workspace;    
        return rasterWorkspace;  
    }

     

    影像裁剪和保存 示例2

    //影像裁切
    IGeometry clipGeo = axMapControl1.TrackPolygon(); //
    ILayer layer = axMapControl1.get_Layer(i); //要裁切的影像图层
    IRasterLayer pRasterLayer = layer as IRasterLayer;
    IRaster pRaster = pRasterLayer.Raster;
    IRasterProps pProps = pRaster as IRasterProps;
    object cellSizeProvider = pProps.MeanCellSize().X;
    IGeoDataset pInputDataset = pRaster as IGeoDataset;
    IExtractionOp pExtractionOp = new RasterExtractionOpClass();
    IRasterAnalysisEnvironment pRasterAnaEnvir = pExtractionOp as IRasterAnalysisEnvironment;
    pRasterAnaEnvir.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, ref cellSizeProvider);
    object extentProvider = clipGeo.Envelope;
    object snapRasterData = Type.Missing;
    pRasterAnaEnvir.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extentProvider, ref snapRasterData);
    IGeoDataset pOutputDataset = pExtractionOp.Polygon(pInputDataset, clipGeo as IPolygon, true);
    IRaster clipRaster; //裁切后得到的IRaster
    if (pOutputDataset is IRasterLayer)
    {
    IRasterLayer rasterLayer = pOutputDataset as IRasterLayer;
    clipRaster = rasterLayer.Raster;
    }
    else if (pOutputDataset is IRasterDataset)
    {
    IRasterDataset rasterDataset = pOutputDataset as IRasterDataset;
    clipRaster = rasterDataset.CreateDefaultRaster();
    }
    else if (pOutputDataset is IRaster)
    {
    clipRaster = pOutputDataset as IRaster;
    }
    else
    {
    return;
    }
     
    
    
    
    
    //保存裁切后得到的clipRaster
     
    //如果直接保存为img影像文件
    IWorkspaceFactory pWKSF = new RasterWorkspaceFactoryClass();
    IWorkspace pWorkspace = pWKSF.OpenFromFile(@"C:	emp", 0);
    ISaveAs pSaveAs = clipRaster as ISaveAs;
    pSaveAs.SaveAs("test.img", pWorkspace, "IMAGINE Image");
     
    //如果保存在mdb中
    IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass();
    pRasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCompressionJPEG2000;
    pRasterStorageDef.CompressionQuality = 50;
    pRasterStorageDef.TileHeight = 128;
    pRasterStorageDef.TileWidth = 128;
    IWorkspaceFactory pWKSF = new AccessWorkspaceFactoryClass();
    IWorkspace pWorkspace = pWKSF.OpenFromFile(@"C:	emp	est.mdb", 0);
    ISaveAs2 pSaveAs = clipRaster as ISaveAs2;
    pSaveAs.SaveAsRasterDataset("test", pWorkspace, "gdb", pRasterStorageDef);
     
    //也可以使用IRasterWorkspaceEx的SaveAsRasterDataset方法保存到mdb中
    IWorkspaceFactory pWKSF = new AccessWorkspaceFactoryClass();
    IWorkspace pWorkspace = pWKSF.OpenFromFile(@"C:	emp	est.mdb", 0);
    IRasterWorkspaceEx pRasterWKS = pWorkspace as IRasterWorkspaceEx;
    IRasterStorageDef pRasterStorageDef = new RasterStorageDefClass();
    pRasterStorageDef.CompressionType = esriRasterCompressionType.esriRasterCom
    pressionJPEG2000;
    pRasterStorageDef.CompressionQuality = 50;
    pRasterStorageDef.PyramidLevel = 2;
    pRasterStorageDef.PyramidResampleType = rstResamplingTypes.RSP_BilinearInterpolation;
    pRasterStorageDef.TileHeight = 128;
    pRasterStorageDef.TileWidth = 128;
    IRasterDef pRasterDef = new RasterDefClass();
    pRasterDef.Description = "rasterdataset";
    pRasterDef.SpatialReference = axMapControl1.SpatialReference;
    IGeometryDef pGeoDef = new GeometryDefClass();
    IGeometryDefEdit pGeoDefEdit = pGeoDef as IGeometryDefEdit;
    pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
    pGeoDefEdit.AvgNumPoints_2 = 4;
    pGeoDefEdit.GridCount_2 = 1;
    pGeoDefEdit.set_GridSize(0, 1000);
    pGeoDefEdit.SpatialReference_2 = axMapControl1.SpatialReference;
    IRasterDataset pRasterDataset = pRasterWKS.SaveAsRasterDataset("test", clipRaster, pRasterStorageDef, "", pRasterDef,
    pGeoDef);
    //其实参数可以不用设置,直接:
    IRasterDataset pRasterDataset = pRasterWKS.SaveAsRasterDataset("test", clipRaster, null, "", null, null);
    

    参考文章

    影像数据的裁切和保存    

    保存栅格数据 ISaveAs.SaveAs Method

  • 相关阅读:
    spring3.1, hibernate4.1 配置备份,struts2.2.1,sitemesh 2.4.2
    java 动态AOP
    制作可以执行的 JAR 文件包及 jar 命令详解
    struts result Annotation 参考
    Android线段与矩形碰撞检测函数
    防止aspxspy木马列服务 iis信息 执行命令提权等操作
    博客园申请及页面定制CSS
    C# 中将月份格式化为英语缩写格式
    通过Web Service获取天气预报并朗读
    windows下html/javascript调用可执行程序
  • 原文地址:https://www.cnblogs.com/arxive/p/6986491.html
Copyright © 2011-2022 走看看