GEE代码实例教程详解:年度和月度土地覆盖变化分析

简介

在本篇博客中,我们将使用Google Earth Engine (GEE) 对土地覆盖变化进行年度和月度的分析。通过Google的Dynamic World数据集,我们可以识别2023年至2024年间土地覆盖的类型和变化。

背景知识

Google Dynamic World数据集

Google/DYNAMICWORLD/V1数据集提供了高分辨率的土地覆盖数据,这些数据可以用来分析土地覆盖类型和变化。

土地覆盖变化分析

土地覆盖变化分析是环境监测和土地管理的重要组成部分,有助于了解地表覆盖和利用模式的转变。

完整代码

// 定义研究点坐标
var cor = [49.349581955929196, 37.390543498162955];
var loc = ee.Geometry.Point(cor);// 加载FAO GAUL数据集并筛选研究区域
var roi = ee.FeatureCollection("FAO/GAUL/2015/level1").filterBounds(loc);
Map.centerObject(roi);
Map.addLayer(roi);// 加载Google Dynamic World土地覆盖数据集
var map = ee.ImageCollection("GOOGLE/DYNAMICWORLD/V1").filterDate('2023', '2024').filter(ee.Filter.calendarRange(1, 12, 'month')).filterBounds(roi);// 计算年度土地覆盖
var annual_map = map.select('label').mode();
var VIS_PALETTE = ['419bdf', '397d49', '88b053', '7a87c6', 'e49635', 'dfc35a', 'c4281b','a59b8f', 'b39fe1'
];Map.addLayer(annual_map.clip(roi), {min: 0, max: 8, palette: VIS_PALETTE}, 'map2013', false);// 导出年度土地覆盖图像
Export.image.toDrive({image: annual_map.clip(roi),description: 'annual_map',scale: 30,maxPixels: 1e13,region: roi,crs: annual_map.getInfo().crs
});// 定义时间序列集合函数
function temporal_collection(collection, start, count, interval, unit) {var seq = ee.List.sequence(0, ee.Number(count).subtract(1));var origin_date = ee.Date(start);return ee.ImageCollection(seq.map(function (i) {var start_date = origin_date.advance(ee.Number(interval).multiply(i), unit);var end_date = origin_date.advance(ee.Number(interval).multiply(ee.Number(i).add(1)), unit);return collection.filterDate(start_date, end_date).mode().set('system:time_start', start_date.millis()).set('system:time_end', end_date.millis());}));
}// 创建月度土地覆盖集合
var monthly = temporal_collection(map.select('label'), '2023', 12, 1, 'month');Map.addLayer(monthly.toBands().clip(roi), [], 'monthly_map', false);// 更新月度土地覆盖图像的波段名称
var monthly_updated = monthly.map(function (img) {var date = img.date().format('YYYY-MM-dd');return img.rename(date);
});print(monthly_updated.toBands());// 导出月度土地覆盖图像
Export.image.toDrive({image: monthly_updated.toBands().clip(roi),description: 'monthly_lc',scale: 30,maxPixels: 1e13,region: roi,crs: monthly_updated.toBands().getInfo().crs
});

代码详解

1. 定义研究点

创建一个点对象loc,用于确定研究区域。

2. 加载FAO GAUL数据集

加载并筛选与研究点相交的区域roi

3. 加载Google Dynamic World土地覆盖数据集

加载指定时间范围内的Google Dynamic World土地覆盖数据。

4. 计算年度土地覆盖

使用mode方法计算2023年的土地覆盖类型。

5. 导出年度土地覆盖图像

将年度土地覆盖图像导出到Google Drive。

6. 定义时间序列集合函数

定义temporal_collection函数,用于生成时间序列的土地覆盖图像集合。

7. 创建月度土地覆盖集合

使用temporal_collection函数创建2023年的月度土地覆盖集合。

8. 更新月度土地覆盖图像的波段名称

将每个月份的图像波段重命名,以反映对应的日期。

9. 导出月度土地覆盖图像

将月度土地覆盖图像导出到Google Drive。

结论

本教程展示了如何使用GEE对Google Dynamic World数据集进行年度和月度土地覆盖变化分析。通过这些分析,我们可以了解土地覆盖类型的分布和随时间的变化。

进一步探索

GEE提供了多种工具和方法来进行土地覆盖变化分析。在后续的教程中,我们将继续探索GEE在不同领域的应用。

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

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

相关文章

百川工作手机实现销售管理微信监控系统

在瞬息万变的商业战场中,每一分效率的提升都是企业制胜的关键。传统销售管理模式已难以满足现代企业对精准、高效、合规的迫切需求。今天,让我们一同探索如何利用工作手机这一创新工具,为您的销售团队装上智能翅膀,开启销售管理的…

基于springboot+vue实现的厨艺交流平台(文末源码+Lw)093

93基于SpringBootVue的实现的厨艺交流平台(源码数据库万字Lun文流程图ER图结构图演示视频软件包) 系统功能: 这次开发的厨艺交流平台功能有个人中心,食材分类管理,用户管理,菜品分类管理,菜谱信…

解锁敦煌网成功秘籍:批量注册买家号测评的高效策略

敦煌网(DHgate)作为一个跨境电商平台,搭建境外本土网络环境并实现批量注册买家号下单,需要遵循一系列严谨的步骤和考虑多个关键因素。以下是一个概括性的指南: 一、环境要求 国外服务器:首先,…

HumbleBundle7月虚幻捆绑包30件军事题材美术模型沙漠自然环境大逃杀模块化建筑可定制武器包二战现代坦克飞机道具丧尸士兵角色模型20240705

