当前位置: 首页 > news >正文

GEE 按范围导出 Sentinel-2 卫星影像


Sentinel-2 卫星提供了高分辨率的地表覆盖图像,广泛应用于农业监测、城市规划、环境变化分析等诸多领域。在 Google Earth Engine (GEE) 中,我们能够按特定地理范围导出这些影像,以支持更深入的研究和分析。

使用方法 💻

GEE 提供了一个强大的平台用于处理和导出 Sentinel-2 数据。本文将介绍如何利用 Python 与 GEE API 来按指定地理范围导出 Sentinel-2 卫星影像。

  • https://developers.google.com/earth-engine/datasets/catalog/sentinel-2

代码详解 🔍

下面是一个使用 Python 和 GEE API 导出 Sentinel-2 卫星影像的代码详解:

  • 获取边界信息
aoi = ee.FeatureCollection(area_of_interest)
feature_count = aoi.size().getInfo()

这里加载了地理兴趣区域,并检查了这个区域是否包含有效的特征。如果没有任何特征,则会打印一条消息提示集合为空。

  • 获取兴趣区域的几何信息
geometry = aoi.geometry()

获取了地理兴趣区域的几何形状,这将用于后续的图像过滤和裁剪操作。

  • 加载 Sentinel-2 图像集合
s2_collection = ee.ImageCollection('COPERNICUS/S2_HARMONIZED') \.filterBounds(geometry) \.filterDate(datetime(year, 1, 1), datetime(year + 1, 1, 1)) \.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))

Copernicus Sentinel-2 数据集中加载图像集合,并过滤出感兴趣区域内的图像。接着,进一步筛选出指定年份的图像,并排除云层占比超过 20% 的图像。

  • 定义云遮蔽函数
def mask_s2clouds(image):qa = image.select('QA60')cloud_mask = qa.bitwiseAnd(1 << 10).eq(0).And(qa.bitwiseAnd(1 << 11).eq(0))return image.updateMask(cloud_mask).divide(10000)

这个函数通过选择 QA60 波段,并应用位运算来检测云层。然后更新掩膜来移除检测到的云,并将像素值标准化(因为 Sentinel-2 图像的原始像素值是 10000 倍的实际反射率)。

  • 对图像集合应用云遮蔽函数
masked_collection = s2_collection.map(mask_s2clouds)

应用前面定义的云遮蔽函数到整个 Sentinel-2 图像集合上。

  • 计算图像集合的中值图像,并按兴趣区域裁剪
median_image = masked_collection.median().clip(aoi)

计算了图像集合的中值图像,这有助于减少噪声和云的影响。之后,按照地理兴趣区域裁剪图像。

  • 选择正确的波段顺序

selected_bands = median_image.select(['B4', 'B3', 'B2'])

选择了红绿蓝(RGB)波段作为输出图像的显示,这是常见的视觉化方式。

  • 导出图像到 Google Drive
export_task = ee.batch.Export.image.toDrive(image=selected_bands,description=aoi.first().get('name').getInfo(),folder=output_directory,fileNamePrefix=aoi.first().get('name').getInfo(),region=geometry,scale=10,maxPixels=1e13
)
export_task.start()

设置了导出任务,将裁剪后的中值图像导出到 Google Drive 上指定的目录下。导出的文件名基于地理兴趣区域的名称,以方便识别。

完整案例 🏞️

在此示例中,我们首先初始化了必要的变量,并加载了地理兴趣区域的边界数据集。随后,创建了 Sentinel-2 卫星影像的集合,并应用了云遮蔽函数。最后,计算了中值影像并将其导出到了 Google Drive。

