SetData Method 오류 문의

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

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #5391 Reply
      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 Reply
      Sangwoo
      회원

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

      c.SetData, data

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

    • #5393 Reply
      ChoiYoun
      회원

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

2 답변 글타래를 보이고 있습니다
'SetData Method 오류 문의'에 답변달기
글쓴이 정보:




취소