GEE代码实例教程详解:湖泊面积分析

GEE代码实例教程详解:湖泊面积分析

完整代码

// 定义研究区域的坐标点
var coordinates = [[42.000552219688586, 38.18969302118053],[43.868228000938586, 38.18969302118053],[43.868228000938586, 39.209978258633186],[42.000552219688586, 39.209978258633186],[42.000552219688586, 38.18969302118053]
];// 创建多边形区域
var roi = ee.Geometry.Polygon(coordinates);// 将多边形添加到地图上
Map.addLayer(roi, {color: 'red'});// 定义时间范围
var time_start = '2013-01-01';
var time_end = '2021-12-31';// 创建Landsat 8图像集合并筛选数据
var landsat = ee.ImageCollection('LANDSAT/LC08/C01/T1').filterDate(time_start, time_end).filter(ee.Filter.lt('CLOUD_COVER', 10)).filter(ee.Filter.calendarRange(6, 9, 'month')) // 筛选夏季月份.filterBounds(roi); // 应用地理范围// 计算NDWI
var ndwi = landsat.map(function(img) {var green = img.select('B4').multiply(0.0001).subtract(0.1); // 绿色波段var nir = img.select('B5').multiply(0.0001).subtract(0.1); // 近红外波段var ndwi = green.normalizedDifference(nir).rename('ndwi');return img.addBands(ndwi);
}).median().select('ndwi');// 应用阈值并创建水体掩膜
var water_mask = ndwi.gte(0.1); // NDWI大于等于0.1的像素被认为是水体// 将水体掩膜添加到地图上
Map.addLayer(water_mask, {min: 0, max: 1, palette: ['0000FF']}, 'Water Mask');// 计算水体像素面积(单位:平方米)
var pixel_area = water_mask.multiply(ee.Image.pixelArea());// 将像素面积添加到地图上
Map.addLayer(pixel_area.clip(roi), {min: 0, max: 1000, palette: ['00FF00']}, 'Pixel Area');// 计算湖泊面积(单位:平方公里)
var scale = 30; // 定义分析的尺度
var lake_area = pixel_area.reduceRegion({reducer: ee.Reducer.sum(),geometry: roi,scale: scale,bestEffort: true
}).get('ndwi');// 将面积从平方米转换为平方公里
var lake_area_km2 = lake_area / 1e6 / 1e6 * scale * scale;// 打印湖泊面积
print('Lake Area (square kilometers):', lake_area_km2);

代码详解

1. 定义研究区域

我们首先定义了一个多边形区域(Region of Interest, ROI),这是分析湖泊面积的地理范围。坐标点列表表示多边形的顶点,我们使用ee.Geometry.Polygon来创建这个多边形。

2. 添加图层到地图

使用Map.addLayer函数将ROI添加到地图上,使用红色边界线可视化多边形区域。

3. 定义时间范围

设置时间范围time_starttime_end,用于筛选Landsat 8图像集合中的图像。

4. 创建和筛选图像集合

使用ee.ImageCollection获取Landsat 8图像,并应用多个筛选条件:

  • filterDate:根据时间范围筛选图像。
  • filter:选择云量覆盖小于10%的图像。
  • filterBounds:将图像集合限制在ROI内。

5. 计算NDWI

使用map函数遍历图像集合,对每张图像进行处理:

  • 选择绿色波段(B4)和近红外波段(B5),并进行辐射校正。
  • 计算NDWI,使用normalizedDifference函数。

6. 应用阈值和创建掩膜

使用gte函数(greater than or equal)设置阈值0.1,创建水体掩膜。

7. 可视化水体掩膜

将水体掩膜添加到地图上,使用蓝色可视化水体区域。

8. 计算像素面积

使用multiply函数将水体掩膜与每个像素的面积相乘,得到每个水体像素的面积(单位:平方米)。

9. 可视化像素面积

将计算得到的像素面积添加到地图上,使用绿色可视化。

10. 计算湖泊面积

使用reduceRegion函数和ee.Reducer.sum对ROI内的像素面积求和,得到湖泊的总面积(单位:平方米)。然后将面积转换为平方公里。

11. 打印结果

使用print函数打印湖泊的面积。

结论

本教程通过一个具体的代码实例,详细解释了如何在GEE中进行湖泊面积分析。从定义研究区域到计算和可视化结果,我们逐步介绍了每个步骤及其代码实现。希望这个教程能帮助你更好地理解GEE的功能,并激发你在地理空间数据分析领域的探索。

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

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

相关文章

C++ --> 类和对象(一)

