Я спробую відповісти на власне питання - dun dun dun.
Я використовував ГІС SAGA, щоб вивчити відмінності заповнених вододілів, використовуючи інструмент для заповнення на основі Планчона і Дарбу (PD) (а також інструмент для заповнення на основі Ван і Лю (WL) для 6 різних вододілів. (Тут я показую лише два випадки результатів - вони були схожими на всіх 6 вододілах) Я кажу "заснований", тому що завжди виникає питання, чи є розбіжності через алгоритм чи конкретну реалізацію алгоритму.
DEM вододілу генерували шляхом відсікання мозаїчних даних NED 30 м за допомогою USGS, наданих водороздільних форм. Для кожної базової DEM запускалися два інструменти; існує лише одна опція для кожного інструменту, мінімальний насичений нахил, який був встановлений в обох інструментах до 0,01.
Після заповнення вододілів я використовував растровий калькулятор, щоб визначити відмінності в отриманих сітках - ці відмінності повинні бути зумовлені лише різною поведінкою двох алгоритмів.
Зображення, що представляють відмінності або відсутність відмінностей (в основному, розраховані різниці різниці), представлені нижче. Формула, яка використовується для обчислення різниць, була такою: (((PD_F заповнений - WL_F заповнений) / PD_F заповнений) * 100) - дайте відсоткову різницю в комірці на основі клітин. Клітини сірого кольору виявляють тепер різницю, при цьому клітини червонішого кольору вказують на те, що результуюче підвищення ПД було більшим, а клітини зеленішими за кольором, що вказує на результуюче елевацію WL.
1-й вододіл: чистий вододіл, Вайомінг
Ось легенда для цих зображень:
Відмінності коливаються лише від -0,0915% до + 0,0910%. Різниці, схоже, зосереджені навколо піків та вузьких каналів потоку, при цьому алгоритм WL трохи вище в каналах, а PD трохи вище навколо локалізованих вершин.
Ясний вододіл, Вайомінг, збільшення 1
Ясний вододіл, Вайомінг, збільшення 2
2-й вододіл: річка Вінніпесакі, штат Північна Кароліна
Ось легенда для цих зображень:
Річка Вінніпесакі, штат Північна Кароліна, масштаб 1
Відмінності коливаються лише від -0,323% до + 0,315%. Різниці, схоже, зосереджені навколо піків і вузьких каналів потоку, з (як і раніше) алгоритм WL трохи вище в каналах, а PD трохи вище навколо локалізованих вершин.
Sooooooo, думки? На мій погляд, відмінності здаються тривіальними, ймовірно, не вплинуть на подальші розрахунки; хтось згоден? Я перевіряю, завершивши свій робочий процес для цих шести вододілів.
Редагувати: Більше інформації. Здається, що алгоритм WL призводить до більш широких менш чітких каналів, викликаючи високі значення топографічного індексу (мій кінцевий набір похідних даних). Зображення зліва внизу - алгоритм PD, зображення праворуч - алгоритм WL.
Ці зображення показують різницю топографічного індексу в одних і тих же місцях - ширші вологі ділянки (більше каналу - червоніший, вищий TI) на зображенні WL праворуч; більш вузькі канали (менш волога область - менше червона, вузька червона зона, нижній рівень TI в області) на малюнку PD зліва.
Крім того, ось як PD обробляв депресію і як WL обробляв її (праворуч) - помічайте піднятий помаранчевий (нижній топографічний індекс) відрізок / лінію, що перетинає депресію в заповненому WL результаті?
Таким чином, відмінності, хоч і невеликі, здаються, що виникають додаткові аналізи.
Ось мій сценарій Python, якщо когось цікавить:
#! /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
# ----------------------------------------------------------------------