巨菜的阿豪 2023-10-18 16:43 采纳率: 50%
浏览 25
已结题

报错Writing through VRTSourcedRasterBand is not supported

ERROR 1: Writing through VRTSourcedRasterBand is not supported.
ERROR 1: C:\Users\Lenovo\AppData\Local\Temp\s8fk.0, band 1: IReadBlock failed at X offset 0, Y offset 0: Writing through VRTSourcedRasterBand is not supported.

GDALDataset *m_out_ds=(GDALDataset*)GDALAutoCreateWarpedVRT(poDSRef, in_srs_wkt, out_srs_wkt, GRA_NearestNeighbour , 0,NULL);
//调用该接口时,报上面错误
m_out_ds->RasterIO(GF_Read, rx, ry, rxsize, rysize, outDsRasterIO, wxsize, wysize, m_tiledata, m_dataBandsCount, p_band_list, 0, 0, 0);

调用gdal接口时报错,python走相同的流程不报错,python代码如下:

self.out_ds = gdal.AutoCreateWarpedVRT( self.in_ds, self.in_srs_wkt, self.out_srs.ExportToWkt() )
data = ds.ReadRaster(rx, ry, rxsize, rysize, wxsize, wysize, band_list=list(range(1,self.dataBandsCount+1)))
  • 写回答

1条回答 默认 最新

  • Leodong. 2023-10-18 16:46
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    这个错误是由于在C++和Python中使用GDAL库时,尝试通过VRTSourcedRasterBand进行写操作,但该操作不受支持。为了解决这个问题,你可以尝试以下方法:
    1、 在C++代码中,使用GDALWarp函数替换GDALAutoCreateWarpedVRT函数。GDALWarp函数允许你指定输出文件名,这样可以避免使用VRTSourcedRasterBand。示例代码如下:

    GDALDataset *m_out_ds = (GDALDataset *)GDALWarp(poDSRef, out_filename, in_srs_wkt, out_srs_wkt, GRA_NearestNeighbour, 0, NULL, NULL, NULL);
    

    2、 在Python代码中,使用gdal.Warp函数替换gdal.AutoCreateWarpedVRT函数。示例代码如下:

    self.out_ds = gdal.Warp(self.out_filename, self.in_ds, format='GTiff', srcSRS=self.in_srs_wkt, dstSRS=self.out_srs.ExportToWkt(), resampleAlg=GRA_NearestNeighbour)
    data = ds.ReadRaster(rx, ry, rxsize, rysize, wxsize, wysize, band_list=list(range(1, self.dataBandsCount + 1)))
    

    这样修改后,你的代码应该可以正常运行,不再出现"Writing through VRTSourcedRasterBand is not supported"的错误。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月31日
  • 创建了问题 10月18日