前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python GDAL依据栅格图像提取另一影像的像素

Python GDAL依据栅格图像提取另一影像的像素

作者头像
疯狂学习GIS
发布于 2023-06-26 06:38:49
发布于 2023-06-26 06:38:49
20300
代码可运行
举报
文章被收录于专栏:疯狂学习GIS疯狂学习GIS
运行总次数:0
代码可运行

  本文介绍基于PythonGDAL模块,实现基于一景栅格影像,对另一景栅格影像的像元数值加以叠加提取的方法。

  本文期望实现的需求为:现有一景表示6种不同植被类型.tif格式栅格数据,以及另一景与前述栅格数据同区域的、表示植被参数.tif格式栅格数据;我们希望基于前者中的植被类型数据,分别提取6种不同植被类型的植被参数数值。这里需要注意,两景栅格影像的行数、列数也都是一致的。

  了解了具体需求后,我们即可开始代码的实践;本文用到的具体代码如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
"""
Created on Thu Dec  1 16:56:26 2022

@author: fkxxgis
"""

from osgeo import gdal

vt_file_path = "E:/LC_M/data/LC.tif"
lcc_file_path = "E:/LC_M/data/LC_Clip.tif"

vt_raster = gdal.Open(vt_file_path)
vt_array = vt_raster.ReadAsArray()
lcc_raster = gdal.Open(lcc_file_path)
lcc_array = lcc_raster.ReadAsArray()

raster_row, raster_col = vt_array.shape
li_1, li_2, li_3, li_4, li_5, li_6 = [ [] for i in range(6)]

for i in range(raster_row):
    for j in range(raster_col):
        if vt_array[i][j] == 1 and lcc_array[i][j] != 0:
            li_1.append(lcc_array[i][j])
        elif vt_array[i][j] == 2 and lcc_array[i][j] != 0:
            li_2.append(lcc_array[i][j])
        elif vt_array[i][j] == 3 and lcc_array[i][j] != 0:
            li_3.append(lcc_array[i][j])
        elif vt_array[i][j] == 4 and lcc_array[i][j] != 0:
            li_4.append(lcc_array[i][j])
        elif vt_array[i][j] == 5 and lcc_array[i][j] != 0:
            li_5.append(lcc_array[i][j])
        elif vt_array[i][j] == 6 and lcc_array[i][j] != 0:
            li_6.append(lcc_array[i][j])

  其中,vt_file_path为表示植被类型的栅格数据,lcc_file_path为表示植被参数的栅格数据。

  代码的整体思路其实也非常简单,首先通过gdal.Open()函数与.ReadAsArray()函数,分别读取两个栅格数据,并将两个栅格数据中的像元数值信息转换为数组格式;随后,因为表示不同植被类型.tif格式栅格数据共有6种不同的像元数值,因此我们通过[] for i in range(6)这句代码,批量创建6个空的列表,用于存放6种不同植被类型分别对应的植被参数数值;接下来,同时遍历两个栅格数据,并基于表示不同植被类型.tif格式栅格数据的像元数值,将表示植被参数.tif格式栅格数据的像元数值依次提取、放入不同的列表中。

  这里有一点需要注意,因为在表示植被参数.tif格式栅格数据中0为无效值,因此在提取时,加了一个是否为0的判断;这一点大家在实际应用时结合自己的需求加以修改即可。

  通过上述代码,我们即可将6种不同植被类型分别对应的植被参数数值提取出来,并存放于不同的列表中;随后即可基于不同列表中的数据加以各项空间分析。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-04-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 疯狂学习GIS 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring-使用加密的属性文件02
