ndvi mean 값 산출

게시판 IDL Q&A ndvi mean 값 산출

태그: 

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

  • 글쓴이
  • #5496

    nbin09
    회원

    NDVI mean 값을 산출하기 위해 아래와 같이 코드를 짰는데

    WorkDir = ‘C:\all\’
    WorkDirSat = ‘C:\all\’ ;Flux result
    WorkDirOut = ‘C:\meann\’

    syear = 2007
    fyear = 2013

    sday = 137
    fday = 265

    ncols = 4000
    nrows = 4000

    ;psize = 0.01

    data = fltarr(ncols,nrows,17)
    mdata = fltarr(ncols,nrows)
    stddata = fltarr(ncols,nrows)

    data[*,*,*] = -9999
    mdata[*,*] = -9999
    stddata[*,*] = -9999

    FOR year=syear, fyear DO BEGIN
    FOR doy=sday, fday, 8 DO BEGIN

    print, “Now processing Water Use Efficiency data from date: “, string(doy), ‘ yr ‘

    Filename = strcompress(WorkDir+string(year,format='(i04)’)+’\’+string(year,format='(i04)’)+string(doy,format='(i03)’)+’\’+string(year,format='(i04)’)+string(doy,format='(i03)’)+’_NDVI_1km.img’,/remove_all)

    ENVI_OPEN_FILE, Filename, r_fid=prcp_fid
    ENVI_FILE_QUERY, prcp_fid, ns=prcp_ns, nl=prcp_nl, dims=prcp_dims
    NDVI = ENVI_GET_DATA(dims=prcp_dims, fid=prcp_fid, pos=0) ;unit = mm/month

    if(doy eq sday) then begin
    proj = ENVI_GET_PROJECTION(FID=prcp_fid)
    ENDIF

    NDAY = DOY/8

    data[*,*,NDAY] = NDVI

    ENVI_FILE_MNG, ID=prcp_fid,/remove

    ENDFOR
    FOR y=0, nrows-1 DO BEGIN
    FOR x=0, ncols-1 DO BEGIN
    no = where(data[x,y,*] ne -9999, count1)
    if (count1 gt 1) then begin
    mdata[x,y] = mean(data[x,y,no])*0.0001
    stddata[x,y] = stddev(data[x,y,no])*0.0001
    endif
    ENDFOR
    ENDFOR
    Outfile_mean = strcompress(WorkDirOut+string(year,format='(i04)’)+’_GROW_MEAN_1km.img’,/remove_all)
    Outfile_std = strcompress(WorkDirOut+string(year,format='(i04)’)+’_GROW_STD_1km.img’,/remove_all)

    ENVI_WRITE_ENVI_FILE, mdata, out_name=Outfile_mean, map_info=map_info, out_dt=4, r_fid=mean_map
    ENVI_WRITE_ENVI_FILE, stddata, out_name=Outfile_std, map_info=map_info, out_dt=4, r_fid=std_map

    ENVI_FILE_MNG, ID=mean_map,/remove
    ENVI_FILE_MNG, ID=std_map,/remove
    ENDFOR ;end of yearly loop

    Datum = ‘WGS-84’
    ps = [1000, 1000]
    mc =[0.0, 0.0, -2751788.668d,394503.516d] ;clip image to array[140,85]
    units =envi_translate_projection_units(‘Meters’)
    Projection_Name = ‘Lambert Conformal Conic-NE_Asia’
    Params = [6378137.0D, 6356752.3D, 38.000000D, 110.000000D, 0.0, 0.0, 30.0, 60.0]
    proj = ENVI_PROJ_CREATE(type=4, name=Projection_name, datum=datum, params=params)
    map_info = ENVI_MAP_INFO_CREATE(type=4, name=Projection_name, proj=proj, datum=datum, params=params, mc=mc, ps=ps)

    ;print, data[2600,2400,*]
    ;print, mdata[2600,2400]

    PRINT, ‘The end!’
    close,/all
    END

    이렇게 오류가 뜨는데 혹시 잘 아시는 분 도와주세요

    NDVI = ENVI_GET_DATA(dims=prcp_dims, fid=prcp_fid, pos=0) ;unit = mm/month
    ^
    % Syntax error.
    At: H:\code\MEAN_ndvi_mod13.pro, Line 37

    proj = ENVI_GET_PROJECTION(FID=prcp_fid)
    ^
    % Syntax error.
    At: H:\code\MEAN_ndvi_mod13.pro, Line 40

    proj = ENVI_PROJ_CREATE(type=4, name=Projection_name, datum=datum, params=params)
    ^
    % Syntax error.
    At: H:\code\MEAN_ndvi_mod13.pro, Line 76

    map_info = ENVI_MAP_INFO_CREATE(type=4, name=Projection_name, proj=proj, datum=datum, params=params, mc=mc, ps=ps)
    ^
    % Syntax error.
    At: H:\code\MEAN_ndvi_mod13.pro, Line 77
    % 4 Compilation error(s) in module MEAN_NDVI_MOD13.
    % Attempt to call undefined procedure/function: ‘MEAN_NDVI_MOD13’.
    % Execution halted at: $MAIN$
    IDL>

  • #5501

    Jonghyuk
    회원

    ENVI의 API를 사용하는 코드인데, ENVI 라이브러리 로딩이 되어 있지 않아서 발생하는 문제입니다.
    ENVI를 로딩하지 않은 상태의 IDL에서는 지금 에러메시지가 나는 ENVI_ 로 시작하는 함수들을 인식할 수 없어 문법 에러로 처리합니다.
    아래와 같이 ENVI를 띄워 놓고 프로그램을 실행해 보십시오.
    IDL> envi
    % Restored file: ENVI.
    % Restored file: ENVI_M01.
    % Restored file: ENVI_M02.
    % Restored file: ENVI_M03.
    % Restored file: ENVI_M04.
    % Restored file: ENVI_M05.
    % Restored file: ENVI_M06.
    % Restored file: ENVI_M07.
    % Restored file: ENVI_M08.
    % Restored file: ENVI_D01.
    % Restored file: ENVI_D02.
    % Restored file: ENVI_D03.
    % Restored file: ENVI_CW.
    % Restored file: ENVI_IDL.
    % Restored file: ENVI_IOW.
    % Restored file: ENVI_RV.
    % Loaded DLM: IDLJSON.

    ENVI 어떤 버전을 사용하시는지 모르겠으나, 지금 작성하신 코드는 ENVI Classic(ENVI 4.8까지의 ENVI의 유일한 인터페이스) 스타일의 API입니다. 최신 버전에서도 ENVI Classic이라는 이름으로 예전의 ENVI를 지원하기 때문에 아마 실행에는 문제가 없을 것으로 생각합니다.
    어쨌든 프롬프트가
    IDL>
    이 아닌
    ENVI>
    상태에서 실행이 되어야 합니다.

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