Je vais essayer de répondre à ma propre question - dun dun dun.
J'ai utilisé SAGA GIS pour examiner les différences entre les bassins versants remplis en utilisant leur outil de remplissage basé sur Planchon et Darboux (PD) (et leur outil de remplissage basé sur Wang et Liu (WL) pour 6 bassins versants différents. (Ici, je ne montre que deux séries de résultats - ils étaient similaires dans les 6 bassins versants), je dis «basé», car il y a toujours la question de savoir si les différences sont dues à l'algorithme ou à la mise en œuvre spécifique de l'algorithme.
Les MNT des bassins versants ont été générés en découpant les données NED mosaïques de 30 m à l'aide des fichiers de formes des bassins versants fournis par l'USGS. Pour chaque DEM de base, les deux outils ont été exécutés; il n'y a qu'une seule option pour chaque outil, la pente forcée minimale, qui a été définie dans les deux outils à 0,01.
Une fois les bassins versants remplis, j'ai utilisé la calculatrice raster pour déterminer les différences dans les grilles résultantes - ces différences ne devraient être dues qu'aux comportements différents des deux algorithmes.
Des images représentant les différences ou l'absence de différences (essentiellement le raster de différence calculé) sont présentées ci-dessous. La formule utilisée pour calculer les différences était la suivante: (((PD_Filled - WL_Filled) / PD_Filled) * 100) - donne le pourcentage de différence cellule par cellule. Les cellules de couleur grise montrent maintenant une différence, avec des cellules de couleur plus rouge indiquant que l'élévation PD résultante était plus grande, et des cellules de couleur plus verte indiquant l'élévation WL résultante était plus grande.
1er bassin versant: bassin versant clair, Wyoming
Voici la légende de ces images:
Les différences ne varient que de -0,0915% à + 0,0910%. Les différences semblent se concentrer autour des pics et des canaux de flux étroits, avec l'algorithme WL légèrement plus élevé dans les canaux et PD légèrement plus élevé autour des pics localisés.
Bassin versant clair, Wyoming, Zoom 1
Bassin versant clair, Wyoming, Zoom 2
2e bassin versant: rivière Winnipesaukee, NH
Voici la légende de ces images:
Rivière Winnipesaukee, NH, Zoom 1
Les différences ne varient que de -0,323% à + 0,315%. Les différences semblent se concentrer autour des pics et des canaux de flux étroits, avec (comme précédemment) l'algorithme WL légèrement plus élevé dans les canaux et PD légèrement plus élevé autour des pics localisés.
Sooooooo, des pensées? Pour moi, les différences semblent minimes ne sont probablement pas susceptibles d'affecter d'autres calculs; quelqu'un est d'accord? Je vérifie en complétant mon flux de travail pour ces six bassins versants.
Modifier: Plus d'informations. Il semble que l'algorithme WL mène à des canaux moins distincts et plus larges, provoquant des valeurs d'index topographiques élevées (mon jeu de données dérivé final). L'image de gauche ci-dessous est l'algorithme PD, l'image de droite est l'algorithme WL.
Ces images montrent la différence d'index topographique aux mêmes endroits - des zones plus humides et plus larges (plus de canal - plus rouge, TI plus élevé) dans le pic WL à droite; canaux plus étroits (zone moins humide - moins rouge, zone rouge plus étroite, TI inférieur dans la zone) dans la photo PD à gauche.
De plus, voici comment PD a géré (à gauche) une dépression et comment WL l'a gérée (à droite) - remarquez le segment / ligne orange surélevé (indice topographique inférieur) traversant la dépression dans la sortie remplie de WL?
Par conséquent, les différences, si minimes soient-elles, semblent se répercuter sur les analyses supplémentaires.
Voici mon script Python si quelqu'un est intéressé:
#! /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
# ----------------------------------------------------------------------