当前位置:   article > 正文

利用python中GDAL读写tif文件_python gdal 读取 超大图片

python gdal 读取 超大图片

废话不多说,直接上代码

读取tif:

  1. from osgeo import gdal
  2. import sys
  3. def Read_img2array(img_file_path):
  4. """
  5. 读取栅格数据,将其转换成对应数组
  6. img_file_path: 栅格数据路径
  7. :return: 返回投影,几何信息,和转换后的数组
  8. """
  9. dataset = gdal.Open(img_file_path) # 读取栅格数据
  10. print('处理图像波段数总共有:', dataset.RasterCount)
  11. # 判断是否读取到数据
  12. if dataset is None:
  13. print('Unable to open *.tif')
  14. sys.exit(1) # 退出
  15. projection = dataset.GetProjection() # 投影
  16. geotrans = dataset.GetGeoTransform() # 几何信息
  17. im_width = dataset.RasterXSize #栅格矩阵的列数
  18. im_height = dataset.RasterYSize #栅格矩阵的行数
  19. im_bands = dataset.RasterCount #波段数
  20. # 直接读取dataset
  21. img_array = dataset.ReadAsArray()
  22. return im_width,im_height,im_bands,projection, geotrans, img_array

数组写入tif:

  1. import numpy as np
  2. from osgeo import gdal
  3. #tiff_file为tif,im_data为数组
  4. def Write_img2array(tiff_file, im_proj, im_geotrans, data_array):
  5. if 'int8' in data_array.dtype.name:
  6. datatype = gdal.GDT_Int16
  7. elif 'int16' in data_array.dtype.name:
  8. datatype = gdal.GDT_Int16
  9. else:
  10. datatype = gdal.GDT_Float32
  11. if len(data_array.shape) == 3:
  12. im_bands, im_height, im_width = data_array.shape
  13. else:
  14. im_bands, (im_height, im_width) = 1,data_array.shape
  15. driver = gdal.GetDriverByName("GTiff")
  16. dataset = driver.Create(tiff_file, im_width, im_height, im_bands, datatype)
  17. dataset.SetGeoTransform(im_geotrans)
  18. dataset.SetProjection(im_proj)
  19. if im_bands == 1:
  20. dataset.GetRasterBand(1).WriteArray(data_array)
  21. else:
  22. for i in range(im_bands):
  23. dataset.GetRasterBand(i+1).WriteArray(data_array[i])
  24. del dataset

实用的话给个赞和关注吧~

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号