Kendi sorumu cevaplamaya çalışacağım - dun dun dun.
SAGA GIS'i 6 farklı havza için Planchon ve Darboux (PD) tabanlı doldurma aracını (ve Wang ve Liu (WL) tabanlı doldurma aracını kullanarak doldurulmuş havzalardaki farklılıkları incelemek için kullandım. "Havza" diyorum, çünkü farklılıkların algoritmaya mı yoksa algoritmanın özel uygulanmasına mı bağlı olduğu sorusu her zaman vardır.
Havza DEM'leri USGS tarafından sağlanan havza şekil dosyaları kullanılarak mozaikli NED 30 m verilerinin kırpılmasıyla oluşturulmuştur. Her baz DEM için iki araç çalıştırıldı; her bir alet için sadece bir seçenek vardır, her iki alette de 0,01 olarak ayarlanmış minimum zorlanmış eğim.
Havzalar doldurulduktan sonra, sonuçtaki ızgaralardaki farklılıkları belirlemek için raster hesap makinesini kullandım - bu farklılıklar sadece iki algoritmanın farklı davranışlarından kaynaklanmalıdır.
Farklılıkları veya farklılıkları temsil eden görüntüler (temel olarak hesaplanan fark tarama) aşağıda sunulmuştur. Farklılıkların hesaplanmasında kullanılan formül: (((PD_Filled - WL_Filled) / PD_Filled) * 100) - hücre bazında hücre bazında yüzde farkını verir. Rengi gri olan hücreler artık farklılık gösterir, sonuçta ortaya çıkan PD yükselmesinin daha büyük olduğunu gösteren renklerin daha kırmızı olması ve sonuçta ortaya çıkan WL yükselmesinin daha büyük olduğunu gösteren renklerin daha yeşil olması gerekir.
1. Havza: Berrak Havza, Wyoming
İşte bu görüntüler için efsane:
Farklılıklar sadece% -0.0915 ila +% 0.0910 arasındadır. WL algoritması kanallarda biraz daha yüksek ve PD lokalize pikler etrafında biraz daha yüksek olmak üzere, farklılıklar pikler ve dar akış kanalları etrafında odaklanmış gibi görünmektedir.
Temiz Havza, Wyoming, Zoom 1
Berrak Havza, Wyoming, Zoom 2
2. Havza: Winnipesaukee Nehri, NH
İşte bu görüntüler için efsane:
Winnipesaukee Nehri, NH, Zoom 1
Farklılıklar yalnızca% -0.323 ile +% 0.315 arasında değişir. Farklılıklar pikler ve dar akış kanalları etrafında odaklanmış gibi görünmektedir, WL algoritması kanallarda biraz daha yüksek ve PD lokalize pikler etrafında biraz daha yüksektir.
Sooooooo, düşünceler? Bana göre, farklar önemsiz gibi görünüyor muhtemelen daha fazla hesaplamayı etkilemez; kabul eden var mı? Bu altı havza için iş akışımı tamamlayarak kontrol ediyorum.
Edit: Daha fazla bilgi. WL algoritmasının daha az belirgin kanallara yol açtığı ve yüksek topografik indeks değerlerine (nihai türev veri setim) neden olduğu görülmektedir. Aşağıdaki soldaki görüntü PD algoritması, sağdaki görüntü WL algoritmasıdır.
Bu görüntüler, aynı konumlardaki topografik indeksteki farkı gösterir - sağdaki WL resminde daha geniş ıslanan alanlar (daha fazla kanal - daha kırmızı, daha yüksek TI); soldaki PD resminde daha dar kanallar (daha az ıslak alan - daha az kırmızı, daha dar kırmızı alan, alanda daha düşük TI).
Ek olarak, PD'nin bir depresyonu nasıl ele aldığı (solda) ve WL'yi nasıl ele aldığı (sağda) - WL dolgulu çıktıdaki depresyondan yükseltilmiş turuncu (alt Topografik indeks) segment / çizgi geçişini fark ettiniz mi?
Bu nedenle, küçük farklar da olsa, ek analizler sonucunda akıcı görünüyor.
Eğer ilgilenen varsa benim Python betiğim:
#! /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
# ----------------------------------------------------------------------