【问题标题】:create geoTiff gdal from np array从 np 数组创建 geoTiff gdal
【发布时间】:2018-08-07 04:59:46
【问题描述】:

我有一个形状为 (7703,7703,9) 的 numpy 数组

我想使用 gdal 将此数组导出为 7700 行 x 7703 列,其中包含 9 个分隔带的 geoTiff 图像。

def CreateGeoTiff(outRaster, data, geo_transform, projection):
    driver = gdal.GetDriverByName('GTiff')
    rows, cols, no_bands = data.shape
    DataSet = driver.Create(outRaster, cols, rows, no_bands, gdal.GDT_Byte)
    DataSet.SetGeoTransform(geo_transform)
    DataSet.SetProjection(projection)
    for i, image in enumerate(data, 1):
        DataSet.GetRasterBand(i).WriteArray( image )
    DataSet = None

但它返回错误:

分段错误(核心转储)

你能帮我解决这个错误或如何使用 gdal 导出多波段图像吗?

谢谢

【问题讨论】:

    标签: python-3.x image export gdal


    【解决方案1】:

    问题似乎是您的循环需要另一种数据结构。

    rows, cols, no_bands = data.shape 行看来,您的数据似乎具有通道最后的形状 [rows, cols, channels]。

    现在,当您循环时,我猜您实际上希望循环遍历每个通道,但实际上您是循环遍历每一行。

    为了遍历每个通道,您应该将数据重组为 [通道、行、列]。这可以通过以下方式完成

    data = np.moveaxis(data, -1, 0)

    因此你可以将你的函数改写如下:

    def CreateGeoTiff(outRaster, data, geo_transform, projection):
        driver = gdal.GetDriverByName('GTiff')
        rows, cols, no_bands = data.shape
        DataSet = driver.Create(outRaster, cols, rows, no_bands, gdal.GDT_Byte)
        DataSet.SetGeoTransform(geo_transform)
        DataSet.SetProjection(projection)
    
        data = np.moveaxis(data, -1, 0)
    
        for i, image in enumerate(data, 1):
            DataSet.GetRasterBand(i).WriteArray(image)
        DataSet = None
    

    【讨论】:

      猜你喜欢
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2020-11-02
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      相关资源
      最近更新 更多