Python遥感开发之GDAL读写遥感影像

news2024/9/23 1:28:39

Python遥感开发之GDAL读写遥感影像

  • 1 读取tif信息方法一
  • 2 读取tif信息方法二
  • 3 自己封装读取tif的方法(推荐)
  • 4 对读取的tif数据进行简单运算
  • 5 写出tif影像(推荐)

前言:主要介绍了使用GDAL读写遥感影像数据的操作,包括读取行、列、投影、值以及数据的简单运算和生成新的tif影像。


1 读取tif信息方法一

from osgeo import gdal
import numpy as np

if __name__ == '__main__':
    dataset = gdal.Open("lucc.tif")#读取的是某地的土地类型

    col = dataset.RasterXSize  # 图像长度
    print("col:",col)

    row = dataset.RasterYSize  # 图像宽度
    print("row:", row)

    geotrans = dataset.GetGeoTransform()  # 读取仿射变换
    print("geotrans:", geotrans)

    proj = dataset.GetProjection()  # 读取投影
    print("proj:", proj)

    # num_bands = dataset.RasterCount  # 查看波段个数,单波段默认是1
    # print(num_bands)
    # data_band = dataset.GetRasterBand(1)  # 1波段的具体内容
    # print(data_band.ReadAsArray())

    data = dataset.ReadAsArray()  # 转为numpy格式
    data = data.astype(np.float32)
    a = data[0][0]
    data[data == a] = np.nan
    print("data:", data)

    #遍历每一行像元值
    for i in range(0,row):
        print(i,data[i])

    #遍历读取每一个像元
    for i in range(0,row):
        for j in range(0,col):
            if not np.isnan(data[i][j]):#筛选有效值
                print(data[i][j])

在这里插入图片描述
在这里插入图片描述

2 读取tif信息方法二

from osgeo import gdalnumeric
import numpy as np

if __name__ == '__main__':
    data = gdalnumeric.LoadFile("lucc.tif")
    data = data.astype(np.float32)
    a = data[0][0]
    data[data == a] = np.nan
    #遍历每一行像元
    for d in data:
        print(d)
    #遍历每一个像元
    for d in data:
        for s in d:
            print(s)

3 自己封装读取tif的方法(推荐)

import numpy as np
from osgeo import gdal,gdalnumeric

def read_tif01(filepath):
    dataset = gdal.Open(filepath)
    col = dataset.RasterXSize#图像长度
    row = dataset.RasterYSize#图像宽度
    geotrans = dataset.GetGeoTransform()#读取仿射变换
    proj = dataset.GetProjection()#读取投影
    data = dataset.ReadAsArray()#转为numpy格式
    data = data.astype(np.float32)#转为float类型
    a = data[0][0]
    data[data == a] = np.nan #原因:读取某一个行政区的影像图的时候,往往第一行的第一列值为空值
    return [col, row, geotrans, proj, data]

def read_tif02(filepath):
    data = gdalnumeric.LoadFile(filepath)
    data = data.astype(np.float32)
    a = data[0][0]
    data[data == a] = np.nan
    return data

if __name__ == '__main__':
    col, row, geotrans, proj, data = read_tif01("lucc.tif")
    data2 = read_tif02("lucc.tif")

4 对读取的tif数据进行简单运算

import numpy as np
from osgeo import gdal

def read_tif01(filepath):
    dataset = gdal.Open(filepath)
    col = dataset.RasterXSize#图像长度
    row = dataset.RasterYSize#图像宽度
    geotrans = dataset.GetGeoTransform()#读取仿射变换
    proj = dataset.GetProjection()#读取投影
    data = dataset.ReadAsArray()#转为numpy格式
    data = data.astype(np.float32)#转为float类型
    a = data[0][0]
    data[data == a] = np.nan #原因:读取某一个行政区的影像图的时候,往往第一行的第一列值为空值
    return [col, row, geotrans, proj, data]

if __name__ == '__main__':
    col, row, geotrans, proj, data = read_tif01("lucc.tif")
    print(data[1])
    data = data*2 #在原来的data基础上所有值乘以2
    print(data[1])

    #可以进行条件筛选
    data[data==6] = 10#所有像元值为6的重新赋值为10
    print(data[1])

在这里插入图片描述

5 写出tif影像(推荐)

