1、Delaunay三角剖分
from scipy.spatial.qhull import Delaunay
from scipy.interpolate import LinearNDInterpolator, griddata
tri = Delaunay(np.asarray([orig_lon.ravel(), orig_lat.ravel()]).T)
interpolator = LinearNDInterpolator(tri, orig_val.ravel())
2、scipy.interpolate.LinearNDInterpolator线性插值
https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.LinearNDInterpolator.html
3、scipy.interpolate.griddata 3D插值
https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html#scipy.interpolate.griddata
4、scipy.interpolate.NearestNDInterpolator 最近点插值
5、经纬度插值经纬度
Rbf方法nan过多可能出问题
from scipy.interpolate import Rbf
olon, olat = np.meshgrid(lon2_1d, lat2_1d) #lon2_1d, lat2_1d原始经纬度,一维数组,data的经纬度
func = Rbf(olon.flatten(), olat.flatten(), data.flatten(), function='linear') #olon.flatten(), olat.flatten(), data.flatten() 都是一维数组,length必须相同
olon1, olat1 = np.meshgrid(lon1_1d, lat1_1d)
dataRegrid = func(olon1, olat1) #olon1, olat1必须是二维数组,想要的经纬度
import xarray as xr
data2 = dataset.get_data()[::50, ::50]
data2[data2 == -9999] = np.nan # <class 'tuple'>: (5587, 5685)
lon2_1d, lat2_1d = dataset.create_latlon(1)
lon2_1d = lon2_1d[::50]
lat2_1d = lat2_1d[::50]
data2 = xr.Dataset({'data2': (['lat', 'lon'], data2)},
coords={'lat': (['lat'], lat2_1d),
'lon': (['lon'], lon2_1d), })
dataRegrid = data2.interp(lat=lat1_1d, lon=lon1_1d)
dataRegrid.to_netcdf(path=fileout, mode="w", format="NETCDF4")
del dataRegrid
del data2