Tenterò di rispondere alla mia domanda: dun dun dun.
Ho usato SAGA GIS per esaminare le differenze nei bacini idrografici riempiti usando il loro strumento di riempimento basato su Planchon e Darboux (PD) (e il loro strumento di riempimento basato su Wang e Liu (WL) per 6 diversi bacini idrografici. (Qui mostro solo due casi di risultati - erano simili in tutti e 6 i bacini idrici) dico "basato", perché c'è sempre la domanda se le differenze siano dovute all'algoritmo o all'implementazione specifica dell'algoritmo.
I DEM di spartiacque sono stati generati ritagliando i dati NED a mosaico di 30 m utilizzando USGS forniti shapefile spartiacque. Per ogni DEM di base sono stati eseguiti i due strumenti; esiste solo un'opzione per ogni strumento, la pendenza minima forzata, impostata in entrambi gli strumenti su 0,01.
Dopo aver riempito i bacini idrografici, ho usato il calcolatore raster per determinare le differenze nelle griglie risultanti - queste differenze dovrebbero essere dovute solo ai diversi comportamenti dei due algoritmi.
Le immagini che rappresentano le differenze o la mancanza di differenze (sostanzialmente il raster delle differenze calcolate) sono presentate di seguito. La formula utilizzata nel calcolo delle differenze era: (((PD_Filled - WL_Filled) / PD_Filled) * 100) - indica la differenza percentuale su una cella per cella. Le celle di colore grigio mostrano ora una differenza, con celle di colore più rosso che indicano che l'elevazione PD risultante era maggiore e celle di colore più verde che indica l'elevazione WL risultante era maggiore.
1st Watershed: Clear Watershed, Wyoming
Ecco la leggenda di queste immagini:
Le differenze vanno solo da -0,0915% a + 0,0910%. Le differenze sembrano concentrarsi su picchi e canali a flusso stretto, con l'algoritmo WL leggermente più alto nei canali e PD leggermente più alto attorno ai picchi localizzati.
Clear Watershed, Wyoming, Zoom 1
Clear Watershed, Wyoming, Zoom 2
2 ° spartiacque: fiume Winnipesaukee, NH
Ecco la leggenda di queste immagini:
Winnipesaukee River, NH, Zoom 1
Le differenze vanno solo da -0,323% a + 0,315%. Le differenze sembrano concentrarsi su picchi e canali a flusso stretto, con (come prima) l'algoritmo WL leggermente più alto nei canali e PD leggermente più alto attorno ai picchi localizzati.
Sooooooo, pensieri? A mio avviso, le differenze sembrano insignificanti e probabilmente non influenzeranno ulteriori calcoli; qualcuno è d'accordo? Sto verificando completando il mio flusso di lavoro per questi sei bacini idrografici.
Modifica: ulteriori informazioni. Sembra che l'algoritmo WL porti a canali più ampi e meno distinti, causando alti valori dell'indice topografico (il mio set di dati derivato finale). L'immagine a sinistra in basso è l'algoritmo PD, l'immagine a destra è l'algoritmo WL.
Queste immagini mostrano la differenza nell'indice topografico nelle stesse posizioni - aree più bagnate più ampie (più canale - più rosso, TI più alto) nella foto WL a destra; canali più stretti (meno area bagnata - meno rosso, area rossa più stretta, TI inferiore nell'area) nella foto PD a sinistra.
Inoltre, ecco come PD ha gestito (a sinistra) una depressione e come WL l'ha gestita (a destra) - nota il segmento / linea arancione sollevato (indice topografico inferiore) che attraversa la depressione nell'output riempito di WL?
Quindi le differenze, per quanto piccole, sembrano scorrere attraverso le analisi aggiuntive.
Ecco il mio script Python se qualcuno è interessato:
#! /usr/bin/env python
# ----------------------------------------------------------------------
# Create Fill Algorithm Comparison
# Author: T. Taggart
# ----------------------------------------------------------------------
import os, sys, subprocess, time
# function definitions
def runCommand_logged (cmd, logstd, logerr):
p = subprocess.call(cmd, stdout=logstd, stderr=logerr)
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# environmental variables/paths
if (os.name == "posix"):
os.environ["PATH"] += os.pathsep + "/usr/local/bin"
else:
os.environ["PATH"] += os.pathsep + "C:\program files (x86)\SAGA-GIS"
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# global variables
WORKDIR = "D:\TomTaggart\DepressionFillingTest\Ran_DEMs"
# This directory is the toplevel directoru (i.e. DEM_8)
INPUTDIR = "D:\TomTaggart\DepressionFillingTest\Ran_DEMs"
STDLOG = WORKDIR + os.sep + "processing.log"
ERRLOG = WORKDIR + os.sep + "processing.error.log"
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# open logfiles (append in case files are already existing)
logstd = open(STDLOG, "a")
logerr = open(ERRLOG, "a")
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# initialize
t0 = time.time()
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# loop over files, import them and calculate TWI
# this for loops walks through and identifies all the folder, sub folders, and so on.....and all the files, in the directory
# location that is passed to it - in this case the INPUTDIR
for dirname, dirnames, filenames in os.walk(INPUTDIR):
# print path to all subdirectories first.
#for subdirname in dirnames:
#print os.path.join(dirname, subdirname)
# print path to all filenames.
for filename in filenames:
#print os.path.join(dirname, filename)
filename_front, fileext = os.path.splitext(filename)
#print filename
if filename_front == "w001001":
#if fileext == ".adf":
# Resetting the working directory to the current directory
os.chdir(dirname)
# Outputting the working directory
print "\n\nCurrently in Directory: " + os.getcwd()
# Creating new Outputs directory
os.mkdir("Outputs")
# Checks
#print dirname + os.sep + filename_front
#print dirname + os.sep + "Outputs" + os.sep + ".sgrd"
# IMPORTING Files
# --------------------------------------------------------------
cmd = ['saga_cmd', '-f=q', 'io_gdal', 'GDAL: Import Raster',
'-FILES', filename,
'-GRIDS', dirname + os.sep + "Outputs" + os.sep + filename_front + ".sgrd",
#'-SELECT', '1',
'-TRANSFORM',
'-INTERPOL', '1'
]
print "Beginning to Import Files"
try:
runCommand_logged(cmd, logstd, logerr)
except Exception, e:
logerr.write("Exception thrown while processing file: " + filename + "\n")
logerr.write("ERROR: %s\n" % e)
print "Finished importing Files"
# --------------------------------------------------------------
# Resetting the working directory to the ouputs directory
os.chdir(dirname + os.sep + "Outputs")
# Depression Filling - Wang & Liu
# --------------------------------------------------------------
cmd = ['saga_cmd', '-f=q', 'ta_preprocessor', 'Fill Sinks (Wang & Liu)',
'-ELEV', filename_front + ".sgrd",
'-FILLED', filename_front + "_WL_filled.sgrd", # output - NOT optional grid
'-FDIR', filename_front + "_WL_filled_Dir.sgrd", # output - NOT optional grid
'-WSHED', filename_front + "_WL_filled_Wshed.sgrd", # output - NOT optional grid
'-MINSLOPE', '0.0100000',
]
print "Beginning Depression Filling - Wang & Liu"
try:
runCommand_logged(cmd, logstd, logerr)
except Exception, e:
logerr.write("Exception thrown while processing file: " + filename + "\n")
logerr.write("ERROR: %s\n" % e)
print "Done Depression Filling - Wang & Liu"
# Depression Filling - Planchon & Darboux
# --------------------------------------------------------------
cmd = ['saga_cmd', '-f=q', 'ta_preprocessor', 'Fill Sinks (Planchon/Darboux, 2001)',
'-DEM', filename_front + ".sgrd",
'-RESULT', filename_front + "_PD_filled.sgrd", # output - NOT optional grid
'-MINSLOPE', '0.0100000',
]
print "Beginning Depression Filling - Planchon & Darboux"
try:
runCommand_logged(cmd, logstd, logerr)
except Exception, e:
logerr.write("Exception thrown while processing file: " + filename + "\n")
logerr.write("ERROR: %s\n" % e)
print "Done Depression Filling - Planchon & Darboux"
# Raster Calculator - DIff between Planchon & Darboux and Wang & Liu
# --------------------------------------------------------------
cmd = ['saga_cmd', '-f=q', 'grid_calculus', 'Grid Calculator',
'-GRIDS', filename_front + "_PD_filled.sgrd",
'-XGRIDS', filename_front + "_WL_filled.sgrd",
'-RESULT', filename_front + "_DepFillDiff.sgrd", # output - NOT optional grid
'-FORMULA', "(((g1-h1)/g1)*100)",
'-NAME', 'Calculation',
'-FNAME',
'-TYPE', '8',
]
print "Depression Filling - Diff Calc"
try:
runCommand_logged(cmd, logstd, logerr)
except Exception, e:
logerr.write("Exception thrown while processing file: " + filename + "\n")
logerr.write("ERROR: %s\n" % e)
print "Done Depression Filling - Diff Calc"
# ----------------------------------------------------------------------
# ----------------------------------------------------------------------
# finalize
logstd.write("\n\nProcessing finished in " + str(int(time.time() - t0)) + " seconds.\n")
logstd.close
logerr.close
# ----------------------------------------------------------------------