IExtractionOp.Polygon方法的问题
rt,用IExtractionOp.Polygon方法对多于三个波段的影像使用shape进行裁剪,裁剪出来的结果,波段变成了三个,nodatavalue和pixel type都变了。。。 何解?
public static void RasterClip(IRasterLayer pRasterLayer, IPolygon clipGeo, string FileName)
{
try
{
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;
}
IRasterProps temRasterPro = clipRaster as IRasterProps;
temRasterPro.NoDataValue = pProps.NodataValue;
temRasterPro.PixelType = pProps.PixelType;
//保存裁切后得到的clipRaster
//如果直接保存为img影像文件
IWorkspaceFactory pWKSF = new RasterWorkspaceFactoryClass();
IWorkspace pWorkspace = pWKSF.OpenFromFile(System.IO.Path.GetDirectoryName(FileName), 0);
ISaveAs pSaveAs = clipRaster as ISaveAs;
pSaveAs.SaveAs(System.IO.Path.GetFileName(FileName), pWorkspace, "IMAGINE Image");//以img格式保存
MessageBox.Show("成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch(Exception exp)
{
MessageBox.Show("失败!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
public static void RasterClip(IRasterLayer pRasterLayer, IPolygon clipGeo, string FileName)
{
try
{
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;
}
IRasterProps temRasterPro = clipRaster as IRasterProps;
temRasterPro.NoDataValue = pProps.NodataValue;
temRasterPro.PixelType = pProps.PixelType;
//保存裁切后得到的clipRaster
//如果直接保存为img影像文件
IWorkspaceFactory pWKSF = new RasterWorkspaceFactoryClass();
IWorkspace pWorkspace = pWKSF.OpenFromFile(System.IO.Path.GetDirectoryName(FileName), 0);
ISaveAs pSaveAs = clipRaster as ISaveAs;
pSaveAs.SaveAs(System.IO.Path.GetFileName(FileName), pWorkspace, "IMAGINE Image");//以img格式保存
MessageBox.Show("成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch(Exception exp)
{
MessageBox.Show("失败!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
2 个回复
石羽
赞同来自:
这三者是有区别的,典型问题就是你这个
葱子脚脚
赞同来自:
要回复问题请先登录或注册
发起人
相关问题
问题状态