HumbleBundle7月虚幻捆绑包30件军事题材美术模型沙漠自然环境大逃杀模块化建筑可定制武器包二战现代坦克飞机道具丧尸士兵角色模型202407051607 这次HumbleBundle捆绑包是UE虚幻军事题材的,内容非常多。 有军事基地、赛博朋克街区、灌木丛景观环境等 HB捆绑包虚幻…

7-打包安装程序

接下来假设我们想要将我们的项目分发给其他人,以便他们可以使用它。我们希望在各种平台上提供二进制和源代码发行版。这与我们之前在安装和测试中所做的安装略有不同,在安装中我们安装了从源代码构建的二进制文件。在本例中,我们将构建支持二…

C# 构造函数依赖注入 使用out向外传递参数

天真目前解决方法 天真 using System;namespace forCode20191 {class Program {static void Main(string[] args) {bool flag false;Tmp tt new Tmp(out flag);Console.WriteLine(flag); // 将输出 falsett.Doit();Console.WriteLine(flag); // 将输出 trueConsole.ReadKey(…

“DDoS攻击的最新防御策略:从检测到缓解的全方位方案“

DDoS攻击的最新防御策略 DDoS攻击(分布式拒绝服务攻击)是网络安全领域的重大威胁,它通过大量的恶意流量淹没目标服务器或网络,导致服务不可用。为了有效防御DDoS攻击,最新的策略强调从检测到缓解的全方位方案。 多层防…

深度学习的数学PDF

链接: https://pan.baidu.com/s/1_jScZ7dcyAWGqbrad6bbCQ?pwd9gj9 提取码: 9gj9 复制这段内容后打开百度网盘手机App,操作更方便哦

【苍穹外卖】Day2 手把手敲完细节

目录 1. 新增员工 1.1 需求分析和设计 1.2 代码开发 ①定义DTO类:(在sky-pojo里) ②EmployeeController中创建新增员工方法save() ③EmployeeService里声明save方法(altenter) ④EmployeeServiceImpl中实现save方法 ⑤在E…

顶刊文献阅读及代码复现

前提:每个无人机都有 (i)自己的机载计算机,用于执行控制其自身动作所需的计算 (ii)自己的传感器系统,用于测量相对位置和速度, (iii)自己的通信设备,用于与相邻代理进行数据交换。 模型:短期的排斥力、中间范围的速度一致性和长距离的吸引力

通过PLC地址来切换威纶通触摸屏界面

Step 1 元件-PLC控制 Step 2 新增 选择设备 选择切换基本窗口功能 选择触发地址 Step 3 离线仿真测试 在数值框中输入对应的页面号 可以看到页面可以正常切换 分享创作不易,请多多支持,点赞、收藏、关注! Ending~

昇思Mindspore25天学习打卡Day20:DCGAN生成漫画头像

昇思Mindspore25天学习打卡Day20:DCGAN生成漫画头像 1 GAN基础原理2 DCGAN原理3 数据准备与处理数据处理 4 构造网络4.1 生成器4.2 判别器 5 模型训练损失函数优化器训练模型 6 结果展示7 训练结束打上标签和时间 在下面的教程中,我们将通过示例代码说明…

为什么裁员先裁技术人员?网友给答复

网友1:技术岗本身就是项目制的,项目完成,后续项目运营的收益与技术无关。之前是项目多,所以收益持续走高,现在都在减项目,自然先减技术岗。 网友2:房子盖起来了,还需要农民工么? …

基于STM主题模型的主题提取分析-完整代码数据

直接看结果: 代码: import re from collections import defaultdict import random import matplotlib.pyplot as plt import numpy as npimport pandas as pd import numpy as np import re from sklearn.feature_extraction.text import CountVectorizer from nltk.corpus…

在Morelogin中使用IPXProxy海外代理IP的设置指南

Morelogin指纹浏览器是市场上较受欢迎的指纹浏览器,允许用户管理多个账号并进行自动化操作。它提供免费环境供用户进行体验,并且操作起来非常简单。大多数人都会将Morelogin指纹浏览器和海外代理IP进行使用,来应用于多种场景,如电…

用ce修改植物大战僵尸杂交版银币

第一步打开游戏 用ce打开图中进程 第二步 输入你原始银币 点首次搜索 第三步 找到这个地址 把地址拖下来 第四步 双击直接修改下面数值即可 金币 钻石 都和这个方法一样 不一样的是首次搜索可能会有很多地址 我们改变游戏里面的值 然后再次搜索游戏被改变的值即可准确找到地址

MySQL中字段的实际长度

在MySQL中,字段的实际长度(即存储数据的实际字节数)可能因数据类型和存储的具体内容而异。对于字符类型(如CHAR, VARCHAR, TEXT等)字段,实际长度取决于存储的字符串长度以及字符集的编码方式(如…

新加坡工作和生活指北:租房篇

本文首发于公众号 Keegan小钢 前段时间已经分享了工作篇,现在接着聊聊生活篇。因为生活这块涉及到多个方面,内容比较多,所以我再细分了一下,本篇先聊聊租房。 先来看看新加坡的地区分布图,如下: 上图将新加…

使用Python绘制累积直方图并分析数据

使用Python绘制累积直方图并分析数据 在这篇博客中,我们将探讨如何使用Python中的pandas库和matplotlib库来绘制累积直方图,并分析数据文件中的内容。累积直方图是一种常用的图表类型,用于展示数据的累积分布情况。 数据: 链接…

(C++链表01) 移除链表元素

203、移除链表元素 不带头节点 class Solution { public:ListNode* removeElements(ListNode* head, int val) {while(head ! NULL && head->val val) {ListNode* tem head;head head->next;delete tem;}ListNode* cur head;while(cur ! NULL && c…