태그: idl ndvi mean
- This topic has 1개 답변, 2명 참여, and was last updated 5 years, 1 month 전에 by Jonghyuk.
-
글쓴이글
-
-
nbin09회원
NDVI mean 값을 산출하기 위해 아래와 같이 코드를 짰는데
WorkDir = ‘C:\all\’
WorkDirSat = ‘C:\all\’ ;Flux result
WorkDirOut = ‘C:\meann\’syear = 2007
fyear = 2013sday = 137
fday = 265ncols = 4000
nrows = 4000;psize = 0.01
data = fltarr(ncols,nrows,17)
mdata = fltarr(ncols,nrows)
stddata = fltarr(ncols,nrows)data[*,*,*] = -9999
mdata[*,*] = -9999
stddata[*,*] = -9999FOR year=syear, fyear DO BEGIN
FOR doy=sday, fday, 8 DO BEGINprint, “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/monthif(doy eq sday) then begin
proj = ENVI_GET_PROJECTION(FID=prcp_fid)
ENDIFNDAY = 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_mapENVI_FILE_MNG, ID=mean_map,/remove
ENVI_FILE_MNG, ID=std_map,/remove
ENDFOR ;end of yearly loopDatum = ‘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 37proj = ENVI_GET_PROJECTION(FID=prcp_fid)
^
% Syntax error.
At: H:\code\MEAN_ndvi_mod13.pro, Line 40proj = ENVI_PROJ_CREATE(type=4, name=Projection_name, datum=datum, params=params)
^
% Syntax error.
At: H:\code\MEAN_ndvi_mod13.pro, Line 76map_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> -
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>
상태에서 실행이 되어야 합니다.
-
-
글쓴이글