不規則なグリッド (ランバート コニカル) 上のデータを通常のグリッドに再グリッド化する必要があります。pyresample が私の最善の策だと思います。実際、私の元の緯度、経度は1Dではありません(basemap.interpまたはscipy.interpolate.griddataを使用するために必要なようです)。
このSOの回答は役に立ちました。ただし、空の補間データが得られます。これは、影響範囲の選択と、データがラップされている (??) ことに関係していると思います。
これは私のコードです:
import numpy as np
from matplotlib import pyplot as plt
import netCDF4
%matplotlib inline
url = "http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/NARR/Dailies/monolevel/hlcy.2009.nc"
SRHtemp = netCDF4.Dataset(url).variables['hlcy'][0,::]
Y_n = netCDF4.Dataset(url).variables['y'][:]
X_n = netCDF4.Dataset(url).variables['x'][:]
T_n = netCDF4.Dataset(url).variables['time'][:]
lat_n = netCDF4.Dataset(url).variables['lat'][:]
lon_n = netCDF4.Dataset(url).variables['lon'][:]
lat_n と lon_n は不規則で、緯度と経度は投影された座標 x、y に対応します。
lon_n のやり方のため、次のように追加しました。
lon_n[lon_n<0] = lon_n[lon_n<0]+360
私がそれらをプロットすると、見栄えがよく、問題ないようになります。
次に、通常の座標の新しいセットを作成します。
XI = np.arange(148,360)
YI = np.arange(0,87)
XI, YI = np.meshgrid(XI,YI)
上記の回答に続いて、次のコードを書きました。
pyresample.geometry から SwathDefinition をインポート pyresample.kd_tree から resample_nearest をインポート
def_a = SwathDefinition(lons=XI, lats=YI)
def_b = SwathDefinition(lons=lon_n, lats=lat_n)
interp_dat = resample_nearest(def_b,SRHtemp,def_a,radius_of_influence = 70000,fill_value = -9.96921e+36)
データの解像度は約 30km なので、70km と入力しました。入力した fill_value はデータから取得したものですが、もちろんゼロまたは nan を入力することもできます。
ただし、空の配列を取得します。
私は何を間違っていますか?また、別の方法がある場合は、それを知りたいと思っています。Pyresample のドキュメントは少し薄いので、もう少し助けが必要です。
別の griddata 関数を使用することを提案するこの回答を見つけました:
import matplotlib.mlab as ml
resampled_data = ml.griddata(lon_n.ravel(), lat_n.ravel(),SRHtemp.ravel(),XI,YI,interp = "linear")
それは大丈夫だと思われます:
しかし、非常に強力なように見えるので、pyresample についてもっと理解したいと思います。