欢迎来到我的Blog,点击关注哦💕 前言 前面讲到了C的入门需要学习的知识,是为了后面更好的学习。学习是不断深入的,内容是不断复杂的。笃定信心。 一、面向对象编程(OOP)和面向过程编程(POP)的认识 面向过程编程(Proc…

力扣-贪心算法4

406.根据身高重建队列 406. 根据身高重建队列 题目 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或…

MyBatis的简介与使用

Mybatis JDBC操作数据库的缺点 存在大量的冗余代码。手工创建 Connection、Statement 等,效率低下。手工将结果集封装成实体对象。查询效率低,没有对数据访问进行优化。 Mybatis框架 简介 MyBatis 本是 apache 的一个开源项目 iBatis, 2010年这个项目由…

imx6ull/linux应用编程学习(14) MQTT基础知识

什么是mqtt? 与HTTP 协议一样, MQTT 协议也是应用层协议,工作在 TCP/IP 四层模型中的最上层(应用层),构建于 TCP/IP协议上。 MQTT 最大优点在于,可以以极少的代码和有限的带宽,为连接…

网络资源模板--Android Studio 外卖点餐App

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 原创外卖点餐:基于Android studio 实现外卖(点)订餐系统 非原创奶茶点餐:网络资源模板--基于 Android Studio 实现的奶茶点餐App报告 一、项目演示 网络资源模板--基于Android …

在AvaotaA1全志T527开发板上使用AvaotaOS 部署 Docker 服务

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 准备…

dolphinscheduler-springboot集成

springboot集成dolphinscheduler 说明 为了避免对DolphinScheduler产生过度依赖,实践中通常不会全面采用其内置的所有任务节点类型。相反,会选择性地利用DolphinScheduler的HTTP任务节点功能,以此作为工作流执行管理的桥梁,对接…

信息技术课上的纪律秘诀:营造有序学习环境

信息技术课是学生们探索数字世界的乐园,但同时也是课堂纪律管理的挑战场。电脑、网络、游戏等元素可能分散学生的注意力,影响学习效果。本文将分享一些有效的策略,帮助教师在信息技术课上维持课堂纪律,确保教学活动顺利进行。 制…

几何建模基础-样条曲线和样条曲面介绍

1.概念介绍 1.1 样条曲线的来源 样条的英语单词spline来源于可变形的样条工具,那是一种在造船和工程制图时用来画出光滑形状的工具:富有弹性的均匀细木条/金属条/有机玻璃条,它围绕着按指定位置放置的重物或者压铁做弹性弯曲,以…

JS实现一个简单的模糊匹配

1、示例数据如下: // 示例数据 const data [ { name: ‘Alice’, age: 25 }, { name: ‘Bob’, age: 30 }, { name: ‘Charlie’, age: 35 }, { name: ‘David’, age: 40 }, { name: ‘Eve’, age: 45 } ]; 2、模糊匹配函数 // 模糊匹配函数 function fuzzyMatch(…

基于LangChain的RAG开发教程(二)

v1.0官方文档:https://python.langchain.com/v0.1/docs/get_started/introduction/ 最新文档:https://python.langchain.com/v0.2/docs/introduction/ LangChain是一个能够利用大语言模型(LLM,Large Language Model)能…

植物大战僵尸融合嫁接版 MAC 版本下载安装详细教程

继植物大战僵尸杂交版火了之后,PVZ改版可谓是百花齐放,最近又有一个非常好玩的模式被开发出来了,他们称为《植物大战僵尸融合嫁接版》 该版本并没有对植物卡牌做改动,而是可以将任意两种植物叠放到一起进行融合,产生新…

思路打开!腾讯造了10亿个角色,驱动数据合成!7B模型效果打爆了

世界由形形色色的角色构成,每个角色都拥有独特的知识、经验、兴趣、个性和职业,他们共同制造了丰富多元的知识与文化。 所谓术业有专攻,比如AI科学家专注于构建LLMs,医务工作者们共建庞大的医学知识库,数学家们则偏爱数学公式与定…

lvgl 本地化

生成语言包文件: lv_i18n compile -t en-GB.yml -o ui 正则匹配中文 "[\u4e00-\u9fa5]" _("[\u4e00-\u9fa5]") https://www.cnblogs.com/jerryqi/p/9604828.html 查找多个汉字体的 ("[\u4e00-\u9fa5]"[)]) _($1) "科室:"…

数据分析与挖掘实战案例-电商产品评论数据情感分析

数据分析与挖掘实战案例-电商产品评论数据情感分析 文章目录 数据分析与挖掘实战案例-电商产品评论数据情感分析1. 背景与挖掘目标2. 分析方法与过程2.1 评论预处理1. 评论去重2. 数据清洗 2.2 评论分词1. 分词、词性标注、去除停用词2. 提取含名词的评论3. 绘制词云查看分词效…

昇思25天学习打卡营第12天 | LLM原理和实践:MindNLP ChatGLM-6B StreamChat

1. MindNLP ChatGLM-6B StreamChat 本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。 ChatGLM-6B应该是国内第一个发布的可以在消费级显卡上进行推理部署的国产开源大模型,2023年3月就发布了。我在23年6月份的时候就在自己的笔记本电脑上部署测试过,当…

UI自动化测试框架:PO 模式+数据驱动(超详细)

1. PO 设计模式简介 什么是 PO 模式? PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,并以页面为单位来写测试用例,实现页面对象和测试用例的分离。 PO 模式的设计思想与…

Python学习中进行条件判断(if, else, elif)

条件判断是编程中必不可少的一部分,它让程序可以根据不同的条件执行不同的代码块。在Python中,主要使用if、elif和else语句来实现条件判断。 基本语法 在Python中,条件判断的基本语法如下: if condition:# 当condition为True时…

一篇读懂128陷阱

128陷阱 128陷阱的概念包装器类自动装箱自动拆箱128陷阱 Intager源码equals 128陷阱的概念 首先想要清楚什么是128陷阱,需要了解一些概念 包装器类 包装器类(Wrapper classes)是Java中的一组类,它们允许将基本数据类型&#xf…

NCCL 中的一些辅助debug 知识点

1&#xff0c;调试nccl 启动kernel的方法 ncclLaunchKernel cuLaunchKernelEx ncclStrongStreamLaunchKernel cudaLaunchKernel ncclLaunchOneRank cudaLaunchKernel 在 nccl lib 中&#xff0c;不存在使用<<<grid, block,,>>> 这种类似方式启…