/* Program: GRADIENT.AML /* Purpose: Calculates the gradient of a line coverage based on elevation /*=================================================================================== /* Usage: GRADIENT <COVER> <GRID> <SUMITEM> <OUTITEM> /* /* Arguments: COVER - Line cover to calculate gradient. /* GRID - Elevation grid. /* SUMITEM - INFO item in line cover to summarize gradients by. /* OUTITEM - Item in coverage INFO file to hold gradient value. /*=================================================================================== /* Calls: MUST BE RUN FROM ARC (Calls ARCPLOT, GRID, and TABLES) /*=================================================================================== /* Jeffrey Evans - Senior Landscape Ecologist /* The Nature Conservancy, Central Science /* Laramie, WY /* jeffrey_evans@tnc.org /*=================================================================================== &args cov grid item infoitem &if [show PROGRAM] <> ARC &then &return &inform CAN ONLY BE RUN FROM ARC &if [NULL %cov%] = .TRUE. &then &return &inform Usage: GRADIENT <COVER> <GRID> <SUMITEM> <OUTITEM> &if [NULL %grid%] = .TRUE. &then &return &inform Usage: GRADIENT <COVER> <GRID> <SUMITEM> <OUTITEM> &if [NULL %item%] = .TRUE. &then &return &inform Usage: GRADIENT <COVER> <GRID> <SUMITEM> <OUTITEM> &if [NULL %infoitem%] = .TRUE. &then &return &inform Usage: GRADIENT <COVER> <GRID> <SUMITEM> <OUTITEM> &if [iteminfo %cov%.aat -info %infoitem% -exists] = .TRUE. &then &return &inform Item [upcase %infoitem%] already exist! &if [exists %grid% -grid] = .FALSE. &then &return &inform Grid [upcase %grid%] does not exist! &if [iteminfo %cov%.aat -info %item% -exists] = .FALSE. &then &return &inform Item [upcase %item%] does not exist! &if [exists %cov% -cover] = .FALSE. &then &return &inform Coverage [upcase %cov%] does not exist! &if [exists %cov% -line] = .FALSE. &then &return &inform [upcase %cov%] does not appear to be a line coverage or lacks topology! &s tmp1 [scratchname -prefix xx1] &s tmp2 [scratchname -prefix xx2] &s tmp3 [scratchname -prefix xx3] &s tmp4 [scratchname -prefix xx4] /*=================================================================================== &TYPE /& CREATING BASE FILES FOR GRADIENT CALCULATION /& /*=================================================================================== NODEPOINT %cov% %tmp1% BUILD %tmp1% point /*=================================================================================== &TYPE /& GENERATING ELEVATION VALUES FOR EACH NODE /& /*=================================================================================== additem %tmp1%.pat %tmp1%.pat %grid% 4 12 f 3 display 0 ARCPLOT &messages &off cursor ptcur declare %tmp1% points rw cursor ptcur open &echo &off &do &while %:ptcur.aml$next% &s temp [show cellvalue %grid% [show select %tmp1% point 1 xy]] &if [type %temp%] = 1 &then &s :ptcur.%grid% -9999 &else &s :ptcur.%grid% %temp% cursor ptcur next &end QUIT &messages &on /*=================================================================================== &TYPE /& RELATING LINE COVERAGE TO POINT SAMPLES /& /*=================================================================================== PULLITEMS %cov%.aat %tmp2% FNODE# TNODE# LENGTH %item% END TABLES ADDITEM %tmp2% RISE 4 6 F 3 SEL %tmp2% RELATE ADD R1 %tmp1%.PAT INFO FNODE# %tmp1%# ORDERED RO R2 %tmp1%.PAT INFO TNODE# %tmp1%# ORDERED RO [UNQUOTE ' '] /*=================================================================================== &TYPE /& CALCULATING RISE FOR EACH ARC /& /*=================================================================================== SEL %tmp2% RESELECT R1//%grid% > R2//%grid% CALCULATE RISE = R1//%grid% - R2//%grid% NSELECT %tmp2% CALCULATE RISE = R2//%grid% - R1//%grid% /*=================================================================================== &TYPE /& SUMARIZING LENGTH AND RISE BY [upcase %item%] /& /*=================================================================================== SEL %tmp2% STATISTICS %item% %tmp3% SUM LENGTH SUM RISE END ADDITEM %tmp3% %infoitem% 4 6 F 3 /*=================================================================================== &TYPE /& CALCULATING GRADIENT /& /*=================================================================================== SEL %tmp3% CALCULATE %infoitem% = SUM-RISE / SUM-LENGTH * 100 QUIT /*=================================================================================== &TYPE /& ADDING [upcase %infoitem%] TO [upcase %cov%] /& /*=================================================================================== PULLITEMS %tmp3% %tmp3% %item% %infoitem% END JOINITEM %cov%.aat %tmp3% %cov%.aat %item% /*=================================================================================== &TYPE /& CLEANING UP /& /*=================================================================================== KILL %tmp1% all KILLINFO (!%tmp2% %tmp3%!) RELATE DROP r1 r2 [UNQUOTE ' ']