首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从np数组创建geoTiff gdal

从np数组创建geoTiff gdal
EN

Stack Overflow用户
提问于 2018-08-07 12:59:46
回答 1查看 3.2K关注 0票数 0

我有一个numpy数组,其形状是(7703,7703,9)

我想导出这个数组到7700行x7703列与9个分离的波段geoTiff图像使用gdal。

代码语言:javascript
复制
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导出多波段图像?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-08-08 19:07:46

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

rows, cols, no_bands = data.shape行看,你的数据看起来是这样的,其中通道是最后一行,列,通道。

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

为了在每个通道上循环,你应该把你的数据重新组织成通道、行、列。这可以通过以下方法来完成

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

因此,您可以将您的函数重写为:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51719096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档