; This program was developed by Camilo D. Rennó and Lise C. Banon using IDL/ENVI language. This code can obtained in http://urlib.net/sid.inpe.br/mtc-m19/2012/09.04.02.11 ; Version: 1.0 (sep 2012) ; This program eliminates first order streams with 1 pixel length ; Input: Drainage network and LDD grids (LDD grid is coded according to Rennó et al, 2008) ; Output: Drainage network grid ; References: ; Rennó et al. HAND, a new terrain descriptor using SRTM-DEM: mapping terra-firme rainforest environments in Amazonia. Remote Sensing of Environment, 112: 3469-3481, 2008. PRO drainage_simplification ;apaga drenagem de ordem 1 menores que 1 pixel Envi_Select,Title='Input Drainage File',Fid=fiddata,Dims=dims,Pos=pos,/Band_Only if fiddata eq -1 then return ns=dims[2]-dims[1]+1 nl=dims[4]-dims[3]+1 Envi_Select,Title='Input LDD File',Fid=fidldd,Dims=dimsldd,Pos=posldd,/Band_Only if fidldd eq -1 then return Base=Widget_Auto_Base(Title='Drainage') Base1=Widget_Base(Base,/Column,/Frame) OutFM=Widget_OutFM(Base1,Uvalue='outf',Func='Envi_Out_Check',/Auto) result=Auto_Wid_Mng(Base) if result.accept eq 0 then return viz=lindgen(ns,nl)+([0,ns+1,1,-ns+1,ns,-ns,ns-1,-1,-ns-1])[Envi_Get_Data(fid=fidldd,dims=dimsldd,pos=posldd)] dren=Envi_Get_Data(fid=fiddata,dims=dims,pos=pos) ne 0 idren=where(histogram(viz[where(dren ne 0)],min=0l) gt 1) dren[idren]=2 while 1 do begin temp=where(dren[viz[idren]] eq 1) if temp[0] eq -1 then break idren=viz[idren[temp]] dren[idren]=2 endwhile idren0=where(dren ne 0) idren0=where(histogram([idren0,viz[idren0]],min=0l) eq 1) idren0=idren0[where(dren[viz[idren0]] gt 1)] dren[idren0]=0 dren ne= 0 idren=where(dren ne 0) k=2l while 1 do begin idren=where(histogram(viz[idren],min=0l) gt 1) if idren[0] eq -1 then break dren[idren]=k while 1 do begin temp=where((dren[idren] eq k) and (dren[viz[idren]] eq (k-1))) if temp[0] eq -1 then break idren=viz[idren[temp]] dren[idren]++ endwhile idren=where(dren eq k) k++ endwhile ildd0=where(Envi_Get_Data(fid=fidldd,dims=dimsldd,pos=posldd) eq 0) if ildd0[0] ne -1 then begin for i=0l,n_elements(ildd0)-1 do begin temp=where(viz eq ildd0[i]) temp=temp[where(temp ne ildd0[i])] temp=temp[where(dren[temp] eq max(dren[temp]))] dren[ildd0[i]]=dren[temp[0]]+((n_elements(temp) gt 1) and (dren[temp[0]] ne 0)) endfor endif if result.outf.in_memory eq 1 then begin Envi_Enter_Data,dren,bnames='Drainage',Map_Info=Envi_Get_Map_info(fid=fiddata) endif else begin Openw,fid,result.outf.name,/Get_Lun Writeu,fid,dren Free_Lun,fid Envi_Setup_Head,Fname=result.outf.name,ns=ns,nl=nl,nb=1,$ Data_Type=size(dren,/Type),bnames='Drainage',/Write,/Open,$ interleave=0,Map_Info=Envi_Get_Map_info(fid=fiddata) endelse print,'end' END