前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GPM卫星数据下载、读取、绘图,一步到位——GPM-API库

GPM卫星数据下载、读取、绘图,一步到位——GPM-API库

作者头像
用户11172986
发布2024-09-24 18:38:20
1040
发布2024-09-24 18:38:20
举报
文章被收录于专栏:气python风雨

温馨提示

由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可

前言

项目目标

通过Python完成gpm卫星数据下载、读取与绘图

项目方法

在以下内容中,将详细介绍GPM-api库的使用

安装与导入库

代码语言:javascript
复制
!pip install gpm-api -i https://pypi.mirrors.ustc.edu.cn/simple/
代码语言:javascript
复制
import gpm
代码语言:javascript
复制
gpm.available_products(satellites="GPM")
代码语言:javascript
复制
['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之前,我们需要将以下信息保存到配置文件中:

  1. 1. 注册两个账户 第一个参考https://www.heywhale.com/mw/project/646b52629f707085adc80af3 第二个是PPS,地址为https://registration.pps.eosdis.nasa.gov/registration/
  2. 2. 配置目录

为了便于创建配置文件,您可以运行以下脚本:

代码语言:javascript
复制
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,
)
代码语言:javascript
复制
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!

下载

代码语言:javascript
复制
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,
)
代码语言:javascript
复制
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.





[]

或者像如下示例下载某一天或者某一个月的数据

代码语言:javascript
复制
# 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,
)

转为xarray格式

像这样打开单个数据

代码语言:javascript
复制
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)
代码语言:javascript
复制
'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

或者打开数据集

代码语言:javascript
复制
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)

简单可视化

代码语言:javascript
复制
# Plot a specific variable of the dataset
ds["precipRateNearSurface"].gpm.plot_map()
代码语言:javascript
复制
<cartopy.mpl.geocollection.GeoQuadMesh at 0x7fcb025d0ee0>
代码语言:javascript
复制
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)
代码语言:javascript
复制
Extent:  Extent(xmin=-171.99111060299998, xmax=-66.76465999999999, ymin=18.71619, ymax=71.5577635769)





Text(0.5, 1.0, '2A-DPR')
代码语言:javascript
复制
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)
代码语言:javascript
复制
<cartopy.mpl.geocollection.GeoQuadMesh at 0x7fcaebfeb5e0>

小结

利用该库可以便捷地进行GPM卫星数据的下载与简单可视化,难得的是能够转为xarray格式,这大大方便我们进行数据处理 参考链接: https://gpm-api.readthedocs.io/en/latest/03_quickstart.html https://github.com/ghiggi/gpm_api/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 温馨提示
  • 前言
  • 项目目标
  • 项目方法
  • 安装与导入库
  • 前期准备
  • 下载
  • 转为xarray格式
  • 简单可视化
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档