मैं अपने ही सवाल का जवाब देने का प्रयास करूंगा - डन डन डन।
मैंने SAGA GIS का उपयोग 6 अलग-अलग वाटरशेड के लिए उनके प्लांचन और डार्बौक्स (PD) आधारित फिलिंग टूल (और उनके वांग और लियू (WL)) आधारित फिलिंग टूल का उपयोग करके भरे हुए वाटरशेड में अंतर की जांच करने के लिए किया। (यहां मैं केवल परिणामों के दो सेट दिखाता हूं - वे सभी 6 वाटरशेडों के समान थे) मैं कहता हूं कि "आधारित" है, क्योंकि हमेशा यह सवाल होता है कि क्या एल्गोरिथ्म या एल्गोरिथ्म के विशिष्ट कार्यान्वयन के कारण मतभेद हैं।
वाटरशेड डीईएम का उपयोग यूएसजीएस द्वारा प्रदान किए गए वाटरशेड शेपफाइल्स का उपयोग करते हुए एनओएस 30 मीटर डेटा क्लिपिंग द्वारा उत्पन्न किया गया था। प्रत्येक बेस डेम के लिए, दो उपकरण चलाए गए थे; प्रत्येक उपकरण के लिए केवल एक ही विकल्प है, न्यूनतम लागू ढलान, जिसे दोनों उपकरण में 0.01 पर सेट किया गया था।
वाटरशेड भरे जाने के बाद, मैंने परिणामी ग्रिड में अंतर को निर्धारित करने के लिए रास्टर कैलकुलेटर का उपयोग किया - ये अंतर केवल दो एल्गोरिदम के विभिन्न व्यवहारों के कारण होना चाहिए।
मतभेदों या अंतर की कमी (मूल रूप से गणना अंतर रेखापुंज) का प्रतिनिधित्व करने वाले चित्र नीचे प्रस्तुत किए गए हैं। अंतर की गणना में उपयोग किया जाने वाला सूत्र था: (((PD_Filled - WL_Filled) / PD_Filled) * 100) - सेल के आधार पर सेल पर प्रतिशत अंतर दें। रंग में सेल ग्रे अब अंतर दिखाते हैं, रंग में कोशिकाओं के साथ रेडर जिसके परिणामस्वरूप पीडी ऊँचाई अधिक होती है, और रंग में सेल ग्रेनर जिसके परिणामस्वरूप WL ऊंचाई अधिक थी।
1 वाटरशेड: क्लियर वाटरशेड, वायोमिंग
यहाँ इन छवियों के लिए किंवदंती है:
अंतर केवल -0.0915% से + 0.0910% तक होता है। मतभेद चोटियों और संकीर्ण धारा चैनलों के आसपास केंद्रित किए गए प्रतीत होते हैं, जिसमें WL एल्गोरिथ्म चैनलों में थोड़ा अधिक है और स्थानीय चोटियों के आसपास पीडी थोड़ा अधिक है।
क्लियर वाटरशेड, व्योमिंग, ज़ूम 1
क्लियर वाटरशेड, वायोमिंग, ज़ूम 2
दूसरा वाटरशेड: विन्निपसाउकी नदी, एनएच
यहाँ इन छवियों के लिए किंवदंती है:
विन्निपसाउकी नदी, एनएच, ज़ूम 1
अंतर केवल -0.323% से + 0.315% तक होता है। मतभेद चोटियों और संकीर्ण धारा चैनलों के आसपास केंद्रित होने लगते हैं, (पहले के रूप में) चैनलों में डब्ल्यूएल एल्गोरिथ्म थोड़ा और पीडी स्थानीयकृत चोटियों के आसपास थोड़ा अधिक है।
Sooooooo, विचार? मेरे लिए, मतभेद तुच्छ प्रतीत होते हैं, संभवतः आगे की गणनाओं को प्रभावित करने की संभावना नहीं है; कोई सहमत है? मैं इन छह वाटरशेड के लिए अपने वर्कफ़्लो को पूरा करके जाँच कर रहा हूँ।
संपादित करें: अधिक जानकारी। ऐसा लगता है कि डब्लूएल एल्गोरिथ्म कम व्यापक चैनलों की ओर जाता है, जिससे उच्च स्थलाकृतिक सूचकांक मान (मेरा अंतिम व्युत्पन्न डेटा सेट) होता है। नीचे बाईं ओर की छवि पीडी एल्गोरिथ्म है, दाईं ओर की छवि डब्ल्यूएल एल्गोरिथ्म है।
ये छवियां समान स्थानों पर स्थलाकृतिक सूचकांक में अंतर दिखाती हैं - दाईं ओर डब्ल्यूएल तस्वीर में व्यापक गीले क्षेत्र (अधिक चैनल - रेडर, उच्च टीआई); संकरी चैनल (कम गीला क्षेत्र - कम लाल, संकरा लाल क्षेत्र, क्षेत्र में कम तिवारी) बाईं ओर पीडी तस्वीर में।
इसके अतिरिक्त, यहाँ पीडी को एक डिप्रेशन (बाएं) को कैसे संभाला जाता है और डब्ल्यूएल ने इसे (दाएं) कैसे संभाला है - उठाया ऑरेंज (लोअर टोपोग्राफिक इंडेक्स) सेगमेंट / लाइन को डीएलआर भरे आउटपुट में डिप्रेशन से पार करते हुए नोटिस करें?
तो मतभेद, हालांकि, छोटे, अतिरिक्त विश्लेषण के माध्यम से चकरा देने लगते हैं।
अगर कोई दिलचस्पी रखता है तो यहां मेरी पायथन लिपि है:
#! /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
# ----------------------------------------------------------------------