【Python】json格式的气象数据转成指定的nc格式

有个朋友需要把json格式的气象风场数据转成指定的nc格式,尝试了一下,代码如下。

import json
import xarray as xr
import numpy as np

with open('2023010400.json', 'r') as f:
    data = json.load(f)
    
#生成经纬度网格
nx = int(data['header']['nx'])
ny = int(data['header']['ny'])
lat = np.linspace(data['header']['la1'], data['header']['la2'], ny)
lon = np.linspace(data['header']['lo1'], data['header']['lo2'], nx)
#lat_2d,lon_2d = np.meshgrid(lat,lon)
nt = 1 #refTime中只有一个时间

# 将字符串转换为datetime64类型
dt = np.datetime64(data['header']['refTime'])

# 将datetime64类型转换为数组
time = np.array([dt])

#调整数据shape
U = np.array(data['dataU']).reshape((nt,ny,nx))
V = np.array(data['dataV']).reshape((nt,ny,nx))

#将数据从json转换成nc格式
ds = xr.Dataset(
    data_vars={
        'U10': (('time', 'latitude', 'longitude'), U),
        'V10': (('time', 'latitude', 'longitude'), V),
    },
    coords={
        'time': time,
        'latitude': lat,
        'longitude': lon
    }
)


#创建插值后的网格
new_lon = xr.DataArray(
    data=np.linspace(ds.longitude.min(), ds.longitude.max(), int((ds.longitude.size - 1) * 0.5 / 0.2) + 1),
    dims=('longitude',)
)
new_lat = xr.DataArray(
    data=np.linspace(ds.latitude.min(), ds.latitude.max(), int((ds.latitude.size - 1) * 0.5 / 0.2) + 1),
    dims=('latitude',)
)

#插值
ds_interp = ds.interp(latitude=new_lat, longitude=new_lon)

# 截取经度和纬度范围
ds_target = ds_interp.sel(longitude=slice(104.8, 135.2), latitude=slice(10, 40))
ds_target.attrs['made'] = 'zhxia-2023/2/21'

# 保存截取后的数据为netCDF文件
ds_target.to_netcdf('target_data.nc')
 
 

cfd646ed9d6ff0f25f5026192abeea2b.jpeg

 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值