SetData Method 오류 문의

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

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

  • 글쓴이
  • #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
    회원

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

답변은 로그인 후 가능합니다.