GEE必须会教程—一文教会你GEE下载影像数据的方法

2024-04-09 05:12

本文主要是介绍GEE必须会教程—一文教会你GEE下载影像数据的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、基本流程

A.平台进入:网站搜索:https://developers.google.com/earth-engine,进入Google Earth Engine 官网平台(以下简称GEE平台),正常登录该平台需要利用邮箱进行申请,申请通过后可以正常登录该平台。

B.数据检索:在平台上点击“Dataset”,可以查看GEE平台上所有的数据集,此处选择“Landsat”数据,选择“Landsat9OLI/TIRS”数据集,选择大气层顶反射率数据集“Top of Atmosphere”数据集。

C.数据信息查看:具体查看该数据集的描述、波段信息、影像属性等等,以及平台上调用和访问的代码信息。

D.数据的下载:GEE上进行影像数据的下载一般可通过JavaScript和Python两个接口进行代码的编辑,一般的代码编写思路为导入研究区域→影像数据集的访问→影像数据的空间、时间和云量筛选→查看影像结果→代码调整→影像下载

图1

图2

二、下载流程

①导入研究区域;在ArcMap中导出县级行政区划数据,并在个人资产上上传家乡—江西省赣州市南康区的矢量shp文件。利用ee.FeatureCollection代码导入研究区域,作为影像数据筛选的参考范围。

var roi = ee.FeatureCollection("users/hesuixinya511/rongchang");

②数据调用和预处理:在GEE平台上,通过ee.ImageCollection代码访问Sentinel-2数据。根据研究区域边界,以及2020年的全年日期范围,筛选云量百分比小于0.05的卫星数据,并根据Sentinel-2的去云函数方法进行初步的去云处理。

function maskS2clouds(image) {var qa = image.select('QA60');// Bits 10 and 11 are clouds and cirrus, respectively.var cloudBitMask = 1 << 10;var cirrusBitMask = 1 << 11;// Both flags should be set to zero, indicating clear conditions.var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(qa.bitwiseAnd(cirrusBitMask).eq(0));return image.updateMask(mask).divide(10000);
}
var dataset = ee.ImageCollection('COPERNICUS/S2_HARMONIZED').filterDate('2020-01-01', '2020-12-31').filterBounds(roi).filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 0.05)).map(maskS2clouds);
print(dataset);

③查看影像:利用list命令生成影像列表,方便按照索引值进行可视化的显示,在对符合条件的影像进行逐一查看后,发现2020年3月15日的两景影像能够完全覆盖区域。

//生成影像列表
var list = dataset.toList(dataset.size());
var downImage = ee.Image(list.get(3));
var upImage = ee.Image(list.get(5));
var visualization = {min: 0.0,max: 0.3,bands: ['B4', 'B3', 'B2'],
};
Map.centerObject(roi,6);
Map.addLayer(upImage,visualization,"upImage");
Map.addLayer(downImage, visualization, 'downImage');
Map.addLayer(roi,{"color":"red"},"ROI");

④合成影像和下载:由于Sentinel-2数据不同的波段具有不同的分辨率,在下载前需要将同一分辨率(10m、20m、60m)的波段数据进行影像合成后,再编写下载的代码,设置好下载参数,在“Task”目录中完成Sentinel-2数据的下载即可。

//生成影像列表
var list = dataset.toList(dataset.size());
var downImage = ee.Image(list.get(3));
var upImage = ee.Image(list.get(5));
var visualization = {min: 0.0,max: 0.3,bands: ['B4', 'B3', 'B2'],
};
Map.centerObject(roi,6);
Map.addLayer(upImage,visualization,"upImage");
Map.addLayer(downImage, visualization, 'downImage');
Map.addLayer(roi,{"color":"red"},"ROI");
④合成影像和下载:由于Sentinel-2数据不同的波段具有不同的分辨率,在下载前需要将同一分辨率(10m、20m、60m)的波段数据进行影像合成后,再编写下载的代码,设置好下载参数,在“Task”目录中完成Sentinel-2数据的下载即可。
var downImage10 = downImage.select("B2","B3","B4","B8");
var downImage20 = downImage.select("B5","B6","B7","B8A","B11","B12");
var downImage60 = downImage.select("B1","B9","B10");
var upImage10 = upImage.select("B2","B3","B4","B8");
var upImage20 = upImage.select("B5","B6","B7","B8A","B11","B12");
var upImage60 = upImage.select("B1","B9","B10");
//下载影像
Export.image.toDrive({  image: downImage10,  description: "downImage10",//影像名称   fileNamePrefix: "Sentinel-2down10",  folder: "RongchangESA",  //文件夹名称 scale: 10,  region: roi,  maxPixels: 1e13,  crs: "EPSG:4326"  });
Export.image.toDrive({  image: downImage20,  description: "downImage20",//影像名称   fileNamePrefix: "Sentinel-2down20",  folder: "RongchangESA",  //文件夹名称 scale: 20,  region: roi,  maxPixels: 1e13,  crs: "EPSG:4326"  });
Export.image.toDrive({  image: downImage60,  description: "downImage60",//影像名称   fileNamePrefix: "Sentinel-2down60",  folder: "RongchangESA",  //文件夹名称 scale: 60,  region: roi,  maxPixels: 1e13,  crs: "EPSG:4326"  });
Export.image.toDrive({  image: upImage10,  description: "upImage10",//影像名称   fileNamePrefix: "Sentinel-2up10",  folder: "RongchangESA",  //文件夹名称 scale: 10,  region: roi,  maxPixels: 1e13,  crs: "EPSG:4326"  });
Export.image.toDrive({  image: upImage20,  description: "upImage20",//影像名称   fileNamePrefix: "Sentinel-2up20",  folder: "RongchangESA",  //文件夹名称 scale: 20,  region: roi,  maxPixels: 1e13,  crs: "EPSG:4326"  });
Export.image.toDrive({  image: upImage60,  description: "upImage60",//影像名称   fileNamePrefix: "Sentinel-2up60",  folder: "RongchangESA",  //文件夹名称 scale: 60,  region: roi,  maxPixels: 1e13,  crs: "EPSG:4326"  });

⑤将下载好的Sentinel-2影像数据和Landsat8数据分别在ENVI中进行加载,查看下载的影像是否无误。结果如下:

本期内容到这里就结束了,更多内容欢迎持续关注小编的公众号“梧桐GIS”,谢谢大家支持!

这篇关于GEE必须会教程—一文教会你GEE下载影像数据的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/887254

相关文章

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Nexus安装和启动的实现教程

《Nexus安装和启动的实现教程》:本文主要介绍Nexus安装和启动的实现教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Nexus下载二、Nexus安装和启动三、关闭Nexus总结一、Nexus下载官方下载链接:DownloadWindows系统根

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st