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

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本


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 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()
    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

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值