Tôi sẽ cố gắng trả lời câu hỏi của riêng tôi - dun dun dun.
Tôi đã sử dụng SAGA GIS để kiểm tra sự khác biệt trong các lưu vực được lấp đầy bằng cách sử dụng công cụ làm đầy dựa trên Planchon và Darboux (PD) của họ (và công cụ làm đầy dựa trên Wang và Liu (WL) của họ cho 6 lưu vực khác nhau (Ở đây tôi chỉ trình bày trường hợp hai bộ kết quả - chúng giống nhau trên tất cả 6 lưu vực sông) Tôi nói "dựa", bởi vì luôn có câu hỏi là liệu sự khác biệt là do thuật toán hoặc việc thực hiện cụ thể của thuật toán.
Các DEM đầu nguồn được tạo ra bằng cách cắt dữ liệu NED 30 m được khảm bằng USGS được cung cấp các shapefile đầu nguồn. Đối với mỗi DEM cơ sở, hai công cụ đã được chạy; chỉ có một tùy chọn cho mỗi công cụ, độ dốc được thi hành tối thiểu, được đặt trong cả hai công cụ là 0,01.
Sau khi các lưu vực được lấp đầy, tôi đã sử dụng máy tính raster để xác định sự khác biệt trong các lưới kết quả - những khác biệt này chỉ nên do các hành vi khác nhau của hai thuật toán.
Hình ảnh đại diện cho sự khác biệt hoặc thiếu khác biệt (về cơ bản là raster chênh lệch được tính toán) được trình bày dưới đây. Công thức được sử dụng để tính toán sự khác biệt là: (((PD_Fills - WL_Fills) / PD_Fills) * 100) - đưa ra mức chênh lệch phần trăm trên một ô theo cơ sở tế bào. Các ô màu xám hiện có sự khác biệt, với các ô có màu đỏ hơn biểu thị độ cao PD kết quả là lớn hơn và các ô màu xanh hơn cho thấy độ cao của kết quả là lớn hơn.
Đầu nguồn thứ 1: Đầu nguồn rõ ràng, bang Utah
Đây là huyền thoại cho những hình ảnh này:
Sự khác biệt chỉ nằm trong khoảng từ -0,0915% đến + 0,0910%. Sự khác biệt dường như được tập trung xung quanh các đỉnh và các kênh luồng hẹp, với thuật toán WL cao hơn một chút trong các kênh và PD cao hơn một chút xung quanh các đỉnh cục bộ.
Đầu nguồn rõ ràng, bang Utah, Zoom 1
Đầu nguồn rõ ràng, bang Utah, Zoom 2
Lưu vực thứ 2: Sông Winnipes Bolog, NH
Đây là huyền thoại cho những hình ảnh này:
Winnipes Bolog River, NH, Zoom 1
Sự khác biệt chỉ nằm trong khoảng từ -0.323% đến + 0.315%. Sự khác biệt dường như được tập trung xung quanh các đỉnh và các kênh luồng hẹp, với (như trước) thuật toán WL cao hơn một chút trong các kênh và PD cao hơn một chút xung quanh các đỉnh cục bộ.
Sooooooo, suy nghĩ? Đối với tôi, sự khác biệt có vẻ tầm thường có lẽ không ảnh hưởng đến các tính toán tiếp theo; có ai đồng ý không Tôi đang kiểm tra bằng cách hoàn thành quy trình làm việc của mình cho sáu lưu vực sông này.
Chỉnh sửa: Thêm thông tin. Dường như thuật toán WL dẫn đến các kênh ít khác biệt hơn, gây ra các giá trị chỉ số địa hình cao (bộ dữ liệu phái sinh cuối cùng của tôi). Hình ảnh bên trái là thuật toán PD, hình ảnh bên phải là thuật toán WL.
Những hình ảnh này cho thấy sự khác biệt về chỉ số địa hình tại cùng một vị trí - các khu vực ẩm ướt rộng hơn (nhiều kênh hơn - đỏ hơn, TI cao hơn) trong ảnh WL ở bên phải; các kênh hẹp hơn (khu vực ít ướt hơn - ít màu đỏ hơn, khu vực màu đỏ hẹp hơn, diện tích TI thấp hơn) trong ảnh PD bên trái.
Ngoài ra, đây là cách PD xử lý (trái) trầm cảm và cách xử lý WL (phải) - chú ý phân đoạn / đường màu cam (chỉ số địa hình thấp hơn) vượt qua suy thoái trong đầu ra được lấp đầy WL?
Vì vậy, sự khác biệt, tuy nhỏ, dường như nhỏ giọt qua các phân tích bổ sung.
Đây là kịch bản Python của tôi nếu có ai quan tâm:
#! /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
# ----------------------------------------------------------------------