geemap学习笔记028:Landsat8计算时间序列NDVI并导出

前言

本节则是以Landsat8影像数据为例,进行NDVI时间序列计算,并将得到的时间序列NDVI进行展示并导出。

1 导入库并显示地图

import ee
import geemap
import datetime
import pandas as pd
import os
ee.Initialize()

2 定义时间范围

# 定义日期范围
start_date = '2018-01-01'
end_date = '2019-01-01'
date_range = pd.date_range(start_date, end_date, freq='MS')  #按月生成的时间范围
date_range  #查看日期

3 定义NDVI函数

def NDVI(image): #定义NDVI函数nir = image.select("SR_B5")red = image.select("SR_B4")ndvi = image.expression("float(SR_B5 - SR_B4)/(SR_B5 + SR_B4)",{"SR_B5": nir,"SR_B4": red}).rename('NDVI_V2')return ndvi

4 加载数据并循环计算NDVI

# 创建一个空列表,用于存储结果图像
result_images = []
# 定义区域
roi = ee.FeatureCollection("projects/xiaoliuk/assets/shape/yantai_qu") #获取assets研究区FeatureCollection
# 循环处理每月数据
for i in range(len(date_range)-1):#获取开始日期和结束日期start_month = date_range[i].strftime('%Y-%m-%d')end_month = date_range[i+1].strftime('%Y-%m-%d')# 获取影像集合dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') \.filterDate(start_month, end_month) \.filter(ee.Filter.lt('CLOUD_COVER', 80)) \.filterBounds(roi)  #筛选LC08数据时间和经过roi的影像,云量可以自己设定# 获取中位数影像median_image = dataset.median()# 计算 NDVI# ndvi = median_image.normalizedDifference(['SR_B5', 'SR_B4']) #也可以直接计算NDVIndvi = NDVI(median_image)# 将结果图像添加到列表中result_images.append(ndvi)

5

visParam = {'min': -0.2,'max': 0.8,'palette' : ['#d73027','#f46d43','#fdae61','#fee08b','#d9ef8b','#a6d96a','#66bd63','#1a9850',
]}  #可视化参数# 在地图上显示结果
Map = geemap.Map()
Map.centerObject(roi, zoom=10)
Map.addLayer(result_images[0].clip(roi), visParam, 'NDVI') #选择第一个月份的结果并裁剪roi展示
Map

计算结果
image.png

6 与GEE计算的32天的NDVI值进行比较

NDVI_32days = ee.ImageCollection("LANDSAT/LC08/C01/T1_32DAY_NDVI")\.filterDate('2020-01-01', '2020-02-01')\.select('NDVI')   #这是GEE计算的32天的NDVI值,可以进行比较
NDVI_32daysMap.addLayer(NDVI_32days.map(lambda image: image.clip(roi)), visParam, 'NDVI_32')
Map

可以看出两种结果差别并不是很大
image.png

7 循环加载单景影像

for i in range(len(result_images)):  #循环加载单景影像image_roi = result_images[i].clip(roi) #每月的裁剪影像file_name = date_range[i].strftime('%Y-%m')  #没每景影像的名字Map.addLayer(image_roi, visParam, file_name) #将其添加到地图中
Map

8 导出影像

out_tif = os.path.join(r"../03_result/") #结果保存路径for i in range(len(result_images)-2):  #循环加载单景影像image_roi = result_images[i].clip(roi)  #每月裁剪的ndvi影像file_name = date_range[i].strftime('%Y-%m') file_path = os.path.join(out_tif, file_name + '.tif')geemap.download_ee_image(image=image_roi,filename=file_path,region=roi.geometry(),crs="EPSG:4326",scale=30,) #导出影像

后记

大家如果有问题需要交流或者有项目需要合作,可以加Q Q :504156006详聊,加好友请留言“CSDN”,谢谢。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言:判断是否为整数|练习题

一、题目 输入一个数字,判断该数字是否为整数 如图: 二、思路分析 1、没有小数部分的数字,即为整数。所以,只要知道该数字是否有小数部分,即可。 2、例子:1.5减去10.5,由于有小数部分&#xff0…

