我的開發(fā)環(huán)境為ArcGIS Engine 10.2與Visual studio2010,主地圖名稱為axMapControl1,如果變動則需要修改(注意相關事件的添加與動態(tài)鏈接庫的引入)。 裁剪前 裁剪后實現(xiàn)代碼 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");//調(diào)用裁剪方法
//強提醒,完成裁剪
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))
{
//創(chuàng)建文件夾
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" |
|