对于不敏感的属性信息,以明文形式出现在属性文件中是合适的,但是如果属性信息是数据库用户名和密码等敏感信息,一般希望以密文的方式保存。
小小工匠
2021/08/16
4260
Spring-使用外部属性文件01
在进行数据源或者邮件服务器等资源配置时,用户可以直接在Spring配置文件中配置用户名、密码、连接信息等,但是有一种更好的方法是将这些配置信息独立到一个外部属性文件中,并在Spring配置文件中通过形如{user}、{password}的占位符引用属性文件中的属性项。
小小工匠
2021/08/16
7630
Spring JDBC-使用Spring JDBC访问数据库
Spring JDBC是Spring所提供的持久层技术,它的主要目的降低JDBC API的使用难度,以一种更直接、更简洁的方式使用JDBC API。
小小工匠
2021/08/17
1.3K0
Spring-基于注解的配置[01定义Bean+扫描Bean]
不管是XML还是注解,他们都是在表达Bean定义的载体,其实质都是为Spring容器提供Bean定义的信息,在表现形式上都是将XML定义的内容通过类注解进行描述。
小小工匠
2021/08/16
6600
Spring-注入参数详解-[字面值及引用其他Bean]
在Spring配置文件中,不但可以将String、int等字面值注入bean中,还可以将集合、map等类型的数据注入Bean中, 此外还可以注入配置文件中其他定义的Bean.
小小工匠
2021/08/16
5260
Spring Cache抽象-基于XML的配置声明(基于ConcurrentMap的配置)
如果不想使用注解或者由于其他原因无法获得项目的源码等,Spring也支持使用XML的方式配置Spring Cache,主要是通过类似于aop:advice的cache:advice来进行的。
小小工匠
2021/08/17
3270
Spring-基于注解的配置[02自动装载bean]
@Autowired默认按照类型(byType)匹配的方式在容器中查找匹配的Bean,当且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中。
小小工匠
2021/08/16
4610
Spring Cache抽象-基于XML的配置声明(基于EhCache的配置)
首先请阅读Spring Cache抽象-基于XML的配置声明(基于ConcurrentMap的配置),本篇博文基于XML的配置,使用了Ehcache缓存管理器。
小小工匠
2021/08/17
3810
Spring Cache-缓存概述及使用
伴随信息量的爆炸式增长以及构建的应用系统越来越多样化、复杂化,特别是企业级应用互联网化的趋势,缓存(Cache)对应用程序性能的优化变的越来越重要。 将所需服务请求的数据放在缓存中,既可以提高应用程序的访问效率,又可以减少数据库服务器的压力,从而让用户获得更好的用户体验。
小小工匠
2021/08/17
6.1K0
Spring-Spring MVC + Spring JDBC + Spring Transaction + Maven 构建web登录模块
请参考上篇博文 Maven-EclipseEE使用Maven构建Java web项目从0到1
小小工匠
2021/08/16
8140
Spring-注入参数详解-[集合类型属性]
java.util包中的集合类型是最常用的结构数据类型,主要包括List、Set、Map、Properties。
小小工匠
2021/08/16
4150
Spring-依赖注入
此外Spring还支持工厂方法注入。 这篇博文我们将了解到不同注入方式的具体配置方法。
小小工匠
2021/08/16
5400
Spring-bean之间的关系
不但可以通过引用另外一个bean,建立起Bean和Bean之间的依赖关系, bean元素标签之间也可以建立类似的关系,完成一些特殊的功能。
小小工匠
2021/08/16
3940
Spring JDBC-使用注解配置声明式事务
除了基于XML的事务配置,Spring还提供了基于注解的事务配置,即通过@Transactional对需要事务增强的Bean接口、实现类或者方法进行标注:在容器中配置基于注解的事务增强驱动,即可以启用基于注解的声明式事务。
小小工匠
2021/08/17
3950
Spring-基于注解的配置[03Bean作用范围和生命周期方法]
通过注解配置的Bean和通过配置的Bean一样,默认的作用范围都是singleton。
小小工匠
2021/08/16
3360
Spring-基于Spring使用自定义注解及Aspect实现数据库切换
重写Spring的AbstractRoutingDataSource抽象类的determineCurrentLookupKey方法。
小小工匠
2021/08/16
5060
Spring-基于Java类的配置
JavaConfig是Spring的一个子项目,它旨在通过Java类的方式提供Bean的定义信息,在Spring4.0的版本,JavaConfig正式成为Spring4.0的核心功能。
小小工匠
2021/08/16
6120
Spring-事务
今天开始学习我自己总结的 Java-学习路线 中的《Spring-事务》,小简从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!
小简
2023/01/04
3560
Spring-事务
Spring JDBC-使用Spring JDBC获取本地连接对象以及操作BLOB/CLOB类型数据
我们在Spring-使用Spring JDBC访问数据库使用JDBC进行了CRUD(Create Retrieve Update Delete增删改查)以及调用存过的操作,这里我们将进一步了解一些高级的数据库操作知识,包括获取本地数据连接进行数据库相关的操作和如何操作BLOB、CLBO这些LOB数据。
小小工匠
2021/08/17
1.7K0
Spring-方法注入lookup、方法替换MethodReplacer接口
无状态Bean的作用域一般可以配置为singleton(单例模式),如果我们往singleton的Pilot类中注入prototype的Plane类,并希望每次调用Pilot的getPlane()方法都能返回一个新的plane Bean ,该怎么办呢?
小小工匠
2021/08/16
4660
相关推荐
Spring-使用加密的属性文件02
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验