GEE(ccdc-1)——利用Landsat系列影像获取研究区范围的多波段影像(包含ccdc中已经定义的多波段)

简介 在进行CCDC监测时,我们首先要做的就是获取研究区的长时间序列影像,让其保存在你的资产中,方便后面调用,这里我们要做的额就是根据代码,将我们时间范围进行选取和指定的研究区边界,剩下的采用默认参数即可。最后出现的结果是将ccdc代码中所需要的波段和影像中一些光…

mysql innodb知识记录

官方文档 官网架构图 innodb 特性 内存 buffer pool 采用优化后的LRU算法, 3/8 of the buffer pool is devoted to the old sublist.The midpoint of the list is the boundary where the tail of the new sublist meets the head of the old sublist.When In…

ensp创建配置环境,实现全网互访

文章目录 创建配置环境,实现全网互访配置步骤接入层交换机(sw4、sw5)划分vlan汇聚层交换机(sw2、sw3)配置ip地址作为vlan网关、与sw1 ip地址直连核心层交换机(sw1)配置ip地址与汇聚层交换机&…

容器技术:从虚拟机到轻量级容器的革命

一、引言 首先,什么是容器? 容器是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离;及方便这个沙盒可以被转移到其它宿主机器。本质上,它是一个特殊的进程。通过名称空间(Namespace&a…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《计及调频能力和经济效益的储能集群多状态区间优化策略》

这个标题提到了三个关键概念:储能集群、调频能力和经济效益,以及多状态区间优化策略。下面我将为你解释每个概念的含义,并对整个标题进行解读。 首先,"储能集群"是指将多个储能系统连接在一起形成一个集群,…

【算法】bfs与dfs算法解决FloodFill(洪流)问题(C++)

文章目录 1. 什么是FloodFill问题2. 用什么方法解决FloodFill问题3. 具体例题773.图像渲染200.岛屿数量695.岛屿的最大面积130.被围绕的区域 1. 什么是FloodFill问题 一般floodfill问题可以描述为:给定一个二维矩阵,其中每个元素代表一个像素点&#xf…

HarmonyOS4.0从零开始的开发教程18HarmonyOS应用/元服务上架

HarmonyOS(十六)HarmonyOS应用/元服务上架 简介 随着生活节奏的加快,我们有时会忘记一些重要的事情或日子,所以提醒功能必不可少。应用可能需要在指定的时刻,向用户发送一些业务提醒通知。例如购物类应用&#xff0c…

1264. 动态求连续区间和(树状数组---某个位置加上一个数/求在线(动态)前缀和/蓝桥杯)

题目&#xff1a; 输入样例&#xff1a; 10 5 1 2 3 4 5 6 7 8 9 10 1 1 5 0 1 3 0 4 8 1 7 5 0 4 8输出样例&#xff1a; 11 30 35 树状数组&#xff1a; 代码&#xff1a; #include<cstdio> #include<iostream> using namespace std;const int N100010; int n,…

Lazy_Linkage详解

对 动态链接中 Lazy_Linkage 进行调式 —— 以 func.ELF2 调用 func 函数为例 首先是用 gdb 打开 func.ELF2 中间文件&#xff0c;并在 main 函数处打上断点 run 起来&#xff0c;可以看到 <main 0> 到 <main 7> 是程序运行的准备工作&#xff0c;下一条指令是…

OpenCV 1.1:读取本地图片显示灰度图及CV版本

imread方法加载图像 imread 功能是加载图像文件成为一个 Mat 对象&#xff0c;其中第一个参数表示图像文件名称&#xff0c;第二个参数表示加载的图像是什么类型&#xff0c;支持常见的三个参数值IMREAD_UNCHANDED(<0) 表示加载原图&#xff0c;不做任何改变IMREAD_GRAYSCA…

PyTorch自动梯度计算(注意点)

if params.grad is not None: params.grad.zero_() 我们实际的运算往往会涉及到若干个requires-grad为true的张量进行运算&#xff0c;在这种情况下&#xff0c;Pytorch会计算整个计算图上的损失的导数&#xff0c;并把这些结果累加到grad属性中。多次调用backward()会导致梯度…