在Python中

时间:2016-06-06 01:27:30

标签: python arrays gis tiff raster

使用一个形状为(100,100)的二维数组,我想以.tiff格式将其保存到光栅文件中。

我可以使用gdal包来读取已存在的tiff个文件。但我仍然无法找到一种简单的方法来将二维数组转换为tiff文件

使用plt.imsave("xx.tif",array)

def array_to_raster(array):
    """Array > Raster
    Save a raster from a C order array.
    :param array: ndarray
     """
    dst_filename = 'xxx.tiff'
    x_pixels = 100  # number of pixels in x
    y_pixels = 100  # number of pixels in y
    driver = gdal.GetDriverByName('GTiff')
    dataset = driver.Create(
           dst_filename,
           x_pixels,
           y_pixels,
           1,
           gdal.GDT_Float32, )
    dataset.GetRasterBand(1).WriteArray(array)
    dataset.FlushCache()  # Write to disk.
    return dataset, dataset.GetRasterBand(1)  

他们都没能达到我的目标。第二种方法改编自here,可以将数组转换为带投影的geotiff

是否有一些简单的方法可以将数组保存到.tiff,所以我可以通过下次导入tiff文件来调用它。

任何建议都会受到赞赏。

1 个答案:

答案 0 :(得分:4)

tif栅格可以被视为'array + proj + geotransforms'。 如果要将数组写入tif,可以参考以下代码

dst_filename = 'xxx.tiff'
x_pixels = 100  # number of pixels in x
y_pixels = 100  # number of pixels in y
driver = gdal.GetDriverByName('GTiff')
dataset = driver.Create(dst_filename,x_pixels, y_pixels, 1,gdal.GDT_Float32)
dataset.GetRasterBand(1).WriteArray(array)

# follow code is adding GeoTranform and Projection
geotrans=data0.GetGeoTransform()  #get GeoTranform from existed 'data0'
proj=data0.GetProjection() #you can get from a exsited tif or import 
outds.SetGeoTransform(geotrans)
outds.SetProjection(proj)
outds.FlushCache()
outds=None