按日将区域站数据插值到格点

本文介绍了一个Python函数`interp`,用于将气象数据(如降水量)在给定经纬度上进行网格插值,生成不同分辨率(30m,60m,90m)的文件,同时包含了网格坐标点的生成。脚本通过读取CSV数据并按日期处理,适用于气候数据分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding: utf-8 -*-
"""
@Features: 
@Author:   xx
@Date:    1/17/2024
"""
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy.interpolate import griddata

plt.rcParams['font.family'] = 'Times New Roman, SimSun'  # 设置字体族,中文为SimSun,英文为Times New Roman
plt.rcParams['mathtext.fontset'] = 'stix'  # 设置数学公式字体为stix


def interp(x, y, z, step):
    # x, y = df['经度'], df['纬度']
    xi = np.arange(115.4, 116.6, step)
    yi = np.arange(28.15, 29.2, step)
    olon, olat = np.meshgrid(xi, yi)
    lon = np.array(x).reshape(-1, 1)
    lat = np.array(y).reshape(-1, 1)
    points = np.concatenate([lon, lat], axis=1)
    grid_data = griddata(points, z, (olon, olat))
    return grid_data


def grid_txt(step):
    xi = np.arange(115.4, 116.6, step)
    yi = np.arange(28.15, 29.2, step)
    olon, olat = np.meshgrid(xi, yi)
    return olon, olat


if __name__ == '__main__':
    data = pd.read_csv(r'data0.csv')
    date = pd.date_range(start='20170215', end='20231231')
    for oneDay in date:
        print(oneDay)
        year, mon, day = oneDay.year, oneDay.month, oneDay.day
        dataTemp = data[(data.Year == year) & (data.Mon == mon) & (data.Day == day)]
        if len(dataTemp) < 10:
            continue
        else:
            result30m = interp(dataTemp.Lon, dataTemp.Lat, dataTemp.PRE_Time_2020, 30 * 0.00001141)
            np.savetxt(r'G:\2\\' + str(oneDay)[:10] + '-30m.txt', result30m)
            result60m = interp(dataTemp.Lon, dataTemp.Lat, dataTemp.PRE_Time_2020, 60 * 0.00001141)
            np.savetxt(r'G:\2\\' + str(oneDay)[:10] + '-60m.txt', result60m)
            result90m = interp(dataTemp.Lon, dataTemp.Lat, dataTemp.PRE_Time_2020, 90 * 0.00001141)
            np.savetxt(r'G:\2\\' + str(oneDay)[:10] + '-90m.txt', result90m)
    lonTxt30, latTxt30 = grid_txt(30 * 0.00001141)
    np.savetxt(r'G:\2\\' + 'lon30m.txt', lonTxt30)
    np.savetxt(r'G:\2\\' + 'lat30m.txt', latTxt30)
    lonTxt60, latTxt60 = grid_txt(60 * 0.00001141)
    np.savetxt(r'G:\2\\' + 'lon60m.txt', lonTxt60)
    np.savetxt(r'G:\2\\' + 'lat60m.txt', latTxt60)
    lonTxt90, latTxt90 = grid_txt(90 * 0.00001141)
    np.savetxt(r'G:\2\\' + 'lon90m.txt', lonTxt90)
    np.savetxt(r'G:\2\\' + 'lat90m.txt', latTxt90)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值