import ee
from datetime import datetime# 初始化 Earth Engine
ee.Initialize()def crop_image_sentinel(area_of_interest, year, output_directory):"""导出 Sentinel-2 图像到 Google Drive.参数:area_of_interest -- 地理兴趣区域的 FeatureCollection URL.year -- 导出图像的年份.output_directory -- Google Drive 中保存图像的目录."""# 获取边界信息aoi = ee.FeatureCollection(area_of_interest)feature_count = aoi.size().getInfo()if feature_count > 0:# 获取兴趣区域的几何信息geometry = aoi.geometry()# 加载 Sentinel-2 图像集合s2_collection = ee.ImageCollection('COPERNICUS/S2_HARMONIZED') \.filterBounds(geometry) \.filterDate(datetime(year, 1, 1), datetime(year + 1, 1, 1)) \.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))# 定义云遮蔽函数def mask_s2clouds(image):qa = image.select('QA60')cloud_mask = qa.bitwiseAnd(1 << 10).eq(0).And(qa.bitwiseAnd(1 << 11).eq(0))return image.updateMask(cloud_mask).divide(10000)# 对图像集合应用云遮蔽函数masked_collection = s2_collection.map(mask_s2clouds)# 计算图像集合的中值图像,并按兴趣区域裁剪median_image = masked_collection.median().clip(aoi)# 选择正确的波段顺序selected_bands = median_image.select(['B4', 'B3', 'B2'])# 导出图像到 Google Driveexport_task = ee.batch.Export.image.toDrive(image=selected_bands,description=aoi.first().get('name').getInfo(),folder=output_directory,fileNamePrefix=aoi.first().get('name').getInfo(),region=geometry,scale=10,maxPixels=1e13)export_task.start()else:print('The FeatureCollection is empty.')

注意事项 ⚠️

  • 权限: 确保您的 GEE 账户拥有足够的权限来执行数据导出操作。
  • 数据范围: 确认指定的地理兴趣区域和年份是准确的,避免不必要的数据导出。
  • 云遮蔽: 根据实际情况调整云遮蔽函数,以提高云检测的准确性。

术语解释表 📋

术语/函数解释
eeGoogle Earth Engine Python API 包,用于访问和处理遥感数据。
datetimePython 内置模块,用于日期和时间处理。
ee.FeatureCollection表示地理矢量数据的集合。
ee.ImageCollection表示遥感图像集合。
filterBounds过滤图像集合中的图像,只保留那些与给定地理区域相交的图像。
filterDate过滤图像集合中的图像,只保留那些在给定日期范围内的图像。
filter用于过滤图像集合中的图像,这里用来排除云层比例过高的图像。
updateMask更新图像的掩膜,通常用于去除不需要的部分如云层等。
median计算图像集合的中值图像,用于减少噪声和云的影响。
clip按给定的地理区域裁剪图像。
select从图像中选择特定的波段。
Export.image.toDrive将图像导出到 Google Drive。

如果这对您有所帮助,希望点赞支持一下作者! 😊

详细全文-点击查看

file


http://www.mrgr.cn/news/27069.html

相关文章:

  • spark里使用geohash处理数据之线程安全问题
  • 极越造车2.0:01销量回暖,07杀出血路,ASD抢跑FSD
  • 深入理解指针(二)
  • Python中给定一个数组a = [2,3,9,1,0],找出其中最大的一个数,并打印出来 求解?
  • 大数据新视界 --大数据大厂之Kafka消息队列实战:实现高吞吐量数据传输
  • 36岁,大厂女程序员,中年失业后,我开始接受自己的平凡,并深耕自己
  • element-plus表单使用show-overflow-tooltip,避免占满屏幕,需要设置宽度
  • supermap icilent3d for cesium加载地形并夸大地形
  • Python实现牛顿法 目录
  • self与方法
  • PD虚拟机占用多少内存?使用电脑的虚拟内存会损害电脑吗
  • linux 操作系统下cupsdisable命令介绍和使用案例
  • AtCoder ABC367 A-D题解
  • 建筑机器人通用操作系统设计方案
  • xshell密钥方式连接阿里云Linux
  • PCM的缺点
  • python基础知识 (五)--容器、索引、切片、字符串的遍历、查找、修改元素
  • Redis实现发布/订阅功能(实战篇)
  • 高级java每日一道面试题-2024年9月11日-数据库篇-事务回滚的常见原因有哪些?
  • 基于 WeChatFerry 的 Python 机器人框架WeChatRobot