Python 中将数组保存到光栅文件的最简单方法
Simplest way to save array into raster file in Python
有一个形状为 (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
文件来调用它。
如有任何建议,我们将不胜感激。
一个tif光栅可以被认为是'array+proj+geotransforms'。
如果要将数组写入tiff,可以参考以下代码:
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
dataset.SetGeoTransform(geotrans)
dataset.SetProjection(proj)
dataset.FlushCache()
dataset=None
使用 imageio 的最简单方法
如果你不关心它的投影,它就是一个单线:
import imageio
imageio.imwrite('test.tiff', [[0,255],[255,0]])
有一个形状为 (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
文件来调用它。
如有任何建议,我们将不胜感激。
一个tif光栅可以被认为是'array+proj+geotransforms'。 如果要将数组写入tiff,可以参考以下代码:
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
dataset.SetGeoTransform(geotrans)
dataset.SetProjection(proj)
dataset.FlushCache()
dataset=None
使用 imageio 的最简单方法
如果你不关心它的投影,它就是一个单线:
import imageio
imageio.imwrite('test.tiff', [[0,255],[255,0]])