在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中assert用法实例分析
Apr 30 Python
Python随机生成信用卡卡号的实现方法
May 14 Python
python下paramiko模块实现ssh连接登录Linux服务器
Jun 03 Python
python制作企业邮箱的爆破脚本
Oct 05 Python
Python使用functools实现注解同步方法
Feb 06 Python
python实现微信发送邮件关闭电脑功能
Feb 22 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
Python进阶之@property动态属性的实现
Apr 01 Python
使用Python快乐学数学Github万星神器Manim简介
Aug 07 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
python解释器安装教程的方法步骤
Jul 02 Python
python turtle绘制多边形和跳跃和改变速度特效
Mar 16 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/04/09 日漫
递归列出所有文件和目录
2006/10/09 PHP
PHP 程序员的调试技术小结
2009/11/15 PHP
解析php dirname()与__FILE__常量的应用
2013/06/24 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
简单的php购物车代码
2020/06/05 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
微信中一些常用的js方法汇总
2015/03/12 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
纯javaScript、jQuery实现个性化图片轮播【推荐】
2017/01/08 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
2017/07/27 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
对Django url的几种使用方式详解
2019/08/06 Python
Python matplotlib绘制饼状图功能示例
2019/09/10 Python
python关闭占用端口方式
2019/12/17 Python
财务与信息服务专业推荐信
2013/11/28 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
安全标兵事迹材料
2014/08/17 职场文书
导游词之江南周庄
2019/12/06 职场文书