import numpy as np
from osgeo import gdal

def read_tif01(filepath):
    dataset = gdal.Open(filepath)
    col = dataset.RasterXSize#图像长度
    row = dataset.RasterYSize#图像宽度
    geotrans = dataset.GetGeoTransform()#读取仿射变换
    proj = dataset.GetProjection()#读取投影
    data = dataset.ReadAsArray()#转为numpy格式
    data = data.astype(np.float32)#转为float类型
    a = data[0][0]
    data[data == a] = np.nan #原因:读取某一个行政区的影像图的时候,往往第一行的第一列值为空值
    return [col, row, geotrans, proj, data]

def save_tif(data, file, output):
    ds = gdal.Open(file)
    shape = data.shape
    driver = gdal.GetDriverByName("GTiff")
    dataset = driver.Create(output, shape[1], shape[0], 1, gdal.GDT_Float32)#以float类型进行存储
    dataset.SetGeoTransform(ds.GetGeoTransform())
    dataset.SetProjection(ds.GetProjection())
    dataset.GetRasterBand(1).WriteArray(data)

if __name__ == '__main__':
    col, row, geotrans, proj, data = read_tif01("lucc.tif")
    data = data*2 #在原来的data基础上所有值乘以2
    #生成新的tif
    save_tif(data,"lucc.tif","new_lucc.tif")#可以自己指定文件目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于51单片机霍尔汽车自行车码表测速测里程显示proteus仿真原理图PCB

功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶分三种显示模式 a)显示实时速度和本次里程 b)显示当前时间 c)显示报警速度和总里程 2.超过报警速度将声光报警 3.功能按键介绍 a显示状态下: 上’键——电机速度1 下’键——电机速度-1 设置’键——电机启动/暂…

四、【基础】组件实例三大核心属性之一 state

文章目录1、CODE2、Result2.1、初始化2.2、触发更新3、state简写理解: state是组件对象最重要的属性, 值是对象(可以包含多个key-value的组合)组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新渲染组件) 注意: 组件中rende…

算法导论习题—摊还时间代价分析、栈实现队列、贪心算法近似比、集合覆盖问题

