超方便!用GEE和Python在本地分区下载无云哨兵影像

干货满满!GEE与Python结合:本地分区下载哨兵二号影像的步骤详解与实用技巧

目录

01写在前面

02环境配置

03具体代码及解释

导入必要的包:

输入矢量数据及输出影像

 去云

哨兵二号影像

分区下载

运行结果

04相关问题

1.确保你已经配置好了环境 成功引入geemap包,不然一切都白搭。

2.确保你的 jsonPath 和 output 路径正确,不然会报错。脚本会自动处理每个分区并下载对应的无云影像。

01写在前面

    在遥感数据处理中,哨兵二号影像以其高分辨率和多光谱数据广受欢迎。然而,快速下载大面积的无云影像一直是个挑战。GEE因提供了强大的云计算平台,使得处理大规模的遥感数据变得高效快捷。再结合Python,我们可以编写灵活的脚本来自动化下载过程,提高工作效率。现在也已有不少GEE代码能下载到研究区的影像。

    但是,当前通过Google Earth Engine(GEE)下载影像通常需要依赖Google Drive,这在下载速度和灵活性上存在诸多限制。不少小伙伴都应该有下载到一半时提示你空间不够。

    此外,如果你需要下载不同区域的影像,现有代码也很少提供分区域下载的解决方案。本文将基于此分享如何用GEE和Python实现本地分区下载无云的哨兵二号影像的代码。(附关键代码)

02环境配置

首先,确保你可以科学上网,已有GEE账号以及搭建了Python的本地环境(下载Python 和Anaconda)。这里推荐吴秋生老师的Geemap包。详细介绍可以参考他的geemap官网。具体配置安装过程,我这里就先不赘述了,如果有问题,可以后台私信我。  吴秋生Geemapicon-default.png?t=N7T8https://www.easyscholar.cc/

03具体代码及解释

  • 导入必要的包:
import ee
import geemap
import os
  • 输入矢量数据及输出影像
jsonPath = "./geedownload/extent.geojson"
output = "./geedownload/out"
start = "2020-01-01"
end = "2020-12-30"
  •  去云
def maskS2clouds(image):
    qa = image.select('QA60')
    # 位 10 和 11 是云,我们要把它们掩膜掉
    cloudBitMask = 1 << 10
    cirrusBitMask = 1 << 11
    # 这两个标志都应该设置为0,表示无云
    mask = qa.bitwiseAnd(cloudBitMask).eq(0) \
            .And(qa.bitwiseAnd(cirrusBitMask).eq(0))
    # 哨兵的像元值是反射率的10000倍,要除以10000
    return image.updateMask(mask).divide(10000)
  • 哨兵二号影像
 s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
  • 分区下载
def splitDownload(jsonPath, output, start, end):
    ee.Initialize()
    s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
    featureCol = geemap.geojson_to_ee(jsonPath)
    mylist = featureCol.toList(featureCol.size())
    infos = mylist.getInfo()
    for index, info in enumerate(infos):
        print(f'开始第{index+1}个')
        geom = info["geometry"]
        imgcol = s2.filterDate(start, end)\
                   .filterBounds(geom)\
                   .map(maskS2clouds)\
                   .select("B[1-8]")
        img = imgcol.median().clip(geom)
        geemap.download_ee_image(
            image=img,
            filename=os.path.join(output,"FID_"+str(index)+".tif"),
            region=geom,
            crs='EPSG:4326',
            scale=10
        )

Tips:“splitDownload” 根据GeoJSON文件中的每个区域进行裁剪并下载无云影像。影像在下载前被裁剪和掩膜处理,确保最终的影像无云。

  • 运行结果

将上述脚本保存为 download_sentinel2.py,在命令行中运行,等待几分钟就可以,速度根据研究区大小和数量决定。

运行脚本后,检查 output 文件夹,应该可以看到以 FID_ 开头的 .tif 文件。这些就是成功下载的哨兵二号影像。

在ArcGIS打开,可以看到效果相当可以

04相关问题

1.确保你已经配置好了环境 成功引入geemap包,不然一切都白搭。
2.确保你的 jsonPath 和 output 路径正确,不然会报错。脚本会自动处理每个分区并下载对应的无云影像。

    相比通过Google Drive下载,此代码代码简单明了,即使是零基础用户也能快速上手。它不仅能直接下载到本地大大提高下载速度,还可以根据GeoJSON文件分区下载影像,灵活处理不同区域的数据需求。节省大量手动操作时间。

作品原创,创作不易,仅供学习和交流,未经授权禁止转载。

干货满满!GEE与Python结合:本地分区下载哨兵二号影像的步骤详解与实用技巧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉于海底的小石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值