?? ndvimulti_803.bak
字號:
;
;
;
;非自動生成功能部分,后添加功能
;
;
;
;
;----------------------------------
;歸一化植被指數NDVI產品
;-----------------------
;多文件的歸一化植被指數NDVI計算
pro NDVIMulti_803, infilenames, inSavePath = inSavePath, otSaveNames
;歸一化植被指數NDVI計算
iFileCount = N_ELEMENTS(inFileNames) & print,ifilecount & IF iFileCount EQ 0 THEN RETURN
otSaveNames = STRARR(iFileCount) ;根據輸入的MODIS02的文件數量,創建一個同樣元素數量的數組,用于存放產品保存名稱
;設置保存路徑及保存文件名
for ii = 0 , iFileCount - 1 do begin
if N_ELEMENTS(inSavePath) eq 0 then begin ;如果使用默認保存路徑
strSaveHDFName = StrMid( inFileNames[ii], 0, StrLen(inFileNames[ii]) - 4)+'_NDVI.hdf' ;在hdf文件后面加NDVI保存
endif else begin ;使用指定路徑進行保存
strSaveHDFName = inSavePath + File_BaseName( inFileNames[ii], '.hdf', /FOLD_CASE) + '_NDVI.hdf' ;File_BaseName能將文件名前面的路徑去掉
endelse
otSaveNames[ii] = strSaveHDFName
;處理每一組數據
HDFNDVI_803, inFileNames[ii], strSaveHDFName[0];計算各個文件的歸一化植被指數NDVI
endfor
end
;-----------------------
pro HDFNDVI_803, inFileName, inOtFileName
;初始化進度條
strReportInit = ['輸入文件:', inFileName, $
'輸出文件:', inOtFileName] ;處理過程當中顯示的內容
;Envi_Report_Init是envi里面的一個函數,用于顯示工作進度的
Envi_Report_Init, strReportInit, Title = '歸一化植被指數NDVI計算進度', Base = reportBaseID, /INTERRUPT ;初始化Envi進程報告
WIDGET_CONTROL, reportBaseID[3], Set_Value = '取消'
iDen =4 & iNum = 0
;---------------------------
;讀取MOD02數據
Envi_Report_Stat, reportBaseID, ++iNum, iDen, CANCEL = cancelValue
IF cancelValue EQ 1 THEN BEGIN ;當按下cancel是取消進度條
Envi_Report_Init,' ', Base = reportBaseID, /FINISH & RETURN ;點擊進度窗體上的取消按鈕時,則將進度報告窗體清空再返回
ENDIF
GetCoordEnvelope_612, inFileName, Envelope ;讀取MODIS02文件,獲取東西南北四個角點的坐標
;---------------------------
;創建新產品的HDF文件
ENVI_REPORT_STAT, reportBaseID, ++iNum, iDen, CANCEL = cancelValue
IF cancelValue EQ 1 THEN BEGIN
Envi_Report_Init, ' ', Base = reportBaseID, /FINISH & RETURN
ENDIF
OpenHDF_452, inOtFileName, otHdfID, /CREATE, /WRITE ;用可讀可寫的方式打開HDF
CreateEnvRSFlag_452, inOtFileName, '歸一化植被指數NDVI', 202;創建產品標簽
StartSD_452, inOtFileName, otSDInterfaceID, inType = 'RDWR'
;寫入坐標信息
HDF_SD_ATTRSET, otSDInterfaceID, 'MOD02 input file', File_BaseName(inFileName) , /STRING
HDF_SD_ATTRSET, otSDInterfaceID, 'NORTHBOUNDINGCOORDINATE', Envelope[0], /DFNT_FLOAT64
HDF_SD_ATTRSET, otSDInterfaceID, 'SOUTHBOUNDINGCOORDINATE', Envelope[1], /DFNT_FLOAT64
HDF_SD_ATTRSET, otSDInterfaceID, 'EASTBOUNDINGCOORDINATE', Envelope[2], /DFNT_FLOAT64
HDF_SD_ATTRSET, otSDInterfaceID, 'WESTBOUNDINGCOORDINATE', Envelope[3], /DFNT_FLOAT64
;---------------------------
;判斷文件類型
ENVI_REPORT_STAT, reportBaseID, ++iNum, iDen, CANCEL = cancelValue
IF cancelValue EQ 1 THEN BEGIN
Envi_Report_Init, ' ', Base = reportBaseID, /FINISH & RETURN
ENDIF
;判斷數據是1km、500米、205米
FileIsMOD021KM_322, inFileName, ot1KMFlag
FileIsMOD02HKM_322, inFileName, otHKMFlag
FileIsMOD02QKM_322, inFileName, otQKMFlag
;---------------------------
;根據MODIS02的不同文件計算歸一化植被指數
ENVI_REPORT_STAT, reportBaseID, ++iNum, iDen, CANCEL = cancelValue
IF cancelValue EQ 1 THEN BEGIN
Envi_Report_Init, ' ', Base = reportBaseID, /FINISH & RETURN
ENDIF
;1km數據
if ot1KMFlag eq 1 then begin
;1波段為紅外波段,2為近紅外波段
GetReflectance_610, inFileName, 'EV_250_Aggr1km_RefSB', 1, otRed, otValidData1
GetReflectance_610, inFileName, 'EV_250_Aggr1km_RefSB', 2, otNearInfrared, otValidData2
otNDVI = (otNearInfrared - otRed)/(otNearInfrared + otRed)
index = where(otValidData1 eq 0)
otNDVI[index] = 255
CreateDSAndAddData_324, otSDInterfaceID, 'NDVI', '歸一化植被指數', otNDVI, /Float
SelectSD_452, otSDInterfaceID, 'NDVI', otSDIndex, otSDId
HDF_SD_ATTRSET, otSDId, '_FillValue', 255, /DFNT_UINT16
HDF_SD_ATTRSET, otSDId, 'ScaleValue', 100, /Float
HDF_SD_ATTRSET, otSDId, 'offset', 0, /FLOAT
UnSelectSD_452, otSDId
endif
;500m數據
if otHKMFlag eq 1 then begin
;1波段為紅外波段,2為近紅外波段
GetReflectance_610, inFileName, 'EV_250_Aggr500_RefSB', 1, otRed, otValidData1
GetReflectance_610, inFileName, 'EV_250_Aggr500_RefSB', 2, otNearInfrared, otValidData2
otNDVI = (otNearInfrared - otRed)/(otNearInfrared + otRed)
index = where(otValidData1 eq 0)
otNDVI[index] = 255
CreateDSAndAddData_324, otSDInterfaceID, 'NDVI', '歸一化植被指數', otNDVI, /Float
SelectSD_452, otSDInterfaceID, 'NDVI', otSDIndex, otSDId
HDF_SD_ATTRSET, otSDId, '_FillValue', 255, /DFNT_UINT16
HDF_SD_ATTRSET, otSDId, 'ScaleValue', 100, /Float
HDF_SD_ATTRSET, otSDId, 'offset', 0, /FLOAT
UnSelectSD_452, otSDId
endif
;250米數據
if otQKMFlag eq 1 then begin
;1波段為紅外波段,2為近紅外波段
GetReflectance_610, inFileName, 'EV_250_RefSB', 1, otRed, otValidData1
GetReflectance_610, inFileName, 'EV_250_RefSB', 2, otNearInfrared, otValidData2
otNDVI = (otNearInfrared - otRed)/(otNearInfrared + otRed)
index = where(otValidData1 eq 0)
otNDVI[index] = 255
CreateDSAndAddData_324, otSDInterfaceID, 'NDVI', '歸一化植被指數', otNDVI, /Float
SelectSD_452, otSDInterfaceID, 'NDVI', otSDIndex, otSDId
HDF_SD_ATTRSET, otSDId, '_FillValue', 255, /DFNT_UINT16
HDF_SD_ATTRSET, otSDId, 'ScaleValue', 100, /Float
HDF_SD_ATTRSET, otSDId, 'offset', 0, /FLOAT
UnSelectSD_452, otSDId
endif
EndSD_452, otSDInterfaceID
CloseHDF_452, otHdfID
;finish reportBar
Envi_Report_Init, ' ', Base = reportBaseID, /FINISH
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -