使用Python查询和下载Sentinel卫星数据
欢迎学习本教程,了解如何使用 Python 访问和下载 Sentinel 卫星数据。在深入探讨技术方面之前,让我们先了解一下哨兵卫星是什么以及它们为何如此重要。

哨兵家族。资料来源:欧空局。
Sentinel 卫星是欧洲航天局 (ESA) 开发的一组地球观测任务,是哥白尼计划的一部分,该计划是欧洲持续监测地球及其环境倡议的基石。这些卫星旨在提供有关地球健康、行为和资源的全面、最新的信息。
哨兵配备了一系列技术,例如雷达和多光谱成像仪器,使他们能够以各种方式观察地球。这种能力对于广泛的应用至关重要,从监测气候变化和管理自然灾害到确保可持续农业实践和维护海洋健康。
Sentinel 舰队目前包括几颗活跃卫星,每颗卫星都有独特的用途:
Sentinel-1 是一项极轨、全天候、昼夜雷达成像任务,用于陆地和海洋服务。Sentinel-1A 于 2014 年 4 月 3 日发射,Sentinel-1B 于 2016 年 4 月 25 日发射。两者均由联盟号火箭从法属圭亚那的欧洲航天港送入轨道。Sentinel-1B 的任务将于 2022 年结束,目前计划尽快发射 Sentinel-1C。
Sentinel-2 是一项极轨、多光谱高分辨率成像任务,用于陆地监测,提供植被、土壤和水覆盖、内陆水道和沿海地区等图像。Sentinel-2 还可以为紧急服务提供信息。Sentinel-2A于2015年6月23日发射,Sentinel-2B随后于2017年3月7日发射。
Sentinel-3 是一项多仪器任务,旨在以高端精度和可靠性测量海面地形、海面和陆地表面温度、海洋颜色和陆地颜色。该任务支持海洋预报系统以及环境和气候监测。Sentinel-3A于2016年2月16日发射,Sentinel-3B于2018年4月25日加入其双胞胎卫星的轨道。
Sentinel-4 是专门用于大气监测的有效载荷,将搭载在地球静止轨道上的气象卫星第三代探测仪 (MTG-S) 卫星上。
Sentinel-5 Precursor(也称为 Sentinel-5P)是 Sentinel-5 的前身,可提供有关影响空气质量和气候的多种微量气体和气溶胶的及时数据。它的开发是为了减少 Envisat 卫星(特别是 Sciamachy 仪器)与 Sentinel-5 发射之间的数据差距。Sentinel-5P 于 2017 年 10 月 13 日由火箭发射器从俄罗斯北部普列谢茨克航天发射场送入轨道。
Sentinel-5 是一个有效载荷,它将在 MetOp 第二代卫星上从极地轨道监测大气层。
Sentinel-6 携带雷达高度计来测量全球海面高度,主要用于海洋学和气候研究。第一颗卫星于 2020 年 11 月 21 日由 SpaceX 猎鹰 9 号火箭从美国加利福尼亚州范登堡空军基地发射进入轨道。
这些卫星收集的数据对于科学家、政策制定者和企业来说非常宝贵,可以帮助他们做出明智的决策来保护环境和有效管理资源。通过对 Sentinel 数据的开放访问,任何拥有适当工具和知识的人都可以利用这些丰富的信息进行研究、创新或实际应用。
在本教程中,我们将指导您完成连接到 Sentinel API、查询卫星数据以及针对您的特定用例下载数据的过程。无论您是研究人员、学生还是只是卫星数据爱好者,您都会发现本教程是探索 Sentinel 卫星数据巨大潜力的实用起点。让我们开始吧!
- 安装 Sentinelsat 软件包
!pip install sentinelsat在 Jupyter 笔记本单元中,它将sentinelsat在您当前的 Python 环境中安装该包,使其可在您的笔记本中导入和使用。这是必要的,因为 Google Colab 不将该sentinelsat包包含在其默认环境中。
!pip install sentinelsat
2.导入必要的模块和功能
from sentinelsat import SentinelAPI, read_geojson, geojson_to_wkt
from datetime import date
3. 创建SentinelAPI对象用于访问Sentinel数据
在继续此步骤之前,您必须在此网站上创建您的帐户。保存您的用户名和密码以在代码中使用。
api = SentinelAPI('your.username', 'N12345678', 'https://finhub.nsdc.fmi.fi')
4. 设置并执行哨兵数据查询和下载
每条注释都解释了相应代码行的目的和操作,让您清楚地了解查询和下载Sentinel卫星数据过程中的每个步骤。
producttype='L2__UV____'函数中的参数api.query()指定您正在查询的 Sentinel 产品的类型。在本例中,它是 2 级紫外线 (UV) 数据。确切的产品类型代码(“L2__UV____”)对应于哨兵任务提供的特定数据集。您需要参考 Sentinel 的产品规格文档,以了解该产品类型和其他产品类型的确切性质。
# Define coordinates for the area of interest
longitude = -54.7 # Central longitude of the area of interest
latitude = -2.0 # Central latitude of the area of interest
# Define the delta (range) for latitude and longitude
delta_lat = 0.2 # Latitude range (+/-) to create the bounding box
delta_lon = 0.2 # Longitude range (+/-) to create the bounding box
# Calculate coordinates for the corners of the bounding box
lat_c1 = latitude + delta_lat # Top latitude of the bounding box
lat_c2 = latitude - delta_lat # Bottom latitude of the bounding box
lon_c1 = longitude + delta_lon # Right longitude of the bounding box
lon_c2 = longitude - delta_lon # Left longitude of the bounding box
# Define a footprint (area of interest). Currently set as a single point.
footprint = 'POINT (%s %s)' % (longitude, latitude) # WKT format for a single point footprint
# Query the API for Sentinel products within the defined footprint and time range
products = api.query(footprint,
producttype='L2__UV____', # Specified type of Sentinel product
area_relation='Contains', # Spatial relation between the footprint and the product
date=('20220501', '20220601') # Time range for the query
)
# Convert the query results to a Pandas DataFrame
products_df = api.to_dataframe(products) # Easier manipulation and analysis of query results
# Sort the DataFrame by the 'beginposition' column in ascending order, then keep only the top 5 rows
products_df_sorted = products_df.sort_values(['beginposition'], ascending=[True]) # Sort by observation start time
products_df_sorted = products_df_sorted.head(5) # Limit the results to top 5
# Download the first product in the sorted DataFrame
api.download_all(products_df_sorted.index[0:1], directory_path='.') # Download the first product from the sorted list
运行上面的单元格将下载一个或多个文件,具体取决于您设置的时间段。几秒钟或几分钟后,根据您的互联网连接,文件将下载到您的计算机(如果您使用 Spyder、VScode 等)或您的协作空间。


