2017-04-23 9 views
1

위도/경도 경계로 정의 된 사용자 지정 (비 직사각형) 도메인의 각 표 셀에서 데이터를 추출하려고합니다. 제 입력 파일이 곡선 그리드에 있습니다. 나는 python, cdo, ncks와 같은 다양한 메소드를 시도했지만 여전히 이해할 수는 없다. 난 단지 입력 된 ncfile의 폴리곤 도메인 하위 집합에있는 각 그리드 셀에 대해 시간이 걸리는 정보를 원한다. 정보 ncfile 내 입력은 여기에 주어집니다 :도메인 ncfile에서 데이터 추출

$ ncdump -h 1979_sfc_out.nc 

netcdf \1979_sfc_out { 
dimensions: 
    x = 83 ; 
    y = 94 ; 
    time = UNLIMITED ; // (8736 currently) 
    nv4 = 4 ; 
variables: 
    float time(time) ; 
     time:axis = "T" ; 
     time:long_name = "time" ; 
     time:standard_name = "time" ; 
     time:units = "hours since 1979-1-2 00:00:00" ; 
     time:calendar = "standard" ; 
    float x(x) ; 
     x:axis = "x" ; 
     x:long_name = "X-coordinate in Cartesian system" ; 
     x:standard_name = "projection_x_coordinate" ; 
     x:units = "meters" ; 
    float y(y) ; 
     y:axis = "y" ; 
     y:long_name = "Y-coordinate in Cartesian system" ; 
     y:standard_name = "projection_y_coordinate" ; 
     y:units = "meters" ; 
    float lon(y, x) ; 
     lon:units = "degrees_east" ; 
     lon:valid_range = -180., 180. ; 
     lon:standard_name = "longitude" ; 
     lon:bounds = "lon_bnds" ; 
    float lat(y, x) ; 
     lat:units = "degrees_north" ; 
     lat:valid_range = -90., 90. ; 
     lat:standard_name = "latitude" ; 
     lat:bounds = "lat_bnds" ; 
    float lon_bnds(y, x, nv4) ; 
     lon_bnds:units = "degreesE" ; 
    float lat_bnds(y, x, nv4) ; 
     lat_bnds:units = "degreesN" ; 
    char mapping ; 
     mapping:false_easting = 0. ; 
     mapping:false_northing = 0. ; 
     mapping:grid_mapping_name = "polar_stereographic" ; 
     mapping:latitude_of_projection_origin = 90. ; 
     mapping:standard_parallel = 64. ; 
     mapping:straight_vertical_longitude_from_pole = -152. ; 
     mapping:semi_major_axis = 6370000. ; 
     mapping:semi_minor_axis = 6370000. ; 
    float SEAICE(time, y, x) ; 
     SEAICE:_FillValue = -9999.f ; 
     SEAICE:units = "fraction" ; 
     SEAICE:long_name = "Ice concentration (ice=1;no ice=0)" ; 
     SEAICE:grid_mapping = "mapping" ; 
     SEAICE:coordinates = "lon lat" ; 

내가 시도 것들 중 일부는 내가 생각

lat1=71.2 
lat2=72.9 
lon1=-176.5 
lon2=-160 

cdo sellonlatbox,lon1,lon2,lat1,lat2 $ifile $box1_ofile 
cdo sellonlatbox (Abort): Float parameter >lon1< contains invalid character at position 1! 

입니다 문제는 내 입력 파일이 미터의 X, Y 치수 (하지 않는이있다 음수 기호가 있고 '위치 1의 유효하지 않은 문자'일 가능성이 있음), 위도/경도를도 (degree)로 추출하도록 cdo에 요청합니다. 나는 변수를 '매핑'내 ncfile에서 위도/경도로 미터를 변환하는 데 도움이 될 수도 있지만 그것을 할 방법을 알아낼 수 없습니다.

ncks가 여기서는 적합하지 않습니다. < -> lon/lat 문제입니다. cdo로보고 있습니다. 나는 추출 된 다각형을 원하지만

ncks -v SEAICE,U10,V10 -d latitude,71.2,72.9 -d longitude,-176.5,-160. $ifile -O $box1_ofile 

ncks: ERROR dimension latitude is not in input file 

, 나는 시도 이러한 예는 내가 여러 사각형 부분 집합 내 최종 다각형 모양을 달성하기 위해 할 수있는 다각형을 얻을 생각 만 사각형 부분 집합,하지만 더 나은가있는 경우 이 조언을 해주는 방법은 높이 평가됩니다.

감사

답변

1

NCO의 보조 좌표 feature 1-D 위도 및 경도로 구조화 눈금 곡선 좌표 hyperslab하도록 설계된다. 이것을 시도하십시오 :

ncks -X lon_min,lon_max,lat_min,lat_max in.nc out.nc 
ncks -X -176.5,-160.,71.2,72.9 in.nc out.nc 

이상한 다각형을 얻기 위해 여러 -X 옵션을 데이지 체인 방식으로 연결할 수도 있습니다. 불행히도 아마 당신을 위해 작동하지 않을 것입니다. 왜냐하면, 제가 방금 주목 한 것은 2D 위도와 경도가있는 곡선 그리드가 있기 때문입니다. 이를 위해 ncap2를 시도하십시오. feature. 매뉴얼의 예제는 직사각형 경계를 따라 마스크하는 법을 보여 주며 where() 문에서 조건을 데이지 체인으로 연결하여 다각형을 얻을 수 있습니다. 이것은 출력 파일의 차원을 변경하지 않지만 다각형 외부의 모든 것을 _FillValue로 설정할 수 있습니다.