5、导出指定范围的Raster
导出指定范围的Raster主要通过IRasterLayerExport接口或者IExtractionOp接口来实现。下面先以IRasterLayerExport接口为例来介绍:
IRasterLayerExport接口中的属性和方法如下图所示:
其中,Export方法就是将Raster导出的函数,Extent为导出的Raster的范围,RasterLayer为要导出的Raster图层,SpatialReference为导出Raster的空间参考。
首先来看一下Export方法,如下所示:
public IRasterDataset Export (IWorkspace pWorkspace, string newname, string Format);
其中第一个参数pWorkspace为导出Raster所在的工作空间(即导出文件所在路径);第二个参数newname为导出Raster的文件名,该参数中必须包括导出数据类型的扩展名,如导出格式为img的Raster,它的名称为RasterOut,则参数newname应该为“RasterOut. img”;第三个参数为导出Raster的数据格式,如下:
格式 | 使用的名称(Format) |
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" |
Geodatabase Raster | "GDB" |
如下代码:
private void 导出指定范围的Raster_Click(object sender, EventArgs e)
{
ILayer pLayer = axMapControl1.get_Layer(0);//假定第一个图层为Raster数据
IRasterLayer rasterLayer = (IRasterLayer)pLayer;
IRaster pRaster = rasterLayer.Raster;
IRasterProps pRasterProps = (IRasterProps)pRaster;
IRasterLayerExport rLayerExport = new RasterLayerExportClass();
rLayerExport.RasterLayer = rasterLayer;
rLayerExport.Extent = pRasterProps.Extent;//设置提取栅格数据的范围即为Raster数据的范围
rLayerExport.SpatialReference = pRasterProps.SpatialReference;// 设置当前栅格数据的投影信息
IWorkspaceFactory pWF = new RasterWorkspaceFactoryClass();
SaveFileDialog saveDG = new SaveFileDialog();
saveDG.Title = "导出Raster数据";
saveDG.Filter = "Imagine(*.img)|*.img|"
+ "TIFF(*.tif)|*.tif|"
+ "GRID(*.*)|*.*|"
+ "JPEG(*.jpg)|*.jpg|"
+ "BMP(*.bmp)|*.bmp|"
+ "PNG(*.png)|*.png|"
+ "GIF(*.gif)|*.gif|"
+ "Geodatabase Raster(*.gdb)|*.gdb";
saveDG.ShowDialog();
string filePath = "", fileName = "", outputFormat="";
filePath = saveDG.FileName;
fileName = Microsoft.VisualBasic.Strings.Right(filePath, filePath.Length - filePath.LastIndexOf(@"/") - 1);
filePath = Microsoft.VisualBasic.Strings.Left(filePath, filePath.LastIndexOf(@"/"));
IWorkspace pRasterWorkspace = pWF.OpenFromFile(filePath, 0);
switch (saveDG.FilterIndex)
{
case 1:
outputFormat = "IMAGINE Image";
break;
case 2:
outputFormat = "TIFF";
break;
case 3:
outputFormat = "GRID";
break;
case 4:
outputFormat = "JPG";
break;
case 5:
outputFormat = "BMP";
break;
case 6:
outputFormat = "PNG";
break;
case 7:
outputFormat = "GIF";
break;
case 8:
outputFormat = "GDB";
break;
}
IRasterDataset outGeoDataset = rLayerExport.Export(pRasterWorkspace, fileName, outputFormat);
}
上面设置导出Raster的范围为Raster数据的范围,用IRasterLayerExport接口导出Raster数据时要求导出的范围(即Extent)为矩形。使用IExtractionOp接口可以导出圆形、多边形、矩形等范围的Raster数据,其属性和方法如下所示: