gpt4 book ai didi

python - 使用 Python boto3 从 S3 下载 Sentinel 文件

转载 作者:行者123 更新时间:2023-12-04 09:12:37 25 4
gpt4 key购买 nike

我正在使用以下代码从 S3 下载全尺寸 Sentinel 文件

import boto3

s3_client = boto3.Session().client('s3')
response = s3_client.get_object(Bucket='sentinel-s2-l1c',
Key='tiles/7/W/FR/2018/3/31/0/B8A.jp2',
RequestPayer='requester')
response_content = response['Body'].read()

with open('./B8A.jp2', 'wb') as file:
file.write(response_content)
但我不想下载全尺寸图像。有没有办法下载基于 latMax、longMin、LatMin 和 LatMax 的图像?我正在使用以下命令,但它不起作用,因为数据是在 S3 上生成请求者-付款人的
gdal_translate --config CPL_TMPDIR temp -projwin_srs "EPSG:4326" -projwin 23.55 80.32 23.22 80.44 /vsicurl/http://sentinel-s2-l1c.s3-website.eu-central-1.amazonaws.com/tiles/43/R/EQ/2020/7/26/0/B02.jp2 /TestScript/B02.jp2
有什么办法可以使用 Python boto 实现这一目标吗?

最佳答案

您可以使用 rasterio访问图像的子窗口:
(我假设 AWS 凭证已设置为用于 boto3 并且您具有必要的权限)

import boto3
from matplotlib.pyplot import imshow
import rasterio as rio
from rasterio.session import AWSSession
from rasterio.windows import Window

# create AWS session object
aws_session = AWSSession(boto3.Session(), requester_pays=True)

with rio.Env(aws_session):
with rio.open("s3://sentinel-s2-l1c/tiles/7/W/FR/2018/3/31/0/B8A.jp2") as src:
profile = src.profile
win = Window(0, 0, 1024, 1024)
arr = src.read(1, window=win)

imshow(arr)
raster plot
print(arr.shape)

(1024, 1024)


解释:
如果为 boto3 正确配置了 AWS 凭证,您可以创建一个 AWSSession基于 boto3.Session() 的对象.这将为 S3 访问设置必要的凭据。添加标志 requester_pays=True所以你可以从 requester-pays 存储桶中读取。 AWSSession对象可以传入 rasterio.Env上下文,所以 rasterio (更重要的是底层 gdal 函数)可以访问凭据。
使用 rasterio.windows.Window我正在将任意子窗口 (0, 0, 1024, 1024) 读入内存,但您也可以使用坐标定义窗口,如 documentation 中所述.
从那里您可以处理阵列或将其保存到磁盘。

关于python - 使用 Python boto3 从 S3 下载 Sentinel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63323425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com