weixin_41810172 2023-09-21 22:10 采纳率: 28.6%
浏览 27
已结题

C#和GDAL对栅格处理

问题1:C#和GDAL如何修改栅格数据Band的blocksize大小?一般影像Band的blocksize就是一个如:19321,我想修改位512512
问题2:C#和GDAL如何修读取栅格再输出栅格时,两个栅格数据的投影精度没变,但投影名称为什么会发生变化?如输入:WGS84_UTM_1N,输出时会变成:WGS84 UTM 1N。

  • 写回答

10条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-09-21 22:26
    关注
    获得0.60元问题酬金

    引用 皆我百晓生 小程序回应内容作答:
    问题1:要修改栅格数据Band的blocksize大小,可以使用GDAL中的GDALRasterBand.GetBlockSize()和GDALRasterBand.SetBlockSize()方法来实现。下面是示例代码:

    using OSGeo.GDAL;
    
    // 打开栅格数据集
    Dataset ds = Gdal.Open("path/to/raster", Access.GA_Update);
    
    // 获取第一个Band
    Band band = ds.GetRasterBand(1);
    
    // 设置blocksize为512x512
    int blockSizeX = 512;
    int blockSizeY = 512;
    band.SetBlockSize(blockSizeX, blockSizeY);
    
    // 关闭数据集
    band.Dispose();
    ds.Dispose();
    

    问题2:栅格数据的投影精度不会发生变化,但投影名称在输出时可能会发生变化。这是因为在输出时,GDAL会将投影名称中的下划线替换为空格。如果想保持输出时的投影名称不变,可以手动设置输出数据集的投影信息。下面是示例代码:

    using OSGeo.GDAL;
    
    // 打开输入栅格数据集
    Dataset inputDs = Gdal.Open("path/to/input/raster", Access.GA_ReadOnly);
    
    // 创建输出栅格数据集
    Dataset outputDs = Gdal.GetDriverByName("GTiff").Create("path/to/output/raster", inputDs.RasterXSize, inputDs.RasterYSize, inputDs.RasterCount, DataType.GDT_Float32);
    
    // 设置输出栅格数据集的投影信息和变换系数
    outputDs.SetProjection(inputDs.GetProjection());
    outputDs.SetGeoTransform(inputDs.GetGeoTransform());
    
    // 释放资源
    inputDs.Dispose();
    outputDs.Dispose();
    

    通过上述代码,保持了输入和输出数据集的投影精度和名称不变。

    评论

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 赞助了问题酬金15元 9月21日
  • 创建了问题 9月21日