在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中的__new__()方法的使用
Apr 09 Python
python实现中文转换url编码的方法
Jun 14 Python
浅谈五大Python Web框架
Mar 20 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
Python3学习urllib的使用方法示例
Nov 29 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
Apr 19 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
通过python爬虫赚钱的方法
Jan 29 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
python利用tkinter实现屏保
Jul 30 Python
Django多数据库的实现过程详解
Aug 01 Python
python数据类型强制转换实例详解
Jun 22 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二维数组用键名分组相加实例函数
2013/11/06 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
2014/09/22 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python获取多线程及子线程的返回值
2017/11/15 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
pytorch实现mnist分类的示例讲解
2020/01/10 Python
Python之变量类型和if判断方式
2020/05/05 Python
a标签下载链接的简单实现
2016/09/13 HTML / CSS
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
给医务人员表扬信
2014/01/12 职场文书
应聘面试自我评价
2014/01/24 职场文书
平面设计求职信
2014/03/10 职场文书
大一新生学期自我评价
2014/04/09 职场文书
租房协议书范例
2014/10/14 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
聚会通知怎么写
2015/04/23 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技