2016-09-13 8 views
0

불규칙한 그리드 (램버트 원추형)에서 일반 그리드로 데이터를 재구성해야합니다. pyresample이 최선의 방법이라고 생각합니다. 실제로 원래의 lat, lon은 1D가 아닙니다 (basemap.interp 또는 scipy.interpolate.griddata를 사용해야 할 것 같습니다).불규칙한 그리드 데이터를 일반 그리드로 다시 그리기위한 pyresample 이해

유용한 정보 : this SO's answer 그러나 빈 보간 된 데이터를 얻습니다. 내 영향력의 반경과 내 데이터가 래핑된다는 사실 (??)과 관련이 있다고 생각합니다.

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 

것을 지금은 그들이 볼을 그릴 경우 좋은 및 확인 :

enter image description here

가 그럼 난 내 새로운 세트를 만들 정규 좌표 :

XI = np.arange(148,360) 
YI = np.arange(0,87) 
XI, YI = np.meshgrid(XI,YI) 

위의 대답에 이어 나는 fol lowing 코드 :

데이터의 해상도가 30km 약

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) 

pyresample.kd_tree 수입 resample_nearest에서 pyresample.geometry 수입 SwathDefinition 에서

, 그래서 70km를 넣어, 내가 넣어 fill_value를는의 하나입니다 데이터, 물론 나는 제로 또는 나노를 넣을 수 있습니다.

그러나 빈 배열이 나타납니다.

내가 뭘 잘못 했니? 또한 - 그것을하는 다른 방법이 있다면, 나는 그것을 알고 싶어합니다. Pyresample 문서는 약간 얇은 편이고 좀 더 도움이 필요합니다.

나는 this answer 다른 griddata 기능을 사용하는 제안 발견했다 :

import matplotlib.mlab as ml 
resampled_data = ml.griddata(lon_n.ravel(), lat_n.ravel(),SRHtemp.ravel(),XI,YI,interp = "linear") 

을 그리고 괜찮을 것 같다 :

enter image description here

하지만 그 이후, pyresample에 대한 자세한 내용을 이해하고 싶습니다 너무 강력 해 보인다.

답변

2

XI와 XI는 부동 소수점이 아닌 정수입니다. 당신은 단순히 정수 데이터 유형을 처리 할 수 ​​

XI = np.arange(148,360.) 
YI = np.arange(0,87.) 
XI, YI = np.meshgrid(XI,YI) 

무능력을 수행하여이 문제를 해결할 수있는 것은 pyresample에서, 문서화되지 않은 직관적이지, 그리고 아마도 버그 동작입니다.코딩 스타일에

몇 가지 더주의 사항 :

  • 그것은 당신이 당신은 단지 netCDF의 데이터 세트를 한 번로드해야이
  • 에 의해 많이 얻을하지 마십시오 XI 및 YI 변수를 덮어 쓸 필요는 없습니다 및 해당 개체를 통해 변수에 액세스하십시오.
+0

트릭을했습니다! 그것은 부유해야했습니다. – claire