mwkim

게시판 답변이 생성됐습니다

15 글 보임 - 31 에서 45 까지 (총 49 중에서)
  • 글쓴이
  • 답변: tvscl 문의 #3021
    mwkim
    회원

    iimage(image가 아닙니다)와 slide_image 함수는 각각 6.0과 4.0 IDL에서 추가된 내용입니다.

    알려주신것과 같이 7.0버전 이상 환경이라면 문제가 없이 사용하실 수 있을 겁니다.

    도움말에 각 함수에 대한 내용을 검색하시면 Example이 나와있는데,

    이 내용을 수행해 보시고 그래도 안되면 다시 글 남겨주시면 감사하겠습니다.
    (안 될 때, 에러메세지가 같이 나오면 해당 메세지도 첨부 부탁드립니다.)

    답변: 안녕하세요? #3019
    mwkim
    회원

    안녕하세요, 글씨로 표출하는 기능 TEXT 함수를 사용하시면 됩니다.

    예를 들어

    t1 = TEXT(0.4,0.985,’mean temperature =’+STRING(FLOAT(mean_temperature), FORMAT='(F5.1)’)+’%’,/NORMAL)

    이와 같이 사용하면 글씨가 써지는 것을 확인할 수 있습니다.(창이 있는 상태)

    해당 함수의 세세한 옵션에 관련해서는 도움말을 찾아보시면 더욱 도움이 될 것 같습니다.

    답변: tvscl 문의 #3016
    mwkim
    회원

    안녕하세요, 추가적으로 DG체계에서 답변을 드리자면

    창 크기는 WINODW 프로시저로 조절하시면 될 것 같습니다.

    window, 0, xsize = 23395, ysize = 151
    tvscl, data

    다만 이 경우, 위에 언급된 바와 같이 너무 커지기 때문에 문제가 있는데 Z-buffer를 사용하시면 됩니다.

    관련 내용은 아래 링크를 참조하시면 됩니다.

    http://blog.daum.net/swrush/187

    http://blog.daum.net/swrush/381

    답변: Timestamp에따른 데이터 재배열 #3010
    mwkim
    회원

    안녕하세요.

    올려주신 내용은 불연속적인 데이터를 연속적인 자료에 넣고 비어있는 부분은 N/A 값으로 처리하고 싶으신 건데

    사실 질문자께서 올려주신 내용대로 하면 됩니다.

    (가정을 하였는데 위 자료를 볼 때, 중복되지 않는 날짜 순서로 정렬된 일별 자료로 판단하였습니다.)

    1. 미리 자료를 넣을 배열(이름은 data라고 하겠습니다)을 만듭니다.
    – 이때 배열의 길이(length)는 자료의 처음과 끝 날짜를 기준으로 계산하시면 됩니다.

    2. data 배열의 모든 값에 미리 N/A값을 넣습니다.
    – 문자형으로 처리하실 꺼면 ‘N/A’라고 하면 되고, 실수형으로 할 꺼면 !VALUES.F_NAN을 넣으면 됩니다.

    3. length와 동일한 길이로 시간배열(date)을 만듭니다.
    TIMEGEN 함수를 사용하면 편리합니다. START옵션을 통해서 시작날짜를 정하고 UNIT으로 단위를 일단위로 정의하시면 됩니다(TIMEGEN 도움말 참조).

    4. 반복문을 통해 date 함수가 위 원시 데이터의 날짜와 같을 때의 자료르 data에 넣습니다.
    이 부분을 코드로 만들면 아래와 같이 할 수 있습니다.
    j = 0
    FOR i = 0, legnth -1 DO BEGIN
    IF date[i] EQ rawDate[j] THEN BEGIN ; rawDate 는 원시 자료의 날짜(JULDAY 함수값)입니다.
    data[i] = rawData[j] ; rawData 는 원시 자료의 날짜(JULDAY 함수값)입니다.
    j ++
    ENDIF
    ENDFOR

    사실 위에 작성해드린 내용은
    ‘자료가 missing인 날도 N/A으로 처리를 해야하는데 Timestamp를 미리 만들어 놓고 엑셀로 일일이 자료를 복사 붙여넣기 하자니 자료 기간이 너무 길어서 무리네요.’
    이 부분을 반복처리하도록 단계 단계로 구성한 것에 불과합니다.

    코드를 작성하실 때, 뭔가 어렵다고 생각되시면

    문제를 작은 단위로 쪼개서 해당 부분을 코드로 만들고 연결하는 방법을 사용해보시는 것도 추천드립니다.

    mwkim
    회원

    객체그래픽(OG)체계는 저도 안 써봐서 잘 모르겠습니다…

    알려드린 것과 같이 그림 표출을 DG 체계로 하시면 coyote 라이브러리 사용이 가능해 보이고

    NG 체계라면은 COLORBAR 함수를 사용하시면 됩니다.

    참고로 NG 체계에서 표출하는 코드는 다음과 같습니다.
    (COLORBAR에서 title과 tickname이 같은 방향이여서
    위에 올려주신 예제와 같이 출력하기위해 title을 별도로 표출했습니다.)

    ==========================================

    worldelvsize=[360,360]

    worldelvimage = HANNING(360,360)*255

    winsize=[500,400]
    winmargin=[winsize[0]-worldelvsize[0],(winsize[1]-worldelvsize[1])/2,0,(winsize[1]-worldelvsize[1])/2]

    win = WINDOW(DIMENSIONS=winsize, WINDOW_TITLE=’world elevation:first method’,/NO_TOOLBAR)
    img = IMAGE(worldelvimage,RGB_TABLE=5,MARGIN=winmargin, /DEVICE, /CURRENT)

    LOADCT, 5, RGB_TABLE = ctbl
    colors = [1, 70, 100]
    labels = [‘Snow’, ‘Water’,’Desert’]
    ctbl = ctbl[[1,70,100],*]
    cbar = COLORBAR(RGB_TABLE=ctbl,COLOR=’navy’,ORIENTATION=1,TEXTPOS=1,$
    TICKNAME=[‘Snow’, ‘Water’,’Desert’],POSITION=[0.10, 0.1, 0.15, 0.9])
    cbartitle = TEXT(winmargin[0]*0.25,0.5,’Land Key’,ORIENTATION=90,ALIGNMENT=0.5)

    mwkim
    회원

    안녕하세요.

    질문하신 내용인 coyote 라이브러리 사용 과정에서 발생한 문제로 보이는데,

    사실 올려주신 내용만으로는 어떤 문제때문인지 파악하기 어렵습니다.

    아마 해당 코드 실행 이전에 어떤 데이터를 표출하는 코드가 있었을텐데

    그 부분도 같이 올려주셔야 정확히 알 수 있을 것 같습니다.

    예를 들어 아래와 같은 코드를 수행했을때는 컬러바가 하나의 창으로 표출되었습니다.

    =================================
    loadct, 21
    data = HANNING(300,300)*255
    colors = [1, 70, 100]
    labels = [‘Snow’, ‘Water’,’Desert’]
    cgWindow, ‘Contour’, data
    cgDCBar, colors, /addcmd, COLOR=’navy’, LABELS=labels, TITLE=’Land Key’, /VERTICAL, POSITION=[0.15, 0.1, 0.20, 0.9]
    =================================

    참고로 cgDCBar 함수에 /addcmd 함수를 사용하시면 cyWindow 함수를 통해 생성된 창이나

    또는 coyote 라이브러리를 통해 생성된 창에 한 해서 그 위에 그려지는 것 같습니다.

    기존 IDL 함수(DG 체계) 위에 그리려면, /addcmd 키워드를 빼시면 됩니다(NG 체계에서는 안 됩니다.)

    개인적으로 권유를 드리자면 굳이 예전에 사용하던 코드를 이용해야하거나

    coyote 라이브러리만의 기능이 필요한 부분이 아니라면

    IDL 내장 함수를 우선 사용하시는 것이 좋을 것 같습니다.

    답변: 비교 후 최댓값을 가진 변수 도출 #2969
    mwkim
    회원

    안녕하세요, 위에 잘 설명해주셔서 숟가락만 얹어봅니다.

    질문 내용 중에 최대값이 여러 개이면 그것 또한 별도로 나타낼 수 있는 방법도 추가로 물어보셨는데,

    다음과 같은 코드를 통해 해결할 수 있었습니다(위의 내용을 조금 변경했습니다.)

    ==============================

    r=FIX(RANDOMU(seed, 3, 4)*10) ; 중복값을 만들기 위해 정수로 변환
    s=FIX(RANDOMU(seed, 3, 4)*10) ; 중복값을 만들기 위해 정수로 변환
    t=FIX(RANDOMU(seed, 3, 4)*10) ; 중복값을 만들기 위해 정수로 변환

    x=[[[r]], [[s]], [[t]]]
    mx=MAX(x, wh_mx, dimension=3)
    find_layer = wh_mx / (N_ELEMENTS(r))

    FOR i = 0, 1 DO BEGIN
    x[wh_mx] = min_value ; min_value = -1로 사전 정의
    mx_temp=MAX(x, wh_mx, dimension=3)
    find_layer_temp = wh_mx / (N_ELEMENTS(r)) + 2 – i ; 인덱스 부여를 위해 일정값 추가
    wh_over=WHERE(mx NE mx_temp, count)
    IF count EQ N_ELEMENTS(r) THEN BREAK ; 중복값없는 경우 반복 실행 중단
    IF count NE 0 THEN BEGIN
    find_layer_temp[wh_over] = 0 ; 중복이 안 된 위치는 기존 인덱스 유지
    ENDIF
    find_layer += find_layer_temp ; 인덱스를 더하여 중복이 있는 경우 인덱스 증가
    ENDFOR

    PRINT, find_layer

    ==============================

    전체적인 흐름은 이전에 찾은 최대값(mx)을 사용자가 정의한 값(min_value)으로 바꾸고
    다시 최대값(mx_temp)을 찾아서 이전에 찾은 값과 비교하는 방식입니다.
    위와 같이 진행 시, 인덱스는 0~6까지 나오며 각 의미는 다음과 같습니다.
    0: r 행렬, 1: s 행렬, 2: t 행렬, 3: r,s 행렬, 4: r,t 행렬 5: s,t 행렬, 6: r,s,t 행렬
    에 최대값 존재입니다.

    이러한 방법은 해결방법이 이 외에도 많을 것으로 생각됩니다.
    (아마 검색해보면 이미 기능이 있거나 누군가 알고리즘이나 함수로 만들어 인터넷에 올려놨을 것 같습니다.)

    간단한 경우면 그냥 사용하셔도 되겠지만 자료가 큰 경우는 효율적인 알고리즘을 검색해보시는 걸 추천합니다.

    답변: Map projection관련 문제 #2930
    mwkim
    회원

    안녕하세요.

    해당 질문 내용이 지도는 Lambert로 그리되 그림은 사각형으로 표출하고자 하시는 것이라면
    MAP 함수의 XRANGE와 YRANGE 키워드를 사용하시면 되는 것 같습니다.
    다만 이 경우 위경도 라벨은 지도 경계에 표기가 되지는 않는 것 같습니다.
    (따라서 지도 내에 표기하거나 경계에 표기하기 위해서는 별도로 나타내야 합니다.)

    아래 예시 코드를 첨부합니다.

    PRO TEST_IMAGE

    data = HANNING(400, 400)
    win = WINDOW(DIMENSIONS=[600, 600])
    m = MAP(‘Lambert Conformal Conic’,LIMIT=[20,110,50,145],$
    XRANGE=[-1000000,1000000],YRANGE=[-1000000,1000000],$
    STANDARD_PAR1=30, STANDARD_PAR2=60, $
    CENTER_LATITUDE=37.5, CENTER_LONGITUDE=127.5, $
    ASPECT_RATIO=1, POSITION=[0.06, 0.20, 0.94, 0.96], /CURRENT)
    im = IMAGE(data, RGB_TABLE=74, IMAGE_DIMENSIONS=[40, 40], $
    IMAGE_LOCATION=[110, 20], GRID_UNITS=2, /OVERPLOT)
    mc = MAPCONTINENTS(THICK=2)
    mg = m.MapGrid
    mg.GRID_LATITUDE=5
    mg.GRID_LONGITUDE=5
    mg.LABEL_SHOW=0
    mg.Linestyle = 2

    l1 = POLYLINE([0.12,0.88,0.88,0.12,0.12],[0.2,0.2,0.96,0.96,0.2],/NORMAL,/CURRENT)

    x = [0.14:0.88:0.19]
    y = FLTARR(4) + 0.17
    lon = STRING([120:135:5])
    t1 = TEXT(x,y,lon,/NORMAL,/CURRENT)

    x = [0.07:0.88:0.14]
    y = FLTARR(6) + 0.965
    lon = STRING([115:140:5])
    t1 = TEXT(x,y,lon,/NORMAL,/CURRENT)

    x = FLTARR(4) + 0.025
    y = [0.28:0.94:0.205]
    lat = STRING([30:45:5])
    t1 = TEXT(x,y,lat,/NORMAL,/CURRENT)

    x = FLTARR(4) + 0.83
    y = [0.28:0.94:0.205]
    lat = STRING([30:45:5])
    t1 = TEXT(x,y,lat,/NORMAL,/CURRENT)

    END

    • 이 답변은 mwkim에 의해 7 years, 9 months 전에 수정됐습니다.
    답변: Binary Data 읽기 #2881
    mwkim
    회원

    1byte character가 바이트를 문자로 바꾸는 것을 의미하나요?

    바이트 문자 변환은 ascii 코드에 따라 변환되는 것으로 알고있습니다.

    다만 ascii 변환은 127까지 되고 그 이상(extended ascii)은 변환이 되지는 않는 것 같습니다.

    그리고 변환 과정을 물어보신 거면 STRING 함수를 이용하면 간단히 변환됩니다.

    아래는 예제 입니다.

    x = BINDEN(10) + 100B ; 0~9는 출력문자가 아니여서 범위를 100~109로 조정했습니다.
    y = STRING(x)
    HELP, y

    답변: Binary Data 읽기 #2879
    mwkim
    회원

    안녕하세요,

    혹시 읽은 데이터에 128을 빼면 어떨까요?

    물론 이렇게 하기 위해서는 자료형을 바이트형에서 정수형으로 바꾸셔야 합니다.

    bin2 = FIX(bin1) – 128

    제가 알기로는 대부분의 프로그램 언어에서 바이트는 0~255까지로 알고있습니다.

    원하시는 것처럼 -128에서 127까지라면 offset(여기서는 -128)을 별도로 명시하지 않았을까 추측합니다.

    mwkim
    회원

    안녕하세요.

    작성해주신 내용을 봤을 때 중복된 내용을 빼고 다시 저장하시려는 것 같은데…

    큰 맥락에서 다음과 같이 프로그램을 구성하셔야 할 것 같습니다.

    1. 파일을 읽는다(하신것과 같이 READ_CSV나 READCOL 사용).

    2. 중복 자료를 찾는다.

    3. 중복 자료에서 exp time이 가장 긴 자료만 새로운 자료로 저장한다.

    4. 새로운 자료를 파일로 저장한다.

    중복 자료를 찾을 때는 WHERE 함수를 사용한다던지, 연속된 경우 FOR문을 사용해 구성할 수도 있고,

    중복 자료를 찾는 값이 하나인 경우는 SORT와 UNIQ를 이용해서도 가능할 것 같습니다.

    기술적인 부분(예를 들어 WHERE 함수를 썼는데 중복자료가 검색이 안되더라 같은)은 확인하고 알려드릴 수 있지만

    중복자료를 찾고 처리할 때 어느 방법이 좋은지는 자료의 특성에 따라 정해야 하기 때문에…

    질문자께서 직접 판단하셔야 합니다.

    답변: '0007'X는 어떻게 쓰는 것인가요? #2846
    mwkim
    회원

    안녕하세요.

    올려주신 내용은 저도 처음 알게되었는데요(마침 비슷한 용도로 사용할 일이 있어서 도움이 될 것 같습니다.)
    IDL 도움말에서 ‘Bitwise Operators’ 도움말을 보시면 보다 이해하기 편하실 것 같습니다.

    위에서 ‘0007’x라고 안하시고 그냥 7로 하셔도 동일한 결과가 나옵니다.
    (오히려 목적에 맞게 하실려면 ‘0000000000000111’b 라고 쓰시는게 좋을 것 같습니다.)

    7이라는 숫자는 IDL에서 16비트 정수로 인식하며 표현하면 다음과 같습니다.
    7 = 0000000000000111
    따라서 7과 AND로 비교하면 뒤의 3비트 부분만 값을 가져오게 됩니다.

    만약 10~12번째 비트를 가져오고 싶으시면 다음 값을 사용하시면 될 것 같습니다.
    0000111000000000 = 3584
    여기서 3584는 계산하셔도 되고 그냥 ‘0000111000000000’b 라고 하셔도 됩니다.

    다만 이렇게 해서 출력해보면 10진수 방식의 정수형으로 표출되는데
    표출할 때 FORMAT='(B016)’ 옵션을 추가하면 2진수로 출력되는 것을 확인할 수 있습니다.

    mwkim
    회원

    안녕하세요.

    혹시나 해서 READ_JPEG 함수를 살펴봤는데,

    TWO_PASS_QUANTIZE 키워드를 사용하면 해결되는 것(또는 그런 것)처럼 보여서 글 남깁니다.

    READ_JPEG로 읽어온 데이터를 24비트일 때와 8비트일 때는 비교했을 때

    값에 차이가 있어 이 부분을 찾아보니 해당 키워드를 사용했을 때가 원본과 가깝게 나타났습니다.
    (원리는 저도 잘 모르겠습니다.)

    좀 더 구체적으로 알려드리면 JPEG 그림 자체가 256 컬러에 딱 맞지 않습니다.
    (24비트로 그림을 읽어서 확인한 결과 총 10032개의 색 검색)

    따라서 8비트로 읽어서 표출하면 원본과 다르게 표출되는 문제는 어쩔 수 없이 발생할 것 같습니다.

    답변: 데이터 읽는 방법에 관한 문제 #2828
    mwkim
    회원

    안녕하세요.

    보여주신 문제를 보면 다루고자 하는 자료가 정형화 되지 않아서 어려움을 겪고 계신데요.

    대략 2가지 방법이 있을 것 같습니다.

    하나는 전처리 과정을 통해서 자료를 정형화를 하거나(즉 말씀하신 L1L2C1P2가 없는 부분에 L1L2C1P2를 넣는 등)

    아니면 처리 과정에서 예외 규정을 두어야 할 것 같습니다.

    전자의 경우는 전처리 프로그램을 별도로 작성하셔야 하고,

    후자의 경우는 처리 과정을 진행하는 코드는 지금보다 길어질 것 입니다.

    이 부분에 있어서는 어떤 방법을 사용하라고 권하기 보다는 개발하기 편한 방식으로 하시면 될 것 같습니다.

    참고로 정형화되지 않은 자료에 대해 지원하는 함수는 IDL외에도 다른 프로그램에서도 지원하는 기능은 극히 드물기 때문에 위와 같은 과정은 작성자 분께서 만드셔야 할 것 입니다.

    에러가 나는 부분에 대해서는 어디서 어떤 에러가 났는지 구체적으로 작성해주시면 답변드릴 수 있을 것 같습니다.
    (예제를 올려주셨는데, 헤더 처리하는 부분은 예제 코드에 없는것 같아서…)

    답변: PDF 파일 저장 버그 #2822
    mwkim
    회원

    IMAGE 함수를 통해 표출된 내용에 대해서는 벡터로 저장하는 과정에서

    NaN 값에 대한 처리가 잘 안되는 것 같습니다.

    벡터 방식으로 저장하실려면 NaN 값을 제거해야 될 것 같습니다.
    (예를 들면 CopyWindow 메소드로 이미지를 저장하고 재 출력하거나,
    NaN 값 대신에 임의값을 지정하고 그 부분만 배경색과 동일하게 출력하는 방식 등)

    아무래도 벡터 형식의 저장 기능이 주로 사용되는 비트맵 파일 포맷에 비해서

    예외적으로 작동하는 부분이 있는 것 같습니다.

15 글 보임 - 31 에서 45 까지 (총 49 중에서)