为了处理 netCDF ( .nc) 数据,包括来自 Sentinel 卫星的数据,可以使用各种软件工具和编程库。以下是简要概述:
编程 库(Python、R 等):
netCDF4、xarray、 和 等Python 库matplotlib通常用于打开、分析和可视化 netCDF 数据。- R 也有类似
ncdf4和 的包raster,用于处理 netCDF 文件。
地理信息系统软件 :
- QGIS 等地理信息系统 (GIS) 软件可以打开和显示 netCDF 文件,从而进行空间分析和绘图。
NASA 的全套装备:
- Panoply 由 NASA 开发,是一款用户友好的工具,可以打开 netCDF 文件,允许用户查看数据切片、创建绘图以及导出各种格式的图像或数据。
- 它不需要编程技能,是快速可视化和探索数据的不错选择。

此代码示例中下载的文件使用 Panoply 打开。
这些方法中的每一种都提供不同的功能,从简单的可视化(Panoply)到复杂的数据分析(Python、R、GIS 软件)。工具的选择取决于用户的具体需求和技术专长。
结论
在本教程中,我们完成了使用 Python 访问和下载 Sentinel 卫星数据的过程。从与Sentinel API建立连接开始,我们定义了特定的感兴趣的地理区域,对某个产品类型和日期范围进行数据查询,并对相关数据进行排序和下载。
到现在为止,您应该很好地了解如何:
- 使用您的凭据连接到 Sentinel API。
- 定义数据检索的精确地理足迹。
- 查询Sentinel数据库以获取特定的卫星数据产品。
- 使用 Pandas 对查询结果进行排序和处理。
- 下载选定的卫星数据以供分析。
本教程旨在为您提供基本工具和知识,以利用哨兵卫星提供的庞大的地球观测数据存储库。这些技能对于从环境监测和气候研究到城市规划和灾害应对等广泛的应用来说都是非常宝贵的。
请记住,哨兵数据库是一个不断增长和更新的资源,为我们的星球提供新的见解。您在这里学到的技术可以进行调整和扩展,以满足您的特定数据需求和研究目标。
