批量下载Landsat数据(例如Landsat 8 OLI/TIRS)可以通过多种方法实现,但通常涉及使用在线服务或API接口,如USGS EarthExplorer、Google Earth Engine(GEE)或者专门的库如landsatxplore
(一个Python库,专门用于搜索和下载Landsat数据)。
这里,我将提供一个基于landsatxplore
库的示例,该库可以帮助你更便捷地从EarthExplorer API下载Landsat数据。首先,你需要安装landsatxplore
库,如果还没有安装,可以通过pip安装:
pip install landsatxplore
以下是一个简单的示例脚本,展示如何使用landsatxplore
来搜索特定时间和地点的Landsat 8数据,并批量下载这些数据的元数据或实际影像文件:
from landsatxplore import api
import os
# 初始化API,需要你的用户名和密码(如果没有,可以在USGS EarthExplorer网站注册)
username = 'your_username'
password = 'your_password'
api.authenticate(user=username, password=password)
# 设置搜索参数
lon_min, lon_max = -122.5, -122.3 # 经度范围
lat_min, lat_max = 37.7, 37.9 # 纬度范围
start_date = '2020-01-01'
end_date = '2020-12-31'
cloud_cover = 10 # 最大云覆盖率
# 搜索Landsat 8数据
results = api.search(
sensor='L8',
date=(start_date, end_date),
cloud_cover=cloud_cover,
max_results=500, # 最大返回结果数
longitude=(lon_min, lon_max),
latitude=(lat_min, lat_max)
)
# 输出搜索结果
print(f"Found {len(results)} scenes.")
# 批量下载元数据(如果需要下载影像文件,则需要更多步骤和磁盘空间)
download_folder = 'landsat_downloads'
if not os.path.exists(download_folder):
os.makedirs(download_folder)
for scene in results:
# 这里只下载元数据,如果需要下载影像,需要解析scene的更多信息
metadata_path = os.path.join(download_folder, f"{scene['sceneId']}_MTDL.xml")
if not os.path.exists(metadata_path):
api.download(scene['sceneId'], path=download_folder, product='METADATA_FILE')
print(f"Downloaded metadata for {scene['sceneId']}")
# 注意:下载完整影像文件将需要更多的代码来处理下载链接和可能的文件分块
注意:
- 你需要注册USGS EarthExplorer账户,并获取API访问权限。
- 示例代码仅下载每个场景的元数据(
.xml
文件),因为下载完整的影像文件可能需要更复杂的处理,如处理大文件下载、文件分块等。 - 如果你需要下载影像文件,
landsatxplore
库也支持,但你可能需要解析每个scene
对象以获取正确的下载链接,并处理文件下载的逻辑。 - 请确保你的网络环境允许通过HTTPS访问外部服务。
对于大规模或复杂的下载任务,考虑使用更强大的数据处理和分析平台,如Google Earth Engine,它提供了强大的数据检索和处理能力,以及Python API。