在执行的nnn个操作中,有至多⌈lgn⌉⌈lg n⌉⌈lgn⌉个操作的次序是222的幂,这些操作的次序(即代价)如下 1,2,4,8,⋅⋅⋅,2⌈lgn⌉1, 2, 4, 8, , 2 ⌈lg n⌉ 1,2,4,8,⋅⋅⋅,2⌈lgn⌉ nnn个操作的总代价为 T∑k0⌈lgn⌉2k(n−⌈…

Android App网络通信中利用okhttp实现下拉刷新和上拉加载实战(抓取文章信息 超详细 附源码)

需要源码和工具类请点赞关注收藏后评论区留言私信~~~ 一、实现下拉刷新和上拉加载功能 网络上的信息很多,往往无法依次拉下来,故而App引入了分页加载功能,最开始先展示第一页内容,等到用户拉到该页底部后再去加载下一页内容&…

网络安全面试、实习、校招经验打包分享

整理收集了近些年的资料 内几乎覆盖了各大公司,大厂小厂都有 很多培训机构都是收费提供 本公众号无任何套路全部免费 提供下载学习 为了防止失效,建议下载收藏起来 以后总会用得上! 下面截取部分资料 腾讯-安全技术实习生 时长&am…

流媒体技术基础-摄像头接口与标准

一、摄像头接口概括 摄像头按接口分类如下 主板直接接的专用接口 SPI接口:串行传输、速度慢。常用用于MCU DVP接口:并口传输,速度较慢,传输的带宽低。 MIPI接口:手机平台标准接口,差分串口传输&#xff…

CSS3基础

CSS 层叠样式表Cascading Style Sheets,缩写为CSS,是一种样式表语言,用来描述HTML或XML(包括如SVG、MathML、XHTML 之类的XML 分支语言)文档的呈现。 CSS描述了在屏幕、纸质、音频等其它媒体上的元素应该如何被渲染的问…

AI 预测世界杯比赛结果,惊掉下巴

哈喽,大家好。 今天看到Kaggle上有一个预测世界杯比赛结果的项目,截至目前 4 场比赛预测结果全中。 今天把源码研究了一下,做了中文注释,给大家分享下。 文章目录技术提升1. 获取数据集2. 特征工程3. 建模4. 预测技术提升 本文…

“软硬兼施”,全方位守护企业数据安全

编者按:知识管理涉及大量企业数据,所以其数据安全问题不容忽视。如何做好企业知识管理安全?本文分析了企业数据安全问题主要来自哪里,并从设备、部署、人员管控三方面出发,最终指出了解决方案。 关键词:私…

ORB-SLAM3算法学习—Frame构造—基于SAD滑窗的双目特征匹配

文章目录0总述1双目匹配1.1为左目每个特征点建立带状区域搜索表,限定搜索区域。(已提前极线校正)1.2对左目相机每个特征点,通过描述子在右目带状搜索区域找到匹配点1.3通过SAD滑窗得到匹配修正量bestincR1.4 做抛物线拟合找谷底得…

力扣刷题(代码回忆录)——回溯算法

关于回溯算法,你该了解这些!回溯算法:组合问题回溯算法:组合问题再剪剪枝回溯算法:求组合总和!回溯算法:电话号码的字母组合本周小结!(回溯算法系列一)回溯算…

变压器励磁电感以及漏感

1 励磁电感(magnetic inductance):脉冲变压器的初级电感 仅在变压器中才出现的名词,也就是一个等效电感值,事实上这个电感是变压器的初级侧电感,作用在其上的电流不会传导到次级,它的作用是拿来对铁芯产生激磁作用,使铁芯内的铁磁分子可以用来导磁,就好比铁芯是磁中性,绕上…

SuperMap iManager for K8S使用XFS文件系统类型出现节点异常解决办法

前段时间,遇到了多个用户在使用iManager for K8S的过程出现K8S节点宕机,或者是使用无法使用任何命令的情况。通过了解之后发现这些客户都存在一个共同点,服务节点的文件系统类型都是XFS,并且使用的NFS作为存储。本篇文章将讲解如何…

窗口函数简介与总结

目录 什么是窗口函数 窗口函数的实现原理 窗口函数使用场景 常用的窗口函数有: 1. 窗口排序函数:ROW_NUMBER()、RANK()、DENSE_RANK(); 2. 窗口聚合函数:SUM()、MIN()、MAX()、AVG(); 3. LAG() 4. LEAD() 5. …

88.Django中间件的说明与使用方法

1. 概述 ​ AOP(Aspect Oriented Programming ),面向切面编程,是对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。可以实现在…

css-实现卡牌的发牌和翻牌动画

场景描述: 打开抽卡界面,卡牌出现并发牌至固定的位置,此时展示的是卡牌的背面;用户点击卡牌时,卡牌进行翻转,并展示卡牌内容,或者发牌后自动进行翻转和展示。 本实例在页面挂载后自动播放动画&…

前端网站动态主题色解决方案

动态主题色替换分两种:UI 组件库主题色替换和系统主题色替换。 组件库 UI 动态主题替换现阶段只在 Element-UI 和 Vant-UI 测试过,根据排查这种方案应该适用于所有类似的动态主题色替换场景。 1. UI 组件库主题色替换 在进入到这一部分之前,…

力扣232 - 用栈实现队列【C语言实现】

用栈实现队列~一、题目描述二、思路分析三、代码详解1、结构声明与展开剖析2、入队【入栈思想】3、获取队头【出栈思想】4、出队【复用思想】5、逐步算法图解四、整体代码展示💻C语言代码实现五、总结与提炼一、题目描述 示例 1: 输入: [“My…

Java基础知识+必考面试题(分享收藏版)

在学习Java语言之前,我们要了解相关知识体系,才能更好的掌握学习。那么下面我们就一起来学习JAVA语言吧~ Java语言概述 Java语言是Sun公司在1995年推出的高级编程语言,编程语言就是计算机语言,人们可以通过使用编程语言让计算机完…

Webfunny 创始人:Skywalking × Zabbix 与观纵探索可观测性

作为 Webfunny 的 PMC,应伟长期致力于前端监控、埋点探针的产品研发,伴随着全链路监控的探索,在整合 Skywalking 与 Zabbix 打造一体化监控平台的实践中,是怎样的心路历程? “ 从前端监控到全链路监控的挑战 Webfun…