FY-3G双频单极化Ku波段一维相控阵降水测量雷达二级产品
FY-3G降水测量雷达的二级产品按照雷达以及轨道进行划分,分为Ku雷达升轨、Ku雷达降轨、Ka雷达升轨、Ka雷达降轨以及DPR升轨和DPR降轨。二级产品里包含了亮带检测、降水分类,三维滴谱廓线、三维降水率廓线以及三维等效雷达反射率因子廓线等。轨道产品未做投影处理,为原始轨道分辨率。
FY3G_PMR--_ORBA_L2_KuR_MLT_NUL_YYYYMMDD_HHmm_5000M_V0.HDF 升轨
FY3G_PMR--_ORBD_L2_KuR_MLT_NUL_YYYYMMDD_HHmm_5000M_V0.HDF 降轨
值得注意的是SLV反演数据集中使用的环境参数来自于ERA5再分析资料。
VER环境参数模块包含了:binZero 0°C距离库、 DegattenuationNP 非降水粒子衰减系数、piaNP 非降水粒子路径积分衰减、 sigmaZeroNPCorrected 非降水粒子衰减订正后的地表后向散射截面、heightZeroDeg 0°C层高度
估计地表衰减订正后的雷达反射率因子(zFactorCorrectedESurface,float32,维数:nscan×nray)单位为dBZ,有效值范围0到70。
地理信息数据集为每个波束分别计算了地球椭球表面(第一维)和地球椭球之上约 18km 高度(第二维)两个位置的瞬时视场中心的地球经纬度。level默认使用第二维18km高度层地理信息。
"""Test Reader for the FY-3G PMR L2"""
import os
import glob
import h5py
import numpy as np
from datetime import datetime
def autodecode(string, encoding="gbk"):
return string.decode(encoding) if isinstance(string, bytes) else string
class PMRReader(object):
"""The base class reading FY-3G PMR L2 data.
Args:
fname: PMR data path.
datafield: Scientific datasets field.
dataset: Scientific dataset.
level: The first(0) and second(1) dimensions respectively store the geolocation on the ground and at level of 18km above ground.
"""
def __init__(self, fname, datafield="SLV", dataset="zFactorCorrectedESurface", level=1):
self.file = h5py.File(fname, "r")
self.attrs = {k: autodecode(v) for k, v in self.file.attrs.items()}
self.datafield = datafield
self.dataset = dataset
self.level = level
try:
if self.attrs["Satellite Name"] == "FY-3G":
self._reader()
else:
raise Exception(f"Unable to decode data:\n{fname}")
except Exception as e:
raise e
def _reader(self):
lons, lats = self.file["Geo_Fields"]["Longitude"][:], self.file["Geo_Fields"]["Latitude"][:]
lons[lons==-9999.9] = np.nan
lats[lats==-9999.9] = np.nan
dataset = self.file[self.datafield][self.dataset]
data = dict()
data["lons"] = lons[:,:,self.level]
data["lats"] = lats[:,:,self.level]
data["dataset"] = dataset
self.data = data
def all_available_datasets(self, datafield="SLV"):
return list(self.file[datafield].keys())
def all_available_datafields(self):
return list(self.file.keys())
@property
def start_time(self):
start_time = self.attrs["Observing Beginning Date"] + "T" + self.attrs["Observing Beginning Time"] + "Z"
try:
return datetime.strptime(start_time, "%Y-%m-%dT%H:%M:%S.%fZ")
except ValueError:
return datetime.strptime(start_time, "%Y-%m-%dT%H:%M:%SZ")
@property
def end_time(self):
end_time = self.attrs["Observing Ending Date"] + "T" + self.attrs["Observing Ending Time"] + "Z"
try:
return datetime.strptime(end_time, "%Y-%m-%dT%H:%M:%S.%fZ")
except ValueError:
return datetime.strptime(end_time, "%Y-%m-%dT%H:%M:%SZ")
if __name__ == "__main__":
fname = "C:/Users/Administrator/Desktop/FY3G_PMR--_ORBA_L2_KuR_MLT_NUL_20240528_0026_5000M_V0.HDF"
io = PMRReader(fname, datafield="SLV", dataset="zFactorCorrectedESurface")
print(io.all_available_datasets())







Comments | NOTHING