本文主要是介绍基于GEE的年最大合成、sen+mk检验算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
基于GEE的年最大合成、sen+mk检验算法
1、实验平台与数据
实验平台为google earth engine、python3.6,数据为gee中自带的NDVI数据。
2、思路
将 Theil- Sen Median 趋势分析和Mann-Kendall 检验方法结合,是判断长时间序列数据趋势的重要方法。该方法的优点是不需要数据服从一定的分布,对数据误差具有较强的抵抗能力,对于显著性水平的检验具有较为坚实的统计学理论基础,使得结果较为科学可信。其中,Theil-Sen Median 趋势分析是一种稳健的非参数统计的趋势计算方法,可以减少数据异常值的影响。对长序列NDVI数据(8天合成数据)进行NDVI年最大合成, 然后进行sen+mk检验,检测NDVI的变化趋势及显著情况。
3、代码
年/月最大合成:python版本
import datetime
from dateutil.relativedelta import relativedelta
def img_max_year_and_month(start_year,end_year,data_path,data_name,setp):'''获取年或月的最大合成数据data_path:str,the path of data,ep:'MODIS/006/MYD13A1'data_name:str,the name of data ,ep:'EVI'start_year,start_year:str,ep:2011setp:str,month/yearreturn:max_,ee.ImageCollage,年或月最大合成序列'''time_list = list(range(start_year,end_year+1))max_data = []for year in time_list:print(year)if setp == "month":for month in range(1,13):print(month)start_data = str(year)+'-'+ str(month) +'-01'end_data = (datetime.datetime.strptime(start_data, '%Y-%m-%d')+ relativedelta(months=1)).strftime('%Y-%m-%d')print(start_data,end_data)collection = ee.ImageCollection(data_path).select(data_name)series = collection.filterDate(str(start_data),str(end_data))\.map(lambda img:img.set('system:index', img.get('system:index')))
# print(series.first().get('system:index').getInfo())# 这个ndvi数据需要缩小10000倍,如果不需要,可以注释max_result = series.max()\.divide(10000)\.set('system:index', series.first().get('system:index'))max_data.append(max_result) elif setp == "year":collection = ee.ImageCollection(data_path).select(data_name)# 筛选对应年份,设置时间属性series = collection.filterDate(str(year)+'-01-01',str(year+1)+'-01-01')\.map(lambda img:img.set('system:index', img.get('system:index')))# 这个ndvi数据需要缩小10000倍,如果不需要,可以注释max_result = series.max()\.divide(10000)\.set('system:index', series.first().get('system:index'))max_data.append(max_result) max_ = ee.ImageCollection(max_data)return max_
2021.12.22更新,添加了旬数据的最大合成
import datetime
from dateutil.relativedelta import relativedelta
def img_max_year_and_month(start_year,end_year,data_path,data_name,setp):'''获取年或月的最大合成数据data_path:str,the path of data,ep:'MODIS/006/MYD13A1'data_name:str,the name of data ,ep:'EVI'start_year,start_year:str,ep:2011setp:str,month/yearreturn:max_,ee.ImageCollage,年或月最大合成序列'''time_list = list(range(start_year,end_year+1))max_data = []for year in time_list:print
这篇关于基于GEE的年最大合成、sen+mk检验算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!