我有一个netCDF文件,其中有多个气旋位置(纬度、经度)和南半球特定时间的气温
我想要的是提取温度值在距离每个气旋位置中心10度(约1110公里)的半径范围内。其目的是确定温度值与每个气旋相关(假设距气旋中心的最大径向距离为10º),并仅用这些温度值绘制一张全球轮廓图
我在这里搜索了很多,但我只找到了适用于距离一个特定纬度中心的代码(例如:how to find values within a radius from a central position of latitude and longitude value)
我被困在如何将哈弗森公式同时应用于多个中心
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
d = xr.open_dataset('cyc_temp.nc')
lat = d['lat']
lon = d['lon']
cyc_pos = d['id'][:,:]
temp = d['temp'][:,:]
# Haversine formula
def haversine(lon1, lat1, lon2, lat2):
# convert decimal degrees to radians
lon1 = np.deg2rad(lon1)
lon2 = np.deg2rad(lon2)
lat1 = np.deg2rad(lat1)
lat2 = np.deg2rad(lat2)
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = np.sin(dlat/2)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2)**2
c = 2 * np.arcsin(np.sqrt(a))
r = 6371
return c * r
如果有人能帮助我,我会道歉的
这是一个有趣的问题;xarray的自动广播让这一切变得非常干净
我不确定旋风位置阵列是如何构造的,但我将假设它的结构如下(或者至少可以被操纵成这种形式):
换句话说,每行代表每个气旋的经度和纬度值
以这种方式定义
cyc_pos
,使用haversine
函数获得经纬度网格中每个点到每个气旋中心的距离相当简单,从那里获得所需的遮罩只需再多一行如果您需要特定风暴的遮罩,可以使用:
或者,如果你想为所有的风暴戴上面具,你可以使用:
相关问题 更多 >
编程相关推荐