Tentarei responder minha própria pergunta - dun dun dun.
Usei o SAGA GIS para examinar as diferenças em bacias hidrográficas cheias, usando a ferramenta de preenchimento baseada em Planchon e Darboux (PD) (e a ferramenta de preenchimento baseada em Wang e Liu (WL) para 6 bacias hidrográficas diferentes. (Aqui, apenas mostro dois conjuntos de resultados - foram semelhantes em todas as 6 bacias hidrográficas) digo "com base", porque sempre há a questão de saber se as diferenças são devidas ao algoritmo ou à implementação específica do algoritmo.
Os DEMs das bacias hidrográficas foram gerados por recorte de dados de NED de 30 m em mosaico, usando USGS, fornecendo arquivos de formas da bacia hidrográfica. Para cada DEM base, as duas ferramentas foram executadas; há apenas uma opção para cada ferramenta, a inclinação mínima aplicada, que foi definida nas duas ferramentas como 0,01.
Depois que as bacias hidrográficas foram preenchidas, usei a calculadora raster para determinar as diferenças nas grades resultantes - essas diferenças só devem-se aos diferentes comportamentos dos dois algoritmos.
Imagens representando as diferenças ou a falta de diferenças (basicamente a varredura da diferença calculada) são apresentadas abaixo. A fórmula usada no cálculo das diferenças foi: (((PD_Filled - WL_Filled) / PD_Filled) * 100) - forneça a diferença percentual célula por célula. As células de cor cinza mostram agora a diferença, com as células de cor mais avermelhada indicando que a elevação de PD resultante foi maior e as células de cor mais verde indicando que a elevação de WL resultante foi maior.
1ª Bacia Hidrográfica: Clear Watershed, Wyoming
Aqui está a legenda para estas imagens:
As diferenças variam apenas de -0,0915% a + 0,0910%. As diferenças parecem estar focadas em picos e canais de fluxo estreitos, com o algoritmo WL um pouco mais alto nos canais e PD um pouco mais alto em torno dos picos localizados.
Clear Watershed, Wyoming, Zoom 1
Bacias Climáticas, Wyoming, Zoom 2
2nd Watershed: Rio Winnipesaukee, NH
Aqui está a legenda para estas imagens:
Winnipesaukee River, NH, Zoom 1
As diferenças variam apenas de -0,323% a + 0,315%. As diferenças parecem estar focadas em picos e canais de fluxo estreitos, com (como antes) o algoritmo WL um pouco mais alto nos canais e PD um pouco mais alto em torno dos picos localizados.
Tãããããão, pensamentos? Para mim, as diferenças parecem triviais provavelmente não afetam cálculos adicionais; alguém concorda? Estou verificando concluindo meu fluxo de trabalho para essas seis bacias hidrográficas.
Editar: Mais informações. Parece que o algoritmo WL leva a canais mais amplos e menos distintos, causando altos valores de índice topográfico (meu conjunto de dados derivado final). A imagem à esquerda abaixo é o algoritmo PD, a imagem à direita é o algoritmo WL.
Essas imagens mostram a diferença no índice topográfico nos mesmos locais - áreas mais úmidas (mais canal - mais vermelho, maior TI) na foto WL à direita; canais mais estreitos (menos área úmida - menos vermelho, área vermelha mais estreita, menor área de TI) na foto do PD à esquerda.
Além disso, aqui está como o PD lidou com (à esquerda) uma depressão e como o WL tratou (à direita) - observe o segmento / linha laranja aumentada (índice topográfico inferior) cruzando a depressão na saída preenchida pelo WL?
Portanto, as diferenças, por menores que sejam, parecem passar pelas análises adicionais.
Aqui está o meu script Python, se alguém estiver interessado:
#! /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
# ----------------------------------------------------------------------