在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获取DLL和EXE文件版本号的方法
Mar 10 Python
Python下的Softmax回归函数的实现方法(推荐)
Jan 26 Python
python学习教程之使用py2exe打包
Sep 24 Python
django 开发忘记密码通过邮箱找回功能示例
Apr 17 Python
python pycurl验证basic和digest认证的方法
May 02 Python
python中for用来遍历range函数的方法
Jun 08 Python
python实现汽车管理系统
Nov 30 Python
对python中assert、isinstance的用法详解
Nov 27 Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 Python
Python txt文件如何转换成字典
Nov 03 Python
用python查找统一局域网下ip对应的mac地址
Jan 13 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 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中的array数组类型分析说明
2010/07/27 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
PDO::setAttribute讲解
2019/01/29 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
2017/02/18 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
python爬虫基本知识
2018/03/05 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
django框架使用orm实现批量更新数据的方法
2019/06/21 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
PHP笔试题
2012/02/22 面试题
学校办公室主任职责
2013/12/27 职场文书
初中政治教学反思
2014/01/17 职场文书
上课说话检讨书500字
2014/11/01 职场文书
培养联系人考察意见
2015/06/01 职场文书
科级干部培训心得体会
2016/01/06 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers