SetData Method 오류 문의

게시판 IDL Q&A SetData Method 오류 문의

이 게시글은 2개 답변과 2명 참여가 있으며 마지막으로  ChoiYoun에 의해 7 월, 2 주 전에 업데이트 됐습니다.

  • 글쓴이
  • #5391 답변

    ChoiYoun
    회원

    안녕하세요.

    3차원 자료(x,y,z)를 2차원(x,y)으로 표출하는 프로그램을 제작 중에 발생한 문제입니다. 아래와 같은 오류 메세지가 출력되었습니다.

    % GRIDDATA: Triangle 1 not in counterclockwise order.
    % GRIDDATA: Triangle 20 not in counterclockwise order.
    % GRIDDATA: Triangle 26 not in counterclockwise order.
    % GRIDDATA: Triangle 33 not in counterclockwise order.
    % GRIDDATA: Triangle 47 not in counterclockwise order.
    % GRIDDATA: Triangle 48 not in counterclockwise order.
    % GRIDDATA: Triangle 49 not in counterclockwise order.
    % GRIDDATA: Triangle 52 not in counterclockwise order.
    % GRIDDATA: Triangle 55 not in counterclockwise order.
    % GRIDDATA: Triangle 65 not in counterclockwise order.

    아래는 오류가 발생하는 예시 코드입니다.
    lonlat_arr.sav는 링크(클릭)에서 받을 수 있으며, 다음과 같은 변수가 저장되어있습니다. lon_arr[960, 1200]
    lat_arr[960, 1200]

    PRO main

    ;Create sample data
    nx = 960 &ny = 1200 &nz = 5
    noise = 0.05 * RANDOMU(Seed, [nx, ny, nz])
    cube = REBIN(HANNING(nx, ny), [nx, ny, nz]) + noise
    restore, ‘./lonlat_arr.sav’

    ;Map set
    sb = 31 &wb = 122 &nb = 41 &eb = 132
    m = MAP(‘Geographic’, LIMIT = [sb,wb,nb,eb], $
    ASPECT_RATIO = 0, CENTER_LONGITUDE = 126.0)

    ;Draw
    for iz = 0, nz – 1 do begin
    data = cube[*, *, iz]
    if iz eq 0 then begin
    c = CONTOUR(data, lon_arr, lat_arr, $
    OVERPLOT = m, GRID_UNITS = ‘Degrees’, /FILL)
    mc = MAPCONTINENTS(/HIRES)
    endif else begin
    c.SetData, data, lon_arr, lat_arr
    endelse
    print, ‘iz=’ + STRING(iz)
    endfor

    END

    iz = 1일 때 위와 같은 오류 메세지가 출력됩니다. 즉, iz = 0일 때는 실행됩니다. 코드를 변경하며 테스트해본 결과, 위의 오류 메세지는 c=CONTOUR(data, xx, yy)의 (xx, yy)가 정방형일 때는 발생하지 않았습니다.

    따라서 비정방형인 자료를 CONTOUR할 때 발생하는 원인으로 추측하고 있으나, iz=0일 때 그림이 제대로 출력되어 원인 파악에 애를 먹고 있습니다.

    고견 부탁드립니다.

    감사합니다.

  • #5392 답변

    Sangwoo
    회원

    올려주신 데이터와 코드를 바탕으로 테스트를 해봤더니 말씀하신 것과 같은 문제가 발생하는 것이 확인이 됩니다. 그리고 언급하신대로 격자구조가 등간격 정방형이 아닌 경우에 이런 이슈가 발생하는 것으로 일단 보입니다. 좀 더 테스트를 해본 바로는 이러한 경우에는 다음과 같이 SetData 메서드를 사용할 때 인수를 data, lon_arr, lat_arr을 다 사용하지 않고 그냥 data만 사용하면 별 문제없이 작동을 합니다.

    c.SetData, data

    물론 이럴 경우에 경위도 격자들의 분포 형태가 제대로 반영이 되느냐에 대한 의심을 해볼 수는 있는데, 일단 제가 확인해본 바로는 격자형태는 제대로 반영되는 것 같습니다. 따라서 일단은 이와 같은 방법을 사용하시면 되지않을까 생각됩니다.

  • #5393 답변

    ChoiYoun
    회원

    감사합니다. 항상 배워갑니다.

'SetData Method 오류 문의'에 답변달기
글쓴이 정보: