使用GDAL读取Sentinel数据

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: GDAL 2.1已经原生支持对于Sentinel数据的读取,我这里使用Sentinel-2光学卫星数据给出使用GDAL工具对其进行读取的方法。这里我们要大概知道Sentinel数据的组织。下载下来的Sentinel数据是一个ZIP压缩包,里面包含了JPEG2000格式的影像数据以及一些XML格式的元数据文件。GDAL将Sentinel数据看做一个数据集(概念上类似HDF格式的数据集),里面包含了很多子数据文件。所以,对于Sentinel数据的读取就和对于HDF数据的读取是相同的啦。

使用GDAL读取Sentinel数据

GDAL 2.1已经原生支持对于Sentinel数据的读取,我这里使用Sentinel-2光学卫星数据给出使用GDAL工具对其进行读取的方法。

这里我们要大概知道Sentinel数据的组织。下载下来的Sentinel数据是一个ZIP压缩包,里面包含了JPEG2000格式的影像数据以及一些XML格式的元数据文件。

GDAL将Sentinel数据看做一个数据集(概念上类似HDF格式的数据集),里面包含了很多子数据文件。所以,对于Sentinel数据的读取就和对于HDF数据的读取是相同的啦。

对于HDF或者NetCDF格式数据的读取参考我的博文:读取HDF或者NetCDF格式的栅格数据

使用GDAL命令行读取Sentinel数据的元数据信息

直接使用gdalinfo [文件名]可以查看Sentinel文件的元信息,如下图所示:

[外链图片转存中...(img-6pmZXhFt-1694159802233)]

从上面的图中我们可以看到所有的Subdatasets的文件全名,这样我们可以继续使用gdalinfo [子数据集全路径]的方式查看具体的子数据集的元数据信息

下图显示的数据子集中包含四个波段的数据(红,绿,蓝,近红外)

[外链图片转存中...(img-8HQ2DbPN-1694159802234)]

使用GDAL命令行工具将Sentinel数据转为GeoTIFF格式

转换是针对具体的子数据集而言的,所以使用gdal_translate [sentinel subdataset full name] [output filename]命令进行

下面的例子将包含红绿蓝近红外波段的数据子集转为GeoTIFF影像

gdal_translate SENTINEL2_L1C:/vsizip/S2A_MSIL1C_20180504T173911_N0206_R098_T13TGF_20180504T212111.zip/S2A_MSIL1C_20180504T173911_N0206_R098_T13TGF_20180504T212111.SAFE/MTD_MSIL1C.xml:10m:EPSG_32613 B2-3-4-8.tif

使用Python脚本读取Sentinel数据

from osgeo import gdal

import os
os.environ['CPL_ZIP_ENCODING'] = 'UTF-8'

filename = ('/Users/tanzhenyu/Desktop/'
            'S2A_MSIL1C_20180504T173911_N0206_R098_T13TGF_20180504T212111.zip')
# 打开栅格数据集
root_ds = gdal.Open(filename)
# 返回结果是一个list,list中的每个元素是一个tuple,每个tuple中包含了对数据集的路径,元数据等的描述信息
# tuple中的第一个元素描述的是数据子集的全路径
ds_list = root_ds.GetSubDatasets()

visual_ds = gdal.Open(ds_list[0][0])  # 取出第12个数据子集(MODIS反射率产品的第一个波段)
visual_arr = visual_ds.ReadAsArray()  # 将数据集中的数据转为ndarray
del visual_arr

# 获得栅格数据的一些重要信息
print(f'打开数据为:{ds_list[0][1]}')
print(f'投影信息:{visual_ds.GetProjection()}')
print(f'栅格波段数:{visual_ds.RasterCount}')
print(f'栅格列数(宽度):{visual_ds.RasterXSize}')
print(f'栅格行数(高度):{visual_ds.RasterYSize}')

程序输出如下:

打开数据为:Bands B2, B3, B4, B8 with 10m resolution, UTM 13N
投影信息:PROJCS["WGS 84 / UTM zone 13N",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-105],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","32613"]]
栅格波段数:4
栅格列数(宽度):10980
栅格行数(高度):10980
目录
相关文章
|
6天前
|
编解码 算法 定位技术
GEE时序——利用sentinel-2(哨兵-2)数据进行地表物候学分析(时间序列平滑法估算和非平滑算法代码)
GEE时序——利用sentinel-2(哨兵-2)数据进行地表物候学分析(时间序列平滑法估算和非平滑算法代码)
107 3
|
存储 前端开发 Nacos
Sentinel 数据持久化到 Nacos
Sentinel 规则配置,一旦我们重启服务过后,所有的规则都会消失。我们可以通过 Zookeeper , Applo , Nacos 等配置中心将这些规则配置存储起来,让服务重启或者启动多节点的时候可以共享配置数据。
948 0
Sentinel 数据持久化到 Nacos
|
数据采集 ice Sentinel
Google Earth Engine(GEE)——sentinel2数据介绍
Google Earth Engine(GEE)——sentinel2数据介绍
679 0
Google Earth Engine(GEE)——sentinel2数据介绍
|
6天前
|
Java 测试技术 Nacos
|
10月前
|
传感器 编解码 算法
Sentinel-1的GRD和SLC数据的区别和联系
Sentinel-1的GRD和SLC数据的区别和联系
567 0
|
8月前
|
资源调度 Java API
使用SNAP JAVA API处理Sentinel-1数据
SNAP软件使用Java语言开发,提供了Python接口snappy,官方教程中也多以Python接口进行示范。但是我在使用Python接口过程中,发现并不是很好用,你必须要同时懂Java语言才能很好地使用Python接口,在IDEA中使用Python接口的代码基本上没有提示,报错了也是Java的错误提示。而且,Java本来是运行在虚拟机上的语言,效率不高,再用Python包一层,更加降低了运行效率。
115 0
|
编解码 算法
PIE-engine 教程 ——sentinel-2影像数据去云分析(山西省为例)
PIE-engine 教程 ——sentinel-2影像数据去云分析(山西省为例)
590 0
PIE-engine 教程 ——sentinel-2影像数据去云分析(山西省为例)
Google Earth Engine(GEE)——sentinel-1数据中乌克兰附近数据缺失轨道36缺失
Google Earth Engine(GEE)——sentinel-1数据中乌克兰附近数据缺失轨道36缺失
115 0
Google Earth Engine(GEE)——sentinel-1数据中乌克兰附近数据缺失轨道36缺失
|
数据采集
GEE——sentinel-5p数据停止运行(S5P OFFL CH4停运)
GEE——sentinel-5p数据停止运行(S5P OFFL CH4停运)
109 0
GEE——sentinel-5p数据停止运行(S5P OFFL CH4停运)
Google Earth Engine(GEE)——利用sentinel-2数据
Google Earth Engine(GEE)——利用sentinel-2数据
365 0
Google Earth Engine(GEE)——利用sentinel-2数据