打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
基于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"
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Arcscene二次开发部分开发C#
C#+AE 鹰眼
利用Arcengine 直接加载shp文件
ArcGIS应用技巧
制作流向图(动态)简单指北
Esri UC 2021: Raster analytics and deep learning i...
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服