利用sentinel hub Python开发包查询和下载Sentinel-2等卫星遥感数据
1. 描述
sentinelhub Python包支持用户利用两种方式进行卫星遥感数据的下载和处理。第一种方式是使用OGC(WMS和WCS)Web请求,它支持Sentinel-2 L1C和L2A,Sentinel-1,Landsat 8,MODIS和DEM数据源。第二种方式是支持从AWS(Amazon Web Service)上获取数据。从AWS上获取数据时需要提供AWS账号信息,当从欧洲地区获取数据时,免费,当从欧洲以外的地区获取数据时AWS会从当前的AWS账号上收取数据流量费。也就是说数据不出欧洲不收费,但是只要一出欧洲就会收取流量费。配置AWS认证(账号)的原因,其实就是为了扣费。比如,你可以把数据下载到欧洲的AWS主机上,也可以下载到欧洲的S3上,都是免费的。当你想下载到中国或者中国地区的S3上,都要收取流量费。具体收费标准可参考AWS的流量收费标准。
2. 安装
安装要求python 版本 >= 3.5,并且安装有C/C++编译器,可以使用pypi 包管理器进行安装。
$ pip install sentinelhub --upgrade
也可以通过clone 代码仓进行手动安装
$ python setup.py build
$ python setup.py install
3. 开发包特性
3.1 OGC web 服务
一些主要的功能与一个Sentinel Hub账号相关联:
- 使用Sentinel Hub帐户支持Web地图服务(WMS)和Web Coverage服务(WCS)请求;
- 支持标准和自定义多光谱图层,例如未处理的波段,真彩色图像或NDVI;
- 支持多时间请求;
- 支持云覆盖过滤;
- 支持不同的坐标参考系统;
- 支持以最常见的图像和数据格式读取和写入下载的数据到磁盘;
- 支持各种数据源:
- Sentinel-2 L1C
- Sentinel-2 L2A
- Sentinel-1,
- Landsat 8,
- MODIS,
- DEM。
3.2 AWS 数据下载
该软件包允许从AWS上的Sentinel-2下载Sentinel-2数据,并将数据重建为ESA .SAFE格式。
实施以下内容:
- 支持Sentinel-2 L1C和Sentinel-2 L2A数据;
- 支持新旧(即紧凑).SAFE格式;
- 仅支持下载整个产品或.SAFE结构图;
- 支持命令行条目;
- 可调整的线程下载,以及现有数据的可选重新下载(非默认);
- 需要S-2产品ID或产品的图块名称和日期。
- 如果是Sentinel-2 L2A数据,则需要AWS访问密钥。
4 从AWS上获取卫星数据示例
该示例说明如何从AWS S3存储桶上获取Sentinel-2影像和其他卫星数据。AWS上提供的数据与ESA提供的S-2数据完全相同。Sentinelhub包支持通过制定产品ID或者指定切片的形式获取数据。它可以将数据下载到与AWS相同的文件结构(S3),也可以将数据下载到ESA的.SAFE文件结构中。
4.1 配置信息
4.1.1 配置
主要配置AWS的凭据信息。开发包安装完后会有一个配置文件config.json。用户可以在终端命令行中输入如下命令查询配置参数:
$ sentinelhub.config --show
4.1.2 Sentinel Hub 功能配置
如果需要使用Sentinel Hub的服务,必须先配置instance_id参数。如果只是查询下载,则不需要配置该参数。
instance_id需要在Sentinel hub services上进行注册申请。通过以下命令设置Sentinel Hub instance ID:
$ sentinelhub.config --instance_id <your instance id>
通过这样做,包将使用这个实例ID与Sentinel Hub进行交互,除非您有意在代码中指定一个不同的实例ID。
4.1.3 亚马逊S3功能配置
开发包从亚马逊S3存储桶中下载Sentinel-2 L1C和L2A数据。这些数据存在请求付费的存储桶中,因此在使用S3相关功能时需要AWS认证。通过在命令行中的以下命令进行aws_access_key_id
和aws_secret_access_key
参数的设置。
$ sentinelhub.config --aws_access_key_id <your access key> --aws_secret_access_key <your secret access key>
如果没有设置认证,则包将自动尝试使用本地存储的AWS认证(如果这些认证是根据AWS配置说明配置的)。任何其他配置参数(例如区域)也将以同样的方式收集。
AWS凭据还必须具有正确的权限才能从S3 bucket下载数据。可以在AWS IAM控制台中配置。配置足够权限的方法有很多,其中之一就是将其设置为AmazonS3ReadOnlyAccess.
重要提示:因为S3中的卫星数据包含在请求者付费桶中,Amazon将根据Amazon S3的价格向用户收取下载费用。在这种情况下,用户需要根据下载的数据量和请求数付费。sentinelhub包最多会为每个下载的文件发出一个GET请求。文件的元数据。xml, tileInfo。json和productInfo。json将从Sentinel Hub公共存储库免费获得。
4.2 查询可用的数据
AWS的Sentinel-2数据存档包含两个存储桶,一个包含L1C,另一个包含L2A数据。有三种方法可以搜索存档以查找特定的切片和影像产品:
4.2.1 使用aws_cli工具(亚马逊 AWS 命令行接口工具)手动检索
终端中输入以下命令:
aws s3 ls s3://sentinel-s2-l2a/tiles/33/U/WR/ --request-payer
注意,aws_cli工具需要事先安装,并且配置好aws认证信息。具体安装和配置可参考aws_cli安装配置
4.2.2 使用https://roda.sentinel-hub.com//上提供的服务进行手动搜索
直接通过浏览器编辑url并打开,不需要身份验证,例如:下载Sentinel-2 2017年1月14日L1C级产品瓦片1 C CV数据产品。
https://roda.sentinel-hub.com/sentinel-s2-l1c/tiles/1/C/CV/2017/1/14/0/
该方法返回一个包含有数据下载信息的文件
4.2.3 使用Sentinel Hub Web Feature
Service(WFS)按位置和时间间隔自动检索(注意:对于此功能,必须根据配置段落配置Sentinel Hub实例ID 。该实例ID需要在Sentinel hub上进行注册。):
from sentinelhub import WebFeatureService, BBox, CRS, DataSource
INSTANCE_ID = '' # In case you put instance ID into cofniguration file you can leave this unchanged
search_bbox = BBox(bbox=[46.16, -16.15, 46.51, -15.58], crs=CRS.WGS84)
search_time_interval = ('2017-12-01T00:00:00', '2017-12-15T23:59:59')
wfs_iterator = WebFeatureService(search_bbox, search_time_interval,
data_source=DataSource.SENTINEL2_L1C,
maxcc=1.0, instance_id=INSTANCE_ID)
for tile_info in wfs_iterator:
print(tile_info)
{'properties':{'path':'s3:// sentinel-s2-l1c / tiles / 38 / L / PH / 2017/12/15/0','time':'07:12:03', 'id':'S2B_OPER_MSI_L1C_TL_MTI__20171215T085654_A004050_T38LPH_N02.06','cloudCoverPercentage':28.27,'mbr':'600000,8190220 709800,8300020','date':'2017-12-15','crs':'EPSG:32738' },'type':'Feature','geometry':{'type':'MultiPolygon','crs':{'properties':{'name':'urn:ogc:def:crs:EPSG :: 4326 '},'type':'name'},'coordinates':[[[[45.931783967,-15.374656929],[46.954538568,-15.368029755],[46.964123606,-16.360077552],[45.936356187,-16.367155102],[45.931783967, -15.374656929]]]]}}
{'properties':{'path':'s3:// sentinel-s2-l1c / tiles / 38 / L / PH / 2017/12/10/'','time':'07:12:10', 'id':'S2A_OPER_MSI_L1C_TL_SGS__20171210T103113_A012887_T38LPH_N02.06','cloudCoverPercentage':94.02,'mbr':'600000,8190220 709800,8300020','date':'2017-12-10','crs':'EPSG:32738' },'type':'Feature','geometry':{'type':'MultiPolygon','crs':{'properties':{'name':'urn:ogc:def:crs:EPSG :: 4326 '},'type':'name'},'coordinates':[[[[45.931783967,-15.374656929],[46.954538568,-15.368029755],[46.964123606,-16.360077552],[45.936356187,-16.367155102],[45.931783967, -15.374656929]]]]}}
{'properties':{'path':'s3:// sentinel-s2-l1c / tiles / 38 / L / PH / 2017/12/5/0','time':'07:13:30', 'id':'S2B_OPER_MSI_L1C_TL_SGS__20171205T102636_A003907_T38LPH_N02.06','cloudCoverPercentage':91.74,'mbr':'600000,8190220 709800,8300020','date':'2017-12-05','crs':'EPSG:32738' }&#x