- This topic has 2개 답변, 2명 참여, and was last updated 5 years, 7 months 전에 by ChoiYoun.
-
글쓴이글
-
-
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)
endforEND
iz = 1일 때 위와 같은 오류 메세지가 출력됩니다. 즉, iz = 0일 때는 실행됩니다. 코드를 변경하며 테스트해본 결과, 위의 오류 메세지는 c=CONTOUR(data, xx, yy)의 (xx, yy)가 정방형일 때는 발생하지 않았습니다.
따라서 비정방형인 자료를 CONTOUR할 때 발생하는 원인으로 추측하고 있으나, iz=0일 때 그림이 제대로 출력되어 원인 파악에 애를 먹고 있습니다.
고견 부탁드립니다.
감사합니다.
-
Sangwoo회원
올려주신 데이터와 코드를 바탕으로 테스트를 해봤더니 말씀하신 것과 같은 문제가 발생하는 것이 확인이 됩니다. 그리고 언급하신대로 격자구조가 등간격 정방형이 아닌 경우에 이런 이슈가 발생하는 것으로 일단 보입니다. 좀 더 테스트를 해본 바로는 이러한 경우에는 다음과 같이 SetData 메서드를 사용할 때 인수를 data, lon_arr, lat_arr을 다 사용하지 않고 그냥 data만 사용하면 별 문제없이 작동을 합니다.
c.SetData, data
물론 이럴 경우에 경위도 격자들의 분포 형태가 제대로 반영이 되느냐에 대한 의심을 해볼 수는 있는데, 일단 제가 확인해본 바로는 격자형태는 제대로 반영되는 것 같습니다. 따라서 일단은 이와 같은 방법을 사용하시면 되지않을까 생각됩니다.
-
ChoiYoun회원
감사합니다. 항상 배워갑니다.
-
-
글쓴이글