
使用Python可视化卫星云图nc文件
简单提取卫星云图.nc数据并借助matplotlib进行简单可视化
卫星云图文件来源及准备
卫星云图nc文件来源于Nasa Worldview VIIRS/JPSS2 Imagery Resolution 6-Min L1B Swath 375m NRT作为示例(需要注册账号下载卫星云图文件)
Python 模块安装
需要使用
1. xarray 模块读取nc文件
pip install xarray
2. netCDF4 模块中Dataset读取nc文件
pip install netCDF4
3. Numpy 模块过滤数据
pip install numpy
4. Matplotlib 绘制卫星云图
pip install matplotlib
*xarray 和 netCDF4都可以读取nc文件,但nc文件可能不完全兼容xarray,所以仍然需要使用netCDF4
可视化
import xarray as xr
import matplotlib.pyplot as plt
import numpy as np
from netCDF4 import Dataset
读取.nc文件
file_path = "your nc file path" # 换成你的.nc文件路径
ds = Dataset(file_path, "r") # 使用netCDF4读取.nc文件
print(ds)
读取后终端内文件信息
<class 'netCDF4._netCDF4.Dataset'>
root group (NETCDF4 data model, file format HDF5):
date_created: 2024-11-19T21:01:20Z
ProductionTime: 2024-11-19T21:01:20Z
title: VIIRS I-band Reflected Solar Band and Thermal Emissive Band Data
instrument: VIIRS
processing_version: v3.0.0
Conventions: CF-1.6
institution: NASA Goddard Space Flight Center, VIIRS L1 Processing Group
license: http://science.nasa.gov/earth-science/earth-science-data/data-information-policy/
naming_authority: gov.nasa.gsfc.VIIRSland
keywords_vocabulary: NASA Global Change Master Directory (GCMD) Science Keywords
standard_name_vocabulary:
creator_name: VIIRS L1 Processing Group
creator_email: modis-ops@lists.nasa.gov
creator_url: https://ladsweb.modaps.eosdis.nasa.gov
project: VIIRS L1 Project
publisher_name: LAADS
publisher_url: https://ladsweb.modaps.eosdis.nasa.gov
publisher_email: modis-ops@lists.nasa.gov
processing_level: L1B
cdm_data_type: swath
platform: JPSS-2
orbit_number: 10508
history: LSIPS_calibrate_viirs.exe PGE502.1.AS5200.JP2VIIRS.2024-325T0024.NA.2024-325T020035.141809515.pcf
source: VJ201_NRT.A2024325.0024.002.2024325014931.nc,VJ201_NRT.A2024325.0018.002.2024325014928.nc,VJ201_NRT.A2024325.0030.002.2024325014926.nc,VIIRS_J2_CAL_STATIC_LUT_80K_v3.2.3.20_20240801_vcst.nc,VIIRS_J2_CAL_RSB_DYNAMIC_LUT_20221129_20260101_v3.2.3.20_20240801_vcst.nc,VIIRS_J2_CAL_DNB_DYNAMIC_LUT_20221123_20260101_v3.2.3.20_20240801_vcst.nc,VIIRS_J2_CAL_STRAYLIGHT_DYNAMIC_LUT_20221208_20250129_v3.2.3.20_20240801_vcst.nc,VIIRS_J2_CMN_LUT_v1.1.0.0_20220930_vcst.nc,off_USNO-PolarWander-UT1-ANC_Ser7_USNO_000f_20241108_202411080000Z_20241108000101Z_ee20241115120000Z_np.ascii
time_coverage_start: 2024-11-20T00:24:00.000Z
time_coverage_end: 2024-11-20T00:30:00.000Z
PGE_StartTime: 2024-11-20 00:24:00.000
PGE_EndTime: 2024-11-20 00:30:00.000
StartTime: 2024-11-20 00:24:00.000
EndTime: 2024-11-20 00:30:00.000
PGE_Name: PGE502
VersionId: 002
startDirection: Ascending
endDirection: Ascending
DayNightFlag: Day
format_version: 2
instrument_number: 4
number_of_filled_scans: 201
PGEVersion: 3.0.32
product_name: VJ202IMG_NRT.A2024325.0024.002.2024325020107.nc
LocalGranuleID: VJ202IMG_NRT.A2024325.0024.002.2024325020107.nc
identifier_product_doi_authority: https://doi.org
identifier_product_doi: 10.5067/VIIRS/VJ202IMG_NRT.002
GRingPointLatitude: [54.4296 62.1269 41.3723 36.196 ]
GRingPointLongitude: [ 155.645 -153.296 -154.075 171.683]
GRingPointSequenceNo: [1 2 3 4]
SouthBoundingCoordinate: 36.19602
NorthBoundingCoordinate: 62.342216
EastBoundingCoordinate: -153.29634
WestBoundingCoordinate: 155.64508
RangeEndingTime: 00:30:00.000000
RangeBeginningDate: 2024-11-20
ProcessingCenter: MODAPS-NASA
RangeEndingDate: 2024-11-20
AlgorithmVersion: NPP_PR02 v3.0.0
AlgorithmType: SCI
ProcessingEnvironment: Linux minion20327 5.4.0-1109-fips #119-Ubuntu SMP Wed Oct 16 13:54:59 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
RangeBeginningTime: 00:24:00.000000
SatelliteInstrument: JP2VIIRS
InputPointer: VJ201_NRT.A2024325.0024.002.2024325014931.nc,VJ201_NRT.A2024325.0018.002.2024325014928.nc,VJ201_NRT.A2024325.0030.002.2024325014926.nc,off_USNO-PolarWander-UT1-ANC_Ser7_USNO_000f_20241108_202411080000Z_20241108000101Z_ee20241115120000Z_np.ascii,VIIRS_J2_CAL_STATIC_LUT_80K_v3.2.3.20_20240801_vcst.nc,VIIRS_J2_CMN_LUT_v1.1.0.0_20220930_vcst.nc,VIIRS_J2_CAL_RSB_DYNAMIC_LUT_20221129_20260101_v3.2.3.20_20240801_vcst.nc,VIIRS_J2_CAL_DNB_DYNAMIC_LUT_20221123_20260101_v3.2.3.20_20240801_vcst.nc,VIIRS_J2_CAL_STRAYLIGHT_DYNAMIC_LUT_20221208_20250129_v3.2.3.20_20240801_vcst.nc
ShortName: VJ202IMG_NRT
LongName: VIIRS/JPSS2 Imagery Resolution 6-Min L1B Swath SDR 375m NRT
dimensions(sizes): number_of_scans(201), number_of_lines(6432), number_of_pixels(6400), number_of_LUT_values(65536)
variables(dimensions):
groups: scan_line_attributes, observation_data
最后一行中的“observation_data"是需要读取的卫星云图数据
variables(dimensions):
groups: scan_line_attributes, observation_data
此时可以通过xarray读取“observation_data"
ds = xr.open_dataset(file_path, group = "observation_data")
print('-------------------------------------------------observation_data-------------------------------------------------')
print(ds)
运行后终端结果如下
-------------------------------------------------observation_data-------------------------------------------------
<xarray.Dataset> Size: 2GB
Dimensions: (number_of_lines: 6432,
number_of_pixels: 6400,
number_of_LUT_values: 65536)
Dimensions without coordinates: number_of_lines, number_of_pixels,
number_of_LUT_values
Data variables: (12/17)
I01 (number_of_lines, number_of_pixels) float32 165MB ...
I01_quality_flags (number_of_lines, number_of_pixels) uint16 82MB ...
I01_uncert_index (number_of_lines, number_of_pixels) float32 165MB ...
I02 (number_of_lines, number_of_pixels) float32 165MB ...
I02_quality_flags (number_of_lines, number_of_pixels) uint16 82MB ...
I02_uncert_index (number_of_lines, number_of_pixels) float32 165MB ...
... ...
I04_brightness_temperature_lut (number_of_LUT_values) float32 262kB ...
I04_uncert_index (number_of_lines, number_of_pixels) float32 165MB ...
I05 (number_of_lines, number_of_pixels) float32 165MB ...
I05_quality_flags (number_of_lines, number_of_pixels) uint16 82MB ...
I05_brightness_temperature_lut (number_of_LUT_values) float32 262kB ...
I05_uncert_index (number_of_lines, number_of_pixels) float32 165MB ...
选择波段
文件内容提供了5个波段(I01~I05),根据需要选择
1. I01 - 蓝光波段 (I01)
• 波段范围:约 0.412 µm 到 0.442 µm
• 用途:主要用于大气中的气溶胶和水蒸气的监测。此波段的蓝光部分对大气中的水蒸气含量、污染物、以及海洋表面反射特性非常敏感。
• 应用:用于大气层中的气溶胶检测、海洋表面反射率的估算等。
2. I02 - 绿光波段 (I02)
• 波段范围:约 0.443 µm 到 0.485 µm
• 用途:绿色波段对植被监测非常有效,因为绿色波段反射率与植物健康状况和植被种类密切相关。也常用于海洋浮游植物的监测。
• 应用:主要用于植被健康监测、海洋浮游植物浓度估算以及大气中的气溶胶探测。
3. I03 - 红光波段 (I03)
• 波段范围:约 0.502 µm 到 0.532 µm
• 用途:此波段通常用于水体的监测。红光波段反射率对水体和土地表面的监测非常敏感,可用于分析水质、农业作物的健康状况、森林火灾后的土壤变化等。
• 应用:水质监测、农作物健康评估、火灾监测、冰雪覆盖区域的分析等。
4. I04 - 近红外波段 (I04)
• 波段范围:约 0.545 µm 到 0.585 µm
• 用途:近红外波段常用于测量植物的生长状态和土壤湿度。此波段对植被生物量的反射很敏感,因此是研究植被覆盖和农业区域的关键波段。
• 应用:主要用于植被健康、森林覆盖和土壤湿度的估算。
5. I05 - 近红外波段 (I05)
• 波段范围:约 0.602 µm 到 0.642 µm
• 用途:此波段同样用于大气、植被和水体监测。I05 波段对于评估大气中水蒸气含量、土壤湿度、植被覆盖等方面具有较强的敏感性。
• 应用:用于水蒸气监测、植被健康评估、土壤湿度检测、以及大气成分分析。
这里选用I01波段作为演示示例
band = I01
band_data = ds[band]
过滤高质量数据
在observation_data读取内容中
I01_quality_flags
指的是在遥感数据中的质量标记(quality flag),是一组附加信息,用于描述数据的质量或有效性。它通常以整数或位(bit)的形式存储,每一位或每个值表示特定的质量信息。质量标记可以帮助用户识别哪些像素或数据点可能存在问题,比如被云遮挡、数据缺失、或数据不可靠等。
质量标志位的位数和含义可能因不同的波段、传感器或产品而不同。通常,质量标志位 band_quality_flags 是一个整数,其中每一位(bit)代表某种特定的质量标记,常见的标记可能包括:
• 0:表示该质量控制项通过,数据是好的。
• 1:表示该质量控制项未通过,数据存在问题。
这里选用0作为高质量数据
band_quality_flags = ds[band + "_quality_flags"]
good_quality_mask = (band_quality_flags == 0)
filtered_band_data = np.where(good_quality_mask, band_data, np.nan) #过滤高质量数据
使用np.where过滤高质量数据,对于低质量数据使用np.nan将不满足质量条件的数据替换为 NaN。
使用matplotlib进行可视化
plt.figure(figsize=(20, 8)) # 设置绘图窗口大小
plt.imshow(filtered_band_data, cmap="gray") # 绘图且配色方案为灰度
plt.colorbar(label="Reflectance") # 绘制标签
plt.title(band + " Band with Quality Filter") # 绘制标题
plt.show()
运行结果如下
更多推荐
所有评论(0)