/* ----------------------------------------------------------------- ---------- /* Filename: focalcurve /* /* Author: Logicon Geodynamics; Carol Gehardt /* based on algorithm developed by: /* Jacek Blaszczynski, Physical /* Scientist,BLM NARSC and described in: /* Blaszczynski, J., 1997. Landform /* Characterization with GIS, PE&RS /* February, 1997. /* /* Non Portable Feature: None /* /* Assumptions: None /* /* Inputs: Ingrid File Name /* outgrid File Name /* Average slope grid File Name /* Negative average slope grid File Name /* Positive average slope grid File Name /* Negative count grid File Name /* Positive count grid File Name /* Kernel file /* Neighborhood shape /* Neighborhood cell width /* Neighborhood cell height /* Neighborhood outer radius /* Neighborhood inner radius /* Neighborhood quadrent direction /* /* Outputs: Focalcurve grid /* Average slope grid /* Negative average slope grid /* Positive average slope grid /* Negative count grid /* Positive count grid /* /* Description: Each cell of the input grid is processed /* using the specified neighborhood. For each /* neighborhood cell calculate the rise (value /* of center cell minus value of neighbor cell) /* and run (horizontal distance between the /* center cell and the neighbor cell). The slope /* is rise over run. Create the output grids /* from the accumulated slope values. /* /* Usage: USAGE {-a } /* {-na } {-pa } /* {-nc } {-pc } /* /*--------------------------------------------------------------- ----------- /* /* Accept input parameters /* &ARGS arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 &if [null %arg1%] &then &return &inform USAGE {-a } {-na } {-pa < pos_ave_grid>} {-nc } {-pc < pos_count_grid>} &else &setvar ingrid = %arg1% &if [null %arg2%] &then &return &inform USAGE {-a } {-na } {-pa } {-nc } {-pc } &else &setvar focalcurve_grid = %arg2% /* /* Set defaults /* &setvar ave_slope_grid = NO_FILE &setvar neg_ave_grid = NO_FILE &setvar pos_ave_grid = NO_FILE &setvar neg_count_grid = NO_FILE &setvar pos_count_grid = NO_FILE &setvar kernel_file = NO_FILE &setvar shape = 1 &setvar height = 3 &setvar width = 3 &setvar outer_radius = 0 &setvar inner_radius = 0 &setvar direction = 0 /* /* Set loop variables /* &setvar arg = %arg3% &setvar argindex = 3 &do &while ^ [null %arg%] &select %arg% &when -a &do &setvar argindex = %argindex% + 1 &setvar ave_slope_grid = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when -pa &do &setvar argindex = %argindex% + 1 &setvar pos_ave_grid = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when -na &do &setvar argindex = %argindex% + 1 &setvar neg_ave_grid = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when -pc &do &setvar argindex = %argindex% + 1 &setvar pos_count_grid = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when -nc &do &setvar argindex = %argindex% + 1 &setvar neg_count_grid = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when RECTANGLE &do &setvar shape = 1 &setvar argindex = %argindex% + 1 &setvar width = [value arg%argindex%] &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &setvar height = %width% &else &setvar height = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when rectangle &do &setvar shape = 1 &setvar argindex = %argindex% + 1 &setvar width = [value arg%argindex%] &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &setvar height = %width% &else &setvar height = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when CIRCLE &do &setvar shape = 2 &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &setvar outer_radius = 1 &else &setvar outer_radius = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &setvar height = %outer_radius% * 2 + 1 &setvar width = %height% &end &when circle &do &setvar shape = 2 &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &setvar outer_radius = 1 &else &setvar outer_radius = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &setvar height = %outer_radius% * 2 + 1 &setvar width = %height% &end &when annulus &do &setvar shape = 3 &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &setvar inner_radius = 1 &else &setvar inner_radius = [value arg%argindex%] &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &setvar outer_radius = 2 &else &setvar outer_radius = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &setvar height = %outer_radius% * 2 + 1 &setvar width = %height% &end &when ANNULUS &do &setvar shape = 3 &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &setvar inner_radius = 1 &else &setvar inner_radius = [value arg%argindex%] &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &setvar outer_radius = 2 &else &setvar outer_radius = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &setvar height = %outer_radius% * 2 + 1 &setvar width = %height% &end &when wedge &do &setvar shape = 4 &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &setvar outer_radius = 1 &else &setvar outer_radius = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &setvar height = %outer_radius% * 2 + 1 &setvar width = %height% &setvar char_direction = [value arg%argindex%] &if %char_direction% = E &then &do &setvar direction = 1 &end &else &if %char_direction% = N &then &do &setvar direction = 2 &end &else &if %char_direction% = W &then &do &setvar direction = 3 &end &else &if %char_direction% = S &then &do &setvar direction = 4 &end &else &do &setvar direction = 2 &end &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when WEDGE &do &setvar shape = 4 &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &setvar outer_radius = 1 &else &setvar outer_radius = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &setvar height = %outer_radius% * 2 + 1 &setvar width = %height% &setvar char_direction = [value arg%argindex%] &if %char_direction% == E &then &do &setvar direction = 1 &end &else &if %char_direction% == N &then &do &setvar direction = 2 &end &else &if %char_direction% == W &then &do &setvar direction = 3 &end &else &if %char_direction% == S &then &do &setvar direction = 4 &end &else &do &setvar direction = 2 &end &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when irregular &do &setvar shape = 5 &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &return &inform USAGE {-a } {-na } {-pa < pos_ave_grid>} {-nc } {-pc < pos_count_grid>} &else &setvar kernel_file = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when IRREGULAR &do &setvar shape = 5 &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &return &inform USAGE {-a } {-na } {-pa < pos_ave_grid>} {-nc } {-pc < pos_count_grid>} &else &setvar kernel_file = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when weight &do &setvar shape = 6 &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &return &inform USAGE {-a } {-na } {-pa < pos_ave_grid>} {-nc } {-pc < pos_count_grid>} &else &setvar kernel_file = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &when WEIGHT &do &setvar shape = 6 &setvar argindex = %argindex% + 1 &if [null [value arg%argindex%]] &then &return &inform USAGE {-a } {-na } {-pa < pos_ave_grid>} {-nc } {-pc < pos_count_grid>} &else &setvar kernel_file = [value arg%argindex%] &setvar argindex = %argindex% + 1 &setvar arg = [value arg%argindex%] &end &otherwise &return &inform USAGE {-a } {-na } {-pa < pos_ave_grid>} {-nc } {-pc < pos_count_grid>} &end /* select &end /* do /* /* Convert ingrid to ascii and make system call to create output /* ascii files. /* gridascii %ingrid% %ingrid%.temp_ascii &sys focalcurve %ingrid%.temp_ascii %focalcurve_grid%.temp_ascii %ave_slope_grid%.temp_ascii %neg_ave_grid%.temp_ascii %pos_ave_grid%.temp_ascii %neg_count_grid%.temp_ascii %pos_count_grid%.temp_ascii %shape% %width% %height% %outer_radius% %inner_radius% %direction% %kernel_file% /* /* Convert .temp_ascii back to grid /* &type ...copying projection information &type ...deleting temporary files &if [COPY %ingrid%.prj %focalcurve_grid%.prj -FILE] ne 0 &then &type No projection information exists for input grid. asciigrid %focalcurve_grid%.temp_ascii %focalcurve_grid% float &if [DELETE %focalcurve_grid%.temp_ascii -FILE] ne 0 &then &type Unable to delete temporary file %focalcurve_grid%.temp_ascii. &if [DELETE %focalcurve_grid%.prj -FILE] ne 0 &then &type Unable to delete temporary file %focalcurve_grid%.prj. &if %ave_slope_grid% ^= NO_FILE &then &do &if [COPY %ingrid%.prj %ave_slope_grid%.prj -FILE] ne 0 &then &type ... asciigrid %ave_slope_grid%.temp_ascii %ave_slope_grid% float &if [DELETE %ave_slope_grid%.temp_ascii -FILE] ne 0 &then &type Unable to delete temporary file %ave_slope_grid%.temp_ascii. &if [DELETE %ave_slope_grid%.prj -FILE] ne 0 &then &type Unable to delete temporary file %ave_slope_grid%.prj &end &if %neg_ave_grid% ^= NO_FILE &then &do &if [COPY %ingrid%.prj %neg_ave_grid%.prj -FILE] ne 0 &then &type ... asciigrid %neg_ave_grid%.temp_ascii %neg_ave_grid% float &if [DELETE %neg_ave_grid%.temp_ascii -FILE] ne 0 &then &type Unable to delete temporary file %neg_ave_grid%.temp_ascii. &if [DELETE %neg_ave_grid%.prj -FILE] ne 0 &then &type Unable to delete temporary file %neg_ave_grid%.prj &end &if %pos_ave_grid% ^= NO_FILE &then &do &if [COPY %ingrid%.prj %pos_ave_grid%.prj -FILE] ne 0 &then &type ... asciigrid %pos_ave_grid%.temp_ascii %pos_ave_grid% float &if [DELETE %pos_ave_grid%.temp_ascii -FILE] ne 0 &then &type Unable to delete temporary file %pos_ave_grid%.temp_ascii. &if [DELETE %pos_ave_grid%.prj -FILE] ne 0 &then &then Unable to delete temporary file %pos_ave_grid%.prj &end &if %neg_count_grid% ^= NO_FILE &then &do &if [COPY %ingrid%.prj %neg_count_grid%.prj -FILE] ne 0 &then &type ... asciigrid %neg_count_grid%.temp_ascii %neg_count_grid% float &if [DELETE %neg_count_grid%.temp_ascii -FILE] ne 0 &then &type Unable to delete temporary file %neg_count_grid%.temp_ascii. &if [DELETE %neg_count_grid%.prj -FILE] ne 0 &then &type Unable to delete temporary file %neg_count_grid%.prj &end &if %pos_count_grid% ^= NO_FILE &then &do &if [COPY %ingrid%.prj %pos_count_grid%.prj -FILE] ne 0 &then &type ... asciigrid %pos_count_grid%.temp_ascii %pos_count_grid% float &if [DELETE %pos_count_grid%.temp_ascii -FILE] ne 0 &then &type Unable to delete temporary file %pos_count_grid%.temp_ascii. &if [DELETE %pos_count_grid%.prj -FILE] ne 0 &then &type Unable to delete temporary file %pos_count_grid%.prj. &end &if [DELETE %ingrid%.temp_ascii -FILE] ne 0 &then &type Unable to delete temporary file %ingrid%.temp_ascii. &if [DELETE %ingrid%.prj -FILE] ne 0 &then &type Unable to delete temporary file %ingrid%.prj.