在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中关于字符串对象的一些基础知识
Apr 08 Python
python实现矩阵乘法的方法
Jun 28 Python
python类和继承用法实例
Jul 07 Python
python开发利器之ulipad的使用实践
Mar 16 Python
python3.5基于TCP实现文件传输
Mar 20 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
Python hmac模块使用实例解析
Dec 24 Python
tensorflow 实现数据类型转换
Feb 17 Python
Python requests设置代理的方法步骤
Feb 23 Python
python多进程下的生产者和消费者模型
May 07 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
用python对excel进行操作(读,写,修改)
Dec 25 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
解析strtr函数的效率问题
2013/06/26 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
Document对象内容集合(比较全)
2010/09/06 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
JavaScript极简入门教程(一):基础篇
2014/10/25 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
python 中的list和array的不同之处及转换问题
2018/03/13 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
2014端午节活动策划方案
2014/01/27 职场文书
美容院考勤制度
2014/01/30 职场文书
捐助倡议书范文
2014/04/15 职场文书
《记金华的双龙洞》教学反思
2014/04/19 职场文书
2014乡镇干部对照检查材料思想汇报
2014/09/26 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
暑期实践个人总结
2015/03/06 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js
vue实现拖拽交换位置
2022/04/07 Vue.js