Я попытаюсь ответить на свой вопрос - Дун Дун Дун.
Я использовал SAGA GIS для изучения различий в заполненных водоразделах, используя их инструмент заполнения на основе Планшона и Дарбу (PD) (и их инструмент заполнения на основе Ван и Лю (WL) для 6 различных водосборов. (Здесь я показываю только два набора результатов). они были одинаковы для всех 6 водоразделов) Я говорю «на основе», потому что всегда возникает вопрос, связаны ли различия с алгоритмом или с конкретной реализацией алгоритма.
ЦМР для водораздела были получены путем вырезания мозаичных данных НЭД на 30 м с использованием предоставленных Геологической службой шейп-файлов водораздела. Для каждой базовой матрицы высот были запущены два инструмента; для каждого инструмента есть только одна опция - минимальный вынужденный уклон, который был установлен в обоих инструментах на 0,01.
После того, как водоразделы были заполнены, я использовал калькулятор растра, чтобы определить различия в результирующих сетках - эти различия должны быть связаны только с разным поведением двух алгоритмов.
Изображения, представляющие различия или отсутствие различий (в основном расчетный растр различий), представлены ниже. Формула, используемая для расчета различий, была: (((PD_Filled - WL_Filled) / PD_Filled) * 100) - укажите разницу в процентах для каждой ячейки. Клетки, окрашенные в серый цвет, теперь демонстрируют разницу, причем клетки имеют красный цвет, что указывает на то, что результирующее повышение PD, было больше, а клетки, имеющие зеленый цвет, указывают на то, что результирующее повышение WL было больше.
1-й Водораздел: Чистый Водораздел, Вайоминг
Вот легенда для этих изображений:
Разница только в диапазоне от -0,0915% до + 0,0910%. Различия, по-видимому, сосредоточены вокруг пиков и узких потоковых каналов, при этом алгоритм WL немного выше в каналах, а PD немного выше вокруг локализованных пиков.
Ясный Водораздел, Вайоминг, Zoom 1
Ясный Водораздел, Вайоминг, Zoom 2
2-й водораздел: Река Виннипсауки, Северная Каролина
Вот легенда для этих изображений:
Winnipesaukee River, NH, Zoom 1
Разница только в диапазоне от -0,323% до + 0,315%. Различия, по-видимому, сосредоточены вокруг пиков и узких потоковых каналов, при этом (как и раньше) алгоритм WL немного выше в каналах, а PD немного выше вокруг локализованных пиков.
Ооооооо, мысли? На мой взгляд, различия кажутся тривиальными, вероятно, не повлияет на дальнейшие вычисления; кто-нибудь согласен? Я проверяю, завершая мой рабочий процесс для этих шести водоразделов.
Изменить: дополнительная информация. Кажется, что алгоритм 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
# ----------------------------------------------------------------------