ndvi mean 값 산출

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

태그: 

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #5496 Reply
      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 Reply
      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>
      상태에서 실행이 되어야 합니다.

1 답변 글타래를 보이고 있습니다
'ndvi mean 값 산출'에 답변달기
글쓴이 정보: