• 创建栅格数据


    public static IRasterDataset CreateRasterDataset(string Path, string FileName)
    {
        try
        {
            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 dimensions 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 TIFF format.
            IRasterDataset rasterDataset = rasterWs.CreateRasterDataset(FileName, "TIFF",
                origin, width, height, xCell, yCell, NumBand, rstPixelType.PT_UCHAR, sr,
                true);
    
            //If you need to set NoData for some of the pixels, you need to set it on band 
            //to 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, a NoData value needs to be set for each band.
            rasterProps.NoDataValue = 255;
            //Create a raster from the dataset.
            IRaster raster = rasterDataset.CreateFullRaster();
    
            //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);
            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;
        }
    }
  • 相关阅读:
    对json的爱恨情仇
    Linux操作系统改动PATH的方法
    不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧拿出来拍啊
    cmd启动Oracle服务和监听服务
    8.4.1 跨越整个分区的聚合函数
    nginx 代理tcp长连接短连接配置
    Nginx Upstream Keepalive 分析 保持长连接
    Xargs用法详解
    删除除了指定扩展名文件其他全部删除
    LINUX的文件按时间排序
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/1947080.html
Copyright © 2020-2023  润新知