Arcgis Engine对栅格数据的操作

1 打开栅格数据

1.1 打开文件夹中的栅格数据

第一步,打开栅格数据文件夹的工作空间
第二步,打开栅格数据



static IRasterDataset OpenFileRasterDataset(string folderName, string datasetName)
{
    //打开工作空间
    //创建打开工作空间的对象
    IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass();
    //folderName就是根目录,0是默认参数   
    //创建栅格工作空间  空作空间.OpenFromFile(根目录, 0)
    IRasterWorkspace rasterWorkspace = (IRasterWorkspace)workspaceFactory.OpenFromFile(folderName, 0);

    //打开栅格数据
    //栅格工作空间.OpenRasterDataset(文件名)
    IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(datasetName);
    return rasterDataset;
}

1.2 打开地理数据库中的栅格数据

To access a raster dataset in a geodatabase, first open a geodatabase workspace 
Then use the IRasterWorkspaceEx interface


static IRasterDataset OpenGDBRasterDataset(string folderName, string datasetName)
{
    //打开工作空间
    //创建打开工作空间的对象
    IWorkspaceFactory2 workspaceFactory = new FileGDBWorkspaceFactoryClass();
    //folderName就是根目录,0是默认参数   
    //创建栅格工作空间  空作空间.OpenFromFile(根目录, 0)
    IRasterWorkspaceEx rasterWorkspace = (IRasterWorkspaceEx)workspaceFactory.OpenFromFile(folderName, 0);
    //打开栅格数据
    //栅格工作空间.OpenRasterDataset(文件名)
    IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(datasetName);
    return rasterDataset;
}

2 创建栅格数据集

2.1 在文件夹中创建

public static IRasterDataset CreateRasterDataset(string Path, string FileName)
{
    //IRasterWorkspace2是ArcObjects中的接口,用于访问栅格数据存储。它提供了管理和操作栅格数据的方法,如打开、创建、复制和删除栅格数据集等。
    //此接口继承自IRasterWorkspace接口,并添加了一些额外的方法,比如获取栅格数据集属性和元数据等
    //Path根目录
    IRasterWorkspace2 rasterWs = OpenRasterWorkspace(Path);
    //定义栅格数据的空间参考
    //ISpatialReference是ArcObjects中的接口,用于描述和管理空间参考信息。这个接口提供了许多方法来定义和处理地理坐标系、投影坐标系、大地水准面和椭球体等相关参数。
    //它还支持将数据从一个空间参考系统转换为另一个空间参考系统
    ISpatialReference sr = new UnknownCoordinateSystemClass();
    //定义栅格数据集的原点,即左下角坐标.
    IPoint origin = new PointClass();
    origin.PutCoords(15.0, 15.0);
    //定义栅格数据集的属性
    int width = 100; //一行有多少个像元
    int height = 100; //一列有多少个像元
    double xCell = 30; //像元宽度
    double yCell = 30; //像元高度
    int NumBand = 1; // 像元波段数
                     //创建栅格数据
    IRasterDataset rasterDataset = rasterWs.CreateRasterDataset(FileName, "TIFF", origin, width, height, xCell, yCell, NumBand, rstPixelType.PT_UCHAR, sr, true);

    //如果还需要设置Nodata值的话,代码如下
    //获取波段
    IRasterBandCollection rasterBands = (IRasterBandCollection)rasterDataset;
    IRasterBand rasterBand;
    //创建IRasterProps对象,操作属性
    IRasterProps rasterProps;
    //获取第一波段
    rasterBand = rasterBands.Item(0);
    rasterProps = (IRasterProps)rasterBand;
    //设置Nodata值
    rasterProps.NoDataValue = 255;
    //Create a raster from the dataset.
    IRaster raster = rasterDataset.CreateDefaultRaster();

    //Create a pixel block using the weight and height of the raster dataset. 
    //If the raster dataset is large, a smaller pixel block should be used. 
    //Refer to the topic "How to access pixel data using a raster cursor".

    //使用栅格长宽指定像元块的大小
    IPnt blocksize = new PntClass();
    blocksize.SetCoords(width, height);
    //使用CreatePixelBlock方法创建一个像素块pixelblock,该方法以blocksize作为参数,并将其强制转换为IPixelBlock3类型
    IPixelBlock3 pixelblock = raster.CreatePixelBlock(blocksize) as IPixelBlock3;

    //Populate some pixel values to the pixel block.
    System.Array pixels;
    pixels = (System.Array)pixelblock.get_PixelData(0);
    for (int i = 0; i < width; i++)
        for (int j = 0; j < height; j++)
            if (i == j)
                pixels.SetValue(Convert.ToByte(255), i, j);
            else
                pixels.SetValue(Convert.ToByte((i * j) / 255), i, j);
    //set_PixelData方法将像素数据pixels赋值给像素块
    pixelblock.set_PixelData(0, (System.Array)pixels);

    //定义像素块写的起点,从左上角开始
    IPnt upperLeft = new PntClass();
    upperLeft.SetCoords(0, 0);

    //写像素块
    IRasterEdit rasterEdit = (IRasterEdit)raster;
    rasterEdit.Write(upperLeft, (IPixelBlock)pixelblock);

    //Release rasterEdit explicitly.
    System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit);

    return rasterDataset;
}

//创建栅格工作空间
public static IRasterWorkspace2 OpenRasterWorkspace(string PathName)
{
    IWorkspaceFactory workspaceFact = new RasterWorkspaceFactoryClass();
    //强制转换成IRasterWorkspace2
    return (IRasterWorkspace2)workspaceFact.OpenFromFile(PathName, 0);
}

你可能感兴趣的:(arcgis)