我们需要的是获取一些经纬度点的12个月降雨量,因此可以使用Python的
netCDF4
进行读取,然后进行处理,代码如下:
import numpy as np
import netCDF4 as nc
class WaterReader:
def __init__(self, nc_path):
self.src = nc.Dataset(nc_path)
self.data = np.asarray(self.src["pre"])
self.rang = self._get_range()
self.lon_step = (self.rang[1] - self.rang[0]) / len(self.src["lon"])
self.lat_step = (self.rang[3] - self.rang[2]) / len(self.src["lat"])
def _get_range(self):
return (
np.min(self.src["lon"]),
np.max(self.src["lon"]),
np.min(self.src["lat"]),
np.max(self.src["lat"]))
def _get_rowcol_by_lonlat(self, lon, lat):
lon_min, lon_max, lat_min, lat_max = self.rang
if lon < lon_min or lon > lon_max or lat < lat_min or lat > lat_max:
raise ValueError("lon or lat is out of range")
lon_index = int((lon - lon_min) / self.lon_step)
lat_index = int((lat_max - lat) / self.lat_step)
return lon_index, lat_index
def get_water(self, lon, lat):
lon_index, lat_index = self._get_rowcol_by_lonlat(lon, lat)
return self.data[:, lat_index, lon_index]
if __name__ == "__main__":
wr = WaterReader("pre_2021.nc")
print(wr.get_water(104.4214641, 33.731619))
其中关键在于通过_get_rowcol_by_lonlat
将输入的经纬度对应找到图上最近的像元,然后通过该像元的行列号找到降水量。这里还可以插找距离最近的四个像元,通过线性插值的方法得到该点的12个月降水量。
如果需要批量处理的话,写成循环就好了。
将输入的经纬度对应找到图上最近的像元,然后通过该像元的行列号找到降水量。这里还可以插找距离最近的四个像元,通过线性插值的方法得到该点的12个月降水量。是对应的降水数据块,形状为[12, H, W],代表某个像素12个月的降雨量。我们需要的是获取一些经纬度点的12个月降雨量,因此可以使用Python的。是[H, W]形状的矩阵,每一个像素代表该像素对应坐标的经纬度;如果需要批量处理的话,写成循环就好了。有12个,分别为1-12月;
数据来自 2010年中国地面气候资料日值数据集(V3.0) 中国气象数据网
数据集实体文件名称:
数据文件命名由数据集代码(SURF_CLI_CHN_MUL_DAY)、要素代码(XXX)、项目代码(XXXXX)、年份标识(YYYY)和月份标识(MM)组成。其中,SURF表示地面气象资料,CLI表示地面气候资料,CHN表示中国,MUL表示多要素,DAY表示日值数据。
XXX-XXXXX说...
Python雷达数据处理
什么是派拉德?
Pyrad是由MeteoSwiss和MeteoFrance开发的实时数据处理框架。该框架旨在离线和实时处理和可视化来自单个气象雷达以及笛卡尔合成产品的极地数据。它是用Python语言编写的。该框架受版本控制,并且基于doc字符串生成自动文档。它能够从瑞士的所有天气雷达中获取数据,即运行中的MeteoSwiss C波段rad4alp雷达网络,MeteoSwiss X波段DX50雷达和EPFL MXPol雷达以及OPERA文件格式的雷达数据。此外,它可以提取C / FRadial和NEXRAD 2级文件。
处理流程由3个简单的配置文件控制。可以执行多个级别的处理。在每个级别上,都会创建新的数据集(例如,衰减校正的反射率),这些数据集可以存储在文件中和/或在下一个处理级别中使用(例如,从校正后的反射率创建降雨率数据集)。可以从每个数据集生成多个
#在python3上运行
from elasticsearch import Elasticsearch
from urllib3.connectionpool import xrange
def get_page_data(result):
for hit in result['hits']['hits']:
print(hit)
if __name__=='__main__':
es_host = "0.0.0.0"
port = 9200
timeout = 15000
index = "gather
# 绘制降水量和流量的折线图
plt.plot(data['日期'], data['降水量'], label='降水量')
plt.plot(data['日期'], data['流量'], label='流量')
# 添加图例和标签
plt.legend()
plt.xlabel('日期')
plt.ylabel('降水量/流量')
# 显示图像
plt.show()
希望能帮到您!