ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于C#的AE二次开发之影像数据的裁切(掩膜)

2020-01-12 13:41:36  阅读:627  来源: 互联网

标签:Raster 掩膜 裁切 pOutputDataset 裁剪 ArcGIS 二次开发 using ESRI


基于C#的AE二次开发之影像数据的裁切(掩膜)

我的开发环境为ArcGIS Engine 10.2与Visual studio2010,主地图名称为axMapControl1,如果变动则需要修改(注意相关事件的添加与动态链接库的引入)。

  • 效果预览
裁剪前 裁剪后

实现代码

  • 引用类库
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.ADF;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.GeoAnalyst;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.SpatialAnalyst;
using ESRI.ArcGIS.Geometry;
  • 代码实现
private void 影像裁剪ToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (axMapControl1.get_Layer(0) is IFeatureLayer && axMapControl1.get_Layer(1) is IRasterLayer)
    {
        IFeatureLayer pFeatureLayer = axMapControl1.get_Layer(0) as IFeatureLayer;//输入裁剪矢量图层
        IRasterLayer pRasterLayer = axMapControl1.get_Layer(1) as IRasterLayer;//输入裁剪栅格图层
        IPolygon pPoly = pFeatureLayer.FeatureClass.GetFeature(0).Shape as IPolygon;//设置裁剪要素
        rasterClip(pRasterLayer, pPoly, "rasterClip0");//调用裁剪方法
        //强提醒,完成裁剪
        MessageBox.Show("裁剪完成!");
    }
}

/// <summary>
/// 掩膜处理
/// </summary>
/// <param name="pRasterLayer">输入裁剪栅格图层</param>
/// <param name="clipGeo">输入裁剪矢量要素</param>
/// <param name="FileName">输出文件名称</param>
public void rasterClip(IRasterLayer pRasterLayer, IPolygon clipGeo, string FileName)
{
    IRaster pRaster = pRasterLayer.Raster;//获取栅格文件
    IRasterProps pProps = pRaster as IRasterProps;
    object cellSizeProvider = pProps.MeanCellSize().X;
    IGeoDataset pInputDataset = pRaster as IGeoDataset;
    IExtractionOp pExtractionOp = new RasterExtractionOp() as IExtractionOp;
    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,直接保存为tif影像文件
    IWorkspaceFactory pWKSF = new RasterWorkspaceFactory();
    //保存裁剪后的影像到本地路径下
    string filepath = @"c:\dat\";
    
    //判断文件夹是否存在,如果不存在新建文件夹
    if (false == System.IO.Directory.Exists(filepath))
    {
        //创建文件夹
        Directory.CreateDirectory(filepath);
    }
    IWorkspace pWorkspace = pWKSF.OpenFromFile(filepath, 0);
    ISaveAs pSaveAs = clipRaster as ISaveAs;
     //输出要素类的名称,文件后缀可以设置
    pSaveAs.SaveAs(FileName+".tif", pWorkspace, "TIFF");
}
  • 导出图像格式
格式名称字符串引用
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"
努力搬砖的giser 发布了37 篇原创文章 · 获赞 65 · 访问量 2690 私信 关注

标签:Raster,掩膜,裁切,pOutputDataset,裁剪,ArcGIS,二次开发,using,ESRI
来源: https://blog.csdn.net/qq_41441896/article/details/103944828

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有