【GEE】遥感数据趋势分析Sen+mk

在这里插入图片描述


Map.centerObject(table);// 定义时间范围
var stary = 2001, endy = 2023;
//NDVI图像集合
var NDVICL = ee.ImageCollection(ee.List.sequence(stary, endy).map(function(year) {// 定义每年的开始和结束日期var startd = ee.Date.fromYMD(year, 1, 1);var endd = ee.Date.fromYMD(year, 12, 31);// 加载NDVI数据集,按日期过滤,并计算最大值return ee.ImageCollection('MODIS/006/MOD13A1').filterDate(startd, endd).select('NDVI').max().addBands(ee.Image.constant(year).toFloat().rename('year'));
}));
print(NDVICL)
// 计算Sen斜率并剪裁
var senSlope = NDVICL.select(['NDVI', 'year']).reduce(ee.Reducer.sensSlope()).clip(table);
// 可视化Sen斜率
var vis = {bands: ['slope'], min: -0.5, max: 0.5, palette: ['red', 'white', 'green']};
Map.addLayer(senSlope.select('slope'), vis, "Sen斜率 ");// MK检验 
// create ones image
var ones = ee.Image(1);
// create zeros image
var zeros = ee.Image(0);
var eps = 0.01; // Set a precision value
// 创建一个列表,包含年度NDVI图像的list
var listofimg = NDVICL.toList(NDVICL.size());
// 计算MK检验趋势期望均值
var mkm = ee.ImageCollection(ee.List.sequence(0, listofimg.size().subtract(2)).map(function (xi) {return ee.ImageCollection.fromImages(ee.List.sequence(ee.Number(xi).add(1), listofimg.size().subtract(1)).map(function (xj) {var diff_ij = ee.Image(listofimg.get(xj)).select('NDVI').subtract(ee.Image(listofimg.get(xi)).select('NDVI'));var diff = diff_ij.where(diff_ij.abs().lt(eps), zeros);return diff.where(diff.gt(0), ones).where(diff.lt(0), ones.multiply(-1)).rename('ES');})).sum();})).sum();
// 时序长度 
var n = ee.ImageCollection(NDVICL).reduce('count').select('NDVI_count').rename('count');
// 计算方差 var(S) = (n * (n - 1) * (2 * n + 5)) / 18
var varS = n.multiply(n.subtract(1).multiply(n.multiply(2).add(5))).divide(18).rename('varS');// 估计z统计量
var mkz = mkm.where(mkm.abs().lt(eps), 0);
var zcore = mkz.where(mkz.gt(eps), mkz.subtract(1).divide(varS.sqrt())).where(mkz.lt(-eps), mkz.add(1).divide(varS.sqrt())).rename('zcore').clip(table);// 100(1 - alpha)% 双边置信区间的Sen's Slope
//alpha = 0.05,则Z[1 - alpha / 2] = Z[0.975] = 1.960
// 计算Sen斜率的显著性
var signif = senSlope.select(0).lt(0).and(zcore.abs().gte(1.960)).rename('signif');
var siginc = senSlope.select(0).gt(0).and(zcore.abs().gte(1.960)).rename('increase');signif.updateMask(signif);
siginc.updateMask(siginc);signif = signif.multiply(-1).add(siginc).clip(table);// 可视化MK Z统计量
Map.addLayer(zcore, {min: -3, max: 3, palette: ['blue', 'white', 'red']}, 'Z值 ');// 可视化显著的趋势变化
Map.addLayer(signif, {min: -1, max: 1, palette: ['#FFA07A', 'white', '#3CB371']}, '显著趋势 ');

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

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

相关文章

基于单片机的激光测距系统设计

摘要: 为了减小测距误差,提出一种基于单片机的激光测距系统设计方法,首先基于三角测量原理构成测距传感器,以进行实时测量与检测,并对目标激光信号进行小波变换和二进小波变换; 然后利用Lipschitz 指数检测出激光信号的奇异点位置,并采用正交调制技术对激光光强的幅度进行…

精益管理培训在哪些行业比较适用?

在当今瞬息万变的市场环境中,企业竞争日趋激烈,如何提升内部管理水平、降低成本、提高效率,成为企业持续发展的关键。精益管理作为一种先进的管理理念和方法,正逐渐被越来越多的行业所采纳和应用。本文(深圳天行健精益…

Python基础语法入门:构建坚实的编程基础

欢迎来到Python编程的第一课!Python是一种优雅而强大的编程语言,因其简洁的语法和强大的功能而广受欢迎。虽然说说Python是简单的,但是想在仅仅一篇博客中,讲解清除Python的基础语法,也仍然是个挑战,在本篇…

【Vue】响应式原理与ref

首先讲讲JS中的Proxy JavaScript 运行环境包含了一些不可枚举、不可写入的对象属性,然而在 ES5 之前开发者无法定义他们自己的不可枚举属性或不可写入属性。ES5 引入 Object.defineProperty() 方法以便开发者在这方面能够像 JS 引擎那样做。 ES6 为了让开发者能进…

闭包用运。

闭包在JavaScript编程中有多种实用场景,以下列举几个常见的闭包使用场景并附上相应的代码示例: 不使用 new 关键字调用构造函数时,构造函数内部的 this 关键字会指向全局对象(在浏览器中通常是 window 对象)。此时&am…

【C语言】:字符函数和字符串函数

这里写目录标题 1、strlen的使用和模拟实现2、strcpy的使用和模拟3、strcat 的使用和模拟实现4、strcmp 的使用和模拟实现5、strncpy 函数的使用6、strncat 函数的使用7、strncmp函数的使用8、strstr 的使用和模拟实现9、strtok 函数的使用10、strerror 函数的使用11、字符分类…

C语言——关于指针运算的例题分析

1.指针运算中关于 sizeof 和 strlen 的例题分析 1. sizeof(数组名),这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩。 2. &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址。 3. 除此之外所有的数组名都表⽰…

汇编入门--基础知识(1)

1.汇编语言的概念 汇编语言是一种低级编程语言,它与计算机的机器语言非常接近,但比机器语言更易于人类阅读和理解。汇编语言是用一系列的助记符来表示机器语言的操作码和操作数。每种计算机体系结构(如x86、ARM等)都有自己的汇编语…

linux系统上做性能压力测试 —— 筑梦之路

这里主要使用stress 和 stress-ng。 简介 stress: stress 是一款简单但功能强大的工具,可对 Linux 系统施加可配置的 CPU、内存、I/O 或磁盘压力。通过模拟繁重的工作负载,系统管理员可以观察系统在压力下的表现反应。 这一工具的价值在于找出系统潜在的…

12.java openCV4.x 入门-HighGui之图像窗口显示

专栏简介 💒个人主页 📰专栏目录 点击上方查看更多内容 📖心灵鸡汤📖我们唯一拥有的就是今天,唯一能把握的也是今天建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫 🧭文…

Qt-线程2-moveToThread

0. 写在前面 Qt-线程1-Run-CSDN博客 上一篇介绍了为何要使用线程,这篇介绍第二种线程编写方式;这种方式代码写起来复杂一些,硬币总是有两个面,虽然写起来复杂,但是逻辑是很清晰的。 (1)新…

算法刷题Day29 |491.递增子序列、46.全排列、47.全排列 II

目录 0 引言1 递增子序列1.1 我的解题 2 全排列2.1 我的解题 3 全排列 II3.1 我的解题 🙋‍♂️ 作者:海码007📜 专栏:算法专栏💥 标题:算法刷题Day29 |491.递增子序列、46.全排列、47.全排列 II❣️ 寄语&…

linux安装dubboAdmin

1.环境准备: jdk-8u391-linux-x64apache-maven-3.9.6apache-tomcat-8.5.100 2.安装注册中心zookeeper zookeeper的安装看我的另一篇文章,安装完成后保持启动状态 linux安装Zookeeper的详细步骤-CSDN博客 3.安装dubboadmin 源码下载地址:R…

vue快速入门(十四)reduce求和

注释很详细&#xff0c;直接上代码 新增内容 非嵌套情况求和嵌套情况求和 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale…

C++第十五弹---string基本介绍(一)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、什么是STL 2、STL的版本 3、STL的六大组件 4、STL的重要性 5、如何学习STL 6、STL的缺陷 7、为什么学习string类 7.1、C语言中的字符串…

[C++][特殊类设计][单例模式]详细讲解

目录 1.[不能被拷贝]2.[只能在堆上创建对象]3.[只能在栈上创建对象]4.[请设计一个类&#xff0c;不能被继承]5.[只能创建一个对象(单例模式)]0. 设计模式1.单例模式2.饿汉模式3.懒汉模式4.单例对象释放问题 1.[不能被拷贝] 拷贝只会发生在两个场景中&#xff1a; 拷贝构造函数…

Google play开发者新手必看:2024最新最全的谷歌上架避坑指南

Google Play作为一个全球性的Android应用分发平台&#xff0c;吸引了无数开发者的目光。据统计&#xff0c;该平台的月活跃用户数已超过20亿&#xff0c;这无疑是一个巨大的市场。 但随着行业的发展&#xff0c;谷歌风控和审核机制不断升级&#xff0c;即便是经验丰富的开发者也…

Nginx配置文件修改结合内网穿透实现公网访问多个本地web站点

文章目录 1. 下载windows版Nginx2. 配置Nginx3. 测试局域网访问4. cpolar内网穿透5. 测试公网访问6. 配置固定二级子域名7. 测试访问公网固定二级子域名 1. 下载windows版Nginx 进入官方网站(http://nginx.org/en/download.html)下载windows版的nginx 下载好后解压进入nginx目…

抖音评论ID提取工具|视频关键词评论批量采集软件

抖音评论ID提取工具&#xff1a;批量抓取抖音评论 抖音评论ID提取工具是一款功能强大的软件&#xff0c;可以帮助您批量抓取抖音视频下的评论信息。通过输入关键词和评论监控词&#xff0c;即可进行评论的抓取&#xff0c;并提供评论昵称、评论日期、评论内容、命中关键词以及所…

C++更改文件名称,在文件名增加字符

void ChangeName(string filename) {char flagcharacter a; // 要在文件名前添加的标志字符int filelocation 0 ; // 暂存文件名起始下标int directoryend 0 ; // 暂存文件夹名结束下标for(int i (filename.length() - 1); i>0; i--)if(filenam…