在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二维码生成库qrcode安装和使用示例
Dec 16 Python
使用Python脚本对Linux服务器进行监控的教程
Apr 02 Python
从Python的源码浅要剖析Python的内存管理
Apr 16 Python
Python中的字符串类型基本知识学习教程
Feb 04 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
Python实现的三层BP神经网络算法示例
Feb 07 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
Feb 16 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
python 装饰器的基本使用
Jan 13 Python
如何通过一篇文章了解Python中的生成器
Apr 02 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
PHP表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
php 文件上传实例代码
2012/04/19 PHP
深入解析php中的foreach函数
2013/08/31 PHP
PHP高手需要要掌握的知识点
2014/08/21 PHP
php动态变量定义及使用
2015/06/10 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
BOM系列第二篇之定时器requestAnimationFrame
2016/08/17 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
vue cli 全面解析
2018/02/28 Javascript
Jquery遍历筛选数组的几种方法和遍历解析json对象,Map()方法详解以及数组中查询某值是否存在
2019/01/18 jQuery
jQuery操作事件完整实例分析
2020/01/10 jQuery
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
vue中全局路由守卫中替代this操作(this.$store/this.$vux)
2020/07/24 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
户外亲子活动策划方案
2014/02/07 职场文书
团日活动总结书
2014/05/08 职场文书
咖啡店创业计划书
2014/08/15 职场文书
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android