创建一个栅格图层

//This example creates a raster dataset with a specified dimension, populates pixel values, and set a NoData value.

public static IRasterDataset CreateRasterDataset(string Path, string FileName)

{

    try

    {

        //Create raster workspace. This example also works with any other workspaces that support raster data such as a file geodatabase (FGDB) workspace.

        //Access the workspace and the SDE workspace.

        IRasterWorkspace2 rasterWs = OpenRasterWorkspace(Path);

        //Define the spatial reference of the raster dataset.

        ISpatialReference sr = new UnknownCoordinateSystemClass();

        //Define the origin for the raster dataset, which is the lower left corner of the raster.

        IPoint origin = new PointClass();

        origin.PutCoords(15.0, 15.0);

        //Define the dimension of the raster dataset.

        int width = 100; //This is the width of the raster dataset.

        int height = 100; //This is the height of the raster dataset.

        double xCell = 30; //This is the cell size in x direction.

        double yCell = 30; //This is the cell size in y direction.

        int NumBand = 1; // This is the number of bands the raster dataset contains.

        //Create a raster dataset in grid format.

        IRasterDataset rasterDataset = rasterWs.CreateRasterDataset(FileName, "GRID",

            origin, width, height, xCell, yCell, NumBand, rstPixelType.PT_UCHAR, sr,

            true);

        //Get the raster band.

        IRasterBandCollection rasterBands = (IRasterBandCollection)rasterDataset;

        IRasterBand rasterBand;

        IRasterProps rasterProps;

        rasterBand = rasterBands.Item(0);

        rasterProps = (IRasterProps)rasterBand;

        //Set NoData if necessary. For a multiband image, NoData value needs to be set for each band.

        rasterProps.NoDataValue = 255;

        //Create a raster from the dataset.

        IRaster raster = rasterDataset.CreateDefaultRaster();



        //Create a pixel block.

        IPnt blocksize = new PntClass();

        blocksize.SetCoords(width, height);

        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);



        pixelblock.set_PixelData(0, (System.Array)pixels);



        //Define the location that the upper left corner of the pixel block is to write.

        IPnt upperLeft = new PntClass();

        upperLeft.SetCoords(0, 0);



        //Write the pixel block.

        IRasterEdit rasterEdit = (IRasterEdit)raster;

        rasterEdit.Write(upperLeft, (IPixelBlock)pixelblock);



        //Release rasterEdit explicitly.

        System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit);



        return rasterDataset;

    }

    catch (Exception ex)

    {

        System.Diagnostics.Debug.WriteLine(ex.Message);

        return null;

    }

}



public static IRasterWorkspace2 OpenRasterWorkspace(string PathName)

{

    //This function opens a raster workspace.

    try

    {

        IWorkspaceFactory workspaceFact = new RasterWorkspaceFactoryClass();

        return workspaceFact.OpenFromFile(PathName, 0)as IRasterWorkspace2;

    }

    catch (Exception ex)

    {

        System.Diagnostics.Debug.WriteLine(ex.Message);

        return null;

    }

}

你可能感兴趣的:(创建)