在python中利用GDAL对tif文件进行读写的方法


Posted in Python onNovember 29, 2018

利用GDAL库对tif影像进行读取

示例代码默认波段为[B、G、R、NIR的顺序,且为四个波段]

import gdal
def readTif(fileName):
 dataset = gdal.Open(fileName)
 if dataset == None:
  print(fileName+"文件无法打开")
  return
 im_width = dataset.RasterXSize #栅格矩阵的列数
 im_height = dataset.RasterYSize #栅格矩阵的行数
 im_bands = dataset.RasterCount #波段数
 im_data = dataset.ReadAsArray(0,0,im_width,im_height)#获取数据
 im_geotrans = dataset.GetGeoTransform()#获取仿射矩阵信息
 im_proj = dataset.GetProjection()#获取投影信息
 im_blueBand = im_data[0,0:im_height,0:im_width]#获取蓝波段
 im_greenBand = im_data[1,0:im_height,0:im_width]#获取绿波段
 im_redBand = im_data[2,0:im_height,0:im_width]#获取红波段
 im_nirBand = im_data[3,0:im_height,0:im_width]#获取近红外波段

写tif影像函数

#保存tif文件函数
import gdal
import numpy as np
def writeTiff(im_data,im_width,im_height,im_bands,im_geotrans,im_proj,path):
 if 'int8' in im_data.dtype.name:
  datatype = gdal.GDT_Byte
 elif 'int16' in im_data.dtype.name:
  datatype = gdal.GDT_UInt16
 else:
  datatype = gdal.GDT_Float32

 if len(im_data.shape) == 3:
  im_bands, im_height, im_width = im_data.shape
 elif len(im_data.shape) == 2:
  im_data = np.array([im_data])
 else:
  im_bands, (im_height, im_width) = 1,im_data.shape
  #创建文件
 driver = gdal.GetDriverByName("GTiff")
 dataset = driver.Create(path, im_width, im_height, im_bands, datatype)
 if(dataset!= None):
  dataset.SetGeoTransform(im_geotrans) #写入仿射变换参数
  dataset.SetProjection(im_proj) #写入投影
 for i in range(im_bands):
  dataset.GetRasterBand(i+1).WriteArray(im_data[i])
 del dataset

以上这篇在python中利用GDAL对tif文件进行读写的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python  __getattr__与__setattr__使用方法
Sep 06 Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
详解Python 装饰器执行顺序迷思
Aug 08 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
选择Python写网络爬虫的优势和理由
Jul 07 Python
对pytorch的函数中的group参数的作用介绍
Feb 18 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
Jun 08 Python
对Keras自带Loss Function的深入研究
May 25 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 Python
python index() 与 rindex() 方法的使用示例详解
Dec 24 Python
使用python判断你是青少年还是老年人
Nov 29 #Python
pycham查看程序执行的时间方法
Nov 29 #Python
pycharm在调试python时执行其他语句的方法
Nov 29 #Python
Selenium chrome配置代理Python版的方法
Nov 29 #Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 #Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
Nov 29 #Python
python+unittest+requests实现接口自动化的方法
Nov 29 #Python
You might like
php环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
jQuery插件的写法分享
2013/06/12 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
vuejs指令详解
2017/02/07 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
微信小程序报错:this.setData is not a function的解决办法
2017/09/27 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
js html实现计算器功能
2018/11/13 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
在RedHat系Linux上部署Python的Celery框架的教程
2015/04/07 Python
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
python实现简单颜色识别程序
2020/02/19 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
HTML5之SVG 2D入门5—颜色的表示及定义方式
2013/01/30 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
银行开业庆典方案
2014/02/06 职场文书
同学聚会主持词
2014/03/18 职场文书
教师个人发展总结
2015/02/11 职场文书
公司员工奖惩制度
2015/08/04 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle