由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
通过Python完成gpm卫星数据下载、读取与绘图
在以下内容中,将详细介绍GPM-api库的使用
!pip install gpm-api -i https://pypi.mirrors.ustc.edu.cn/simple/
import gpm
gpm.available_products(satellites="GPM")
['1A-GMI',
'1B-GMI',
'1B-Ka',
'1B-Ku',
'1C-GMI',
'1C-GMI-R',
'2A-DPR',
'2A-ENV-DPR',
'2A-ENV-Ka',
'2A-ENV-Ku',
'2A-GMI',
'2A-GMI-CLIM',
'2A-GPM-SLH',
'2A-Ka',
'2A-Ku',
'2B-GPM-CORRA',
'2B-GPM-CSAT',
'2B-GPM-CSH']
在开始使用GPM-API之前,我们需要将以下信息保存到配置文件中:
为了便于创建配置文件,您可以运行以下脚本:
import gpm
username_pps = "<your PPS username>" # 小写的邮箱
password_pps = "<your PPS password>" # 小写的邮箱
username_earthdata = "<your EarthData username>" #邮箱
password_earthdata = "<your EarthData password>" #密码
base_dir = "<path/to/a/local/directory/>" # where to download all GPM data
gpm.define_configs(
username_pps=username_pps,
password_pps=password_pps,
username_earthdata=username_earthdata,
password_earthdata=password_earthdata,
base_dir=base_dir,
)
Saved .netrc, .urs_cookies, and .dodsrc to: /home/mw/
The GPM-API config file has been updated successfully!
成功了会有如下提示 Saved .netrc, .urs_cookies, and .dodsrc to: /home/mw/ The GPM-API config file has been updated successfully!
import gpm
import datetime
product = "2A-DPR"
product_type = 'RS'
version = 7
start_time = datetime.datetime(2020, 7, 22, 0, 1, 11)
end_time = datetime.datetime(2020, 7, 22, 0, 23, 5)
gpm.download(
product=product,
product_type=product_type,
version=version,
n_threads=2,
start_time=start_time,
end_time=end_time,
)
100%|██████████| 1/1 [01:12<00:00, 72.94s/it]
/opt/conda/lib/python3.9/site-packages/gpm/io/download.py:996: GPMDownloadWarning: 'No data found on PPS on date 2020-07-22 for product 2A-DPR'
status, available_version = _download_daily_data(
1 files has been download.
All the available GPM 2A-DPR product files are now on disk.
Integrity checking of GPM files has completed.
[]
或者像如下示例下载某一天或者某一个月的数据
# Download data over a specific day
gpm.download_daily_data(
year=2022,
month=1,
day=1,
product=product,
product_type=product_type,
version=version,
storage=storage,
)
# Download data over a specific month
download_monthly_data(
year=2022,
month=1,
product=product,
product_type=product_type,
version=version,
storage=storage,
)
像这样打开单个数据
import gpm
ds = gpm.open_granule('/home/mw/project/GPM/RS/V07/RADAR/2A-DPR/2020/07/21/2A.GPM.DPR.V9-20211125.20200721-S232107-E005341.036345.V07A.HDF5')
print(ds)
'scan_mode' has not been specified. Default to FS.
<xarray.Dataset> Size: 5GB
Dimensions: (cross_track: 49, along_track: 7936,
nfreqHI: 3, range: 176, nNode: 5,
nbinSZP: 7, radar_frequency: 2, nNUBF: 3,
method: 6, three: 3, foreBack: 2,
nearFar: 2, nsdew: 3, four: 4, nNP: 4,
XYZ: 3, DSD_params: 2)
Coordinates: (12/16)
sunLocalTime (cross_track, along_track) float32 2MB dask.array<chunksize=(49, 32), meta=np.ndarray>
height (cross_track, along_track, range) float32 274MB dask.array<chunksize=(49, 30, 176), meta=np.ndarray>
dataQuality (along_track, radar_frequency) float32 63kB dask.array<chunksize=(32, 2), meta=np.ndarray>
SCorientation (along_track) float32 32kB dask.array<chunksize=(32,), meta=np.ndarray>
lon (cross_track, along_track) float32 2MB 13.8...
lat (cross_track, along_track) float32 2MB -66....
... ...
gpm_along_track_id (along_track) int64 63kB ...
* range (range) int64 1kB 1 2 3 4 ... 173 174 175 176
gpm_range_id (range) int64 1kB ...
* radar_frequency (radar_frequency) <U2 16B 'Ku' 'Ka'
* DSD_params (DSD_params) <U2 16B 'Nw' 'Dm'
crsWGS84 int64 8B 0
Dimensions without coordinates: cross_track, along_track, nfreqHI, nNode,
nbinSZP, nNUBF, method, three, foreBack,
nearFar, nsdew, four, nNP, XYZ
Data variables: (12/139)
flagBB (cross_track, along_track) float64 3MB dask.array<chunksize=(49, 32), meta=np.ndarray>
binBBPeak (cross_track, along_track) float32 2MB dask.array<chunksize=(49, 32), meta=np.ndarray>
binBBTop (cross_track, along_track) float32 2MB dask.array<chunksize=(49, 32), meta=np.ndarray>
binDFRmMLBottom (cross_track, along_track) float32 2MB dask.array<chunksize=(49, 32), meta=np.ndarray>
binDFRmMLTop (cross_track, along_track) float32 2MB dask.array<chunksize=(49, 32), meta=np.ndarray>
binBBBottom (cross_track, along_track) float32 2MB dask.array<chunksize=(49, 32), meta=np.ndarray>
... ...
precipWaterIntegrated_Liquid (cross_track, along_track) float32 2MB dask.array<chunksize=(49, 32), meta=np.ndarray>
precipWaterIntegrated_Solid (cross_track, along_track) float32 2MB dask.array<chunksize=(49, 32), meta=np.ndarray>
precipWaterIntegrated (cross_track, along_track) float32 2MB dask.array<chunksize=(49, 32), meta=np.ndarray>
dBNw (cross_track, along_track, range) float32 274MB dask.array<chunksize=(49, 15, 176), meta=np.ndarray>
Dm (cross_track, along_track, range) float32 274MB dask.array<chunksize=(49, 15, 176), meta=np.ndarray>
Nw (cross_track, along_track, range) float32 274MB dask.array<chunksize=(49, 15, 176), meta=np.ndarray>
Attributes: (12/23)
FileName: 2A.GPM.DPR.V9-20211125.20200721-S232107-E005341.03...
EphemerisFileName:
AttitudeFileName:
TotalQualityCode: Good
DielectricFactorKa: 0.8989
DielectricFactorKu: 0.9255
... ...
DataFormatVersion: 7h
MetadataVersion: 7h
ProcessingMode: STD
ScanMode: FS
history: Created by ghiggi/gpm_api software on 2024-09-24 0...
gpm_api_product: 2A-DPR
或者打开数据集
import gpm
import datetime
product = "2A-DPR"
product_type = "RS"
version = 7
start_time = datetime.datetime(2020,7, 22, 0, 1, 11)
end_time = datetime.datetime(2020,7, 22, 0, 23, 5)
ds = gpm.open_dataset(product=product,
product_type=product_type,
version=version,
start_time=start_time,
end_time=end_time)
print(ds)
# Plot a specific variable of the dataset
ds["precipRateNearSurface"].gpm.plot_map()
<cartopy.mpl.geocollection.GeoQuadMesh at 0x7fcb025d0ee0>
from gpm.utils.geospatial import get_country_extent
title = ds.gpm.title(add_timestep=False)
extent = get_country_extent("United States")
print("Extent: ", extent)
da = ds["precipRateNearSurface"]
p = da.gpm.plot_map()
p.axes.set_extent(extent)
p.axes.set_title(label=title)
Extent: Extent(xmin=-171.99111060299998, xmax=-66.76465999999999, ymin=18.71619, ymax=71.5577635769)
Text(0.5, 1.0, '2A-DPR')
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from gpm.visualization.plot import plot_cartopy_background
# Define some figure options
dpi = 100
figsize = (12, 10)
# Examples of Cartopy projections
crs_proj = ccrs.InterruptedGoodeHomolosine()
crs_proj = ccrs.Mollweide()
crs_proj = ccrs.Robinson()
# Select a single timestep
da = ds["precipRateNearSurface"]
# Create the map
fig, ax = plt.subplots(subplot_kw={"projection": crs_proj}, figsize=figsize, dpi=dpi)
plot_cartopy_background(ax)
da.gpm.plot_map(ax=ax)
<cartopy.mpl.geocollection.GeoQuadMesh at 0x7fcaebfeb5e0>
利用该库可以便捷地进行GPM卫星数据的下载与简单可视化,难得的是能够转为xarray格式,这大大方便我们进行数据处理 参考链接: https://gpm-api.readthedocs.io/en/latest/03_quickstart.html https://github.com/ghiggi/gpm_api/