1 |
3c841968
|
Jim Regetz
|
% -*- mode: noweb; noweb-default-code-mode: R-mode; -*-
|
2 |
|
|
%
|
3 |
|
|
% Using Gregor Gorjanc's bash script:
|
4 |
|
|
% sweave -old=<pdfviewer> <filename.Rnw>
|
5 |
|
|
%
|
6 |
|
|
% Using my simple bash script wrapper:
|
7 |
|
|
% sweave_jr <basename>
|
8 |
|
|
%
|
9 |
|
|
% Using the lower level commands, in two steps:
|
10 |
|
|
% R CMD Sweave <filename.Rnw>
|
11 |
|
|
% pdflatex <filename.tex>
|
12 |
|
|
%
|
13 |
|
|
% To extract R code from within R:
|
14 |
|
|
% Stangle("<filename.Rnw>", annotate=FALSE)
|
15 |
|
|
\documentclass[8pt]{article}
|
16 |
|
|
\usepackage[final]{pdfpages}
|
17 |
|
|
\usepackage{fancyhdr}
|
18 |
|
|
\usepackage[font=normalsize,singlelinecheck=false]{subfig}
|
19 |
|
|
|
20 |
0ffc32ec
|
Jim Regetz
|
|
21 |
3c841968
|
Jim Regetz
|
\title{SRTM/ASTER boundary analysis}
|
22 |
|
|
\author{Jim Regetz}
|
23 |
|
|
\date{Last update: 23 Jun 2011}
|
24 |
|
|
|
25 |
|
|
%\SweaveOpts{echo=true}
|
26 |
|
|
\usepackage[utf8]{inputenc}
|
27 |
|
|
\usepackage{a4wide}
|
28 |
|
|
\usepackage{verbatim}
|
29 |
0ffc32ec
|
Jim Regetz
|
\usepackage{listings}
|
30 |
3c841968
|
Jim Regetz
|
\usepackage[colorlinks=true,urlcolor=red]{hyperref}
|
31 |
0ffc32ec
|
Jim Regetz
|
\usepackage{color}
|
32 |
3c841968
|
Jim Regetz
|
|
33 |
0ffc32ec
|
Jim Regetz
|
%\topmargin 70pt
|
34 |
3c841968
|
Jim Regetz
|
|
35 |
|
|
\pagestyle{fancy}
|
36 |
|
|
\rfoot{}
|
37 |
|
|
\cfoot{\Large\thepage}
|
38 |
|
|
\renewcommand {\headrulewidth}{0pt}
|
39 |
|
|
\renewcommand {\footrulewidth}{0pt}
|
40 |
|
|
|
41 |
0ffc32ec
|
Jim Regetz
|
% set some listings options
|
42 |
|
|
\lstset{
|
43 |
|
|
basicstyle=\small\ttfamily,
|
44 |
|
|
stringstyle=\ttfamily,
|
45 |
|
|
commentstyle=\itshape\ttfamily,
|
46 |
|
|
showstringspaces=false,
|
47 |
|
|
}
|
48 |
|
|
|
49 |
3c841968
|
Jim Regetz
|
\begin{document}
|
50 |
|
|
|
51 |
|
|
% define custom colors for R input and output
|
52 |
|
|
\definecolor{dkblue}{rgb}{0,0,0.7}
|
53 |
|
|
\definecolor{dkgray}{gray}{0.25}
|
54 |
|
|
|
55 |
|
|
% define simple macro for marking up inline R code
|
56 |
|
|
\def\rfunc#1{\textcolor{dkblue}{\texttt{#1}}}
|
57 |
|
|
\def\robj#1{\textcolor{black}{\texttt{#1}}}
|
58 |
|
|
|
59 |
|
|
% nicer settings from Ross Ihaka
|
60 |
|
|
\DefineVerbatimEnvironment{Sinput}{Verbatim} % {xleftmargin=2em,formatcom=\color{dkblue},fontsize=\footnotesize}
|
61 |
|
|
{xleftmargin=2em,formatcom=\color{dkblue}}
|
62 |
|
|
\DefineVerbatimEnvironment{Soutput}{Verbatim}
|
63 |
|
|
% {xleftmargin=2em,formatcom=\color{dkgray},fontsize=\footnotesize}
|
64 |
|
|
{xleftmargin=2em,formatcom=\color{dkgray}}
|
65 |
|
|
\DefineVerbatimEnvironment{Scode}{Verbatim}{xleftmargin=2em}
|
66 |
|
|
\fvset{listparameters={\setlength{\topsep}{0pt}}}
|
67 |
|
|
\renewenvironment{Schunk}{\vspace{\topsep}}{\vspace{\topsep}}
|
68 |
|
|
|
69 |
|
|
% set some specific R options that affect the output format
|
70 |
|
|
<<echo=FALSE,print=FALSE>>=
|
71 |
|
|
options(width=80)
|
72 |
|
|
options(continue=" ")
|
73 |
|
|
@
|
74 |
|
|
|
75 |
0ffc32ec
|
Jim Regetz
|
\paragraph{Region of analysis} For testing purposes, I used a narrow
|
76 |
|
|
band along the 60N boundary in Canada (Figure \ref{focal-area}). The
|
77 |
|
|
latitudinal extent of this band is 59.875N - 60.125N (i.e., 300 3"
|
78 |
|
|
pixels straddling 60N), and the longitudinal extent is 136W to 96W
|
79 |
|
|
(i.e., 48000 pixels wide).
|
80 |
|
|
|
81 |
3c841968
|
Jim Regetz
|
\begin{figure}[htp]
|
82 |
|
|
\caption{Focal area}
|
83 |
0ffc32ec
|
Jim Regetz
|
\centering
|
84 |
|
|
<<echo=FALSE,results=hide,fig=TRUE,height=5,width=7>>=
|
85 |
|
|
par(omi=c(0,0,0,0))
|
86 |
3c841968
|
Jim Regetz
|
library(raster)
|
87 |
|
|
library(maps)
|
88 |
|
|
demdir <- "/home/regetz/media/temp/terrain/dem/"
|
89 |
|
|
dem <- raster(file.path(demdir, "fused_300straddle.tif"))
|
90 |
0ffc32ec
|
Jim Regetz
|
map("world", xlim=c(-140,-70), ylim=c(40, 70), fill=TRUE, col="grey",
|
91 |
|
|
mar=c(4,0,0,0))
|
92 |
3c841968
|
Jim Regetz
|
grid(col="darkgray")
|
93 |
|
|
axis(1)
|
94 |
|
|
axis(2)
|
95 |
|
|
box()
|
96 |
|
|
plot(extent(dem), col="red", add=TRUE)
|
97 |
|
|
arrows(-110, 57, -113, 59.7, col="red", length=0.1)
|
98 |
|
|
text(-110, 57, labels="focal region", col="red", font=3, pos=1)
|
99 |
|
|
@
|
100 |
0ffc32ec
|
Jim Regetz
|
\label{focal-area}
|
101 |
3c841968
|
Jim Regetz
|
\end{figure}
|
102 |
|
|
|
103 |
0ffc32ec
|
Jim Regetz
|
\paragraph{Fusion approaches} This document includes latitudinal
|
104 |
|
|
characterizations of terrain values based on three different variants of
|
105 |
|
|
a fused ASTER/SRTM DEM. I also explored (and briefly describe below) two
|
106 |
|
|
additional approaches to fusing the layers, but do not include further
|
107 |
|
|
assessment of these here.
|
108 |
|
|
|
109 |
|
|
\subparagraph{Simple fusion} Naive concatentation of SRTM below 60N with
|
110 |
|
|
ASTER above 60N, without applying any modifications to deal with
|
111 |
|
|
boundary artifacts (Figure \ref{blend-simple}).
|
112 |
|
|
|
113 |
|
|
\subparagraph{Multiresolution spline} Application of Burt \& Adelson's
|
114 |
|
|
(1983) method for blending overlapping images using multiresolution
|
115 |
|
|
splines, as implmented in the \emph{enblend} software package. Data prep
|
116 |
|
|
and post-processing were handled in R (see Listing \ref{code-enblend}).
|
117 |
|
|
As presented here, the ASTER and SRTM inputs were prepared such that the
|
118 |
|
|
overlap zone is 75 latitudinal rows (6.75km) (Figure
|
119 |
|
|
\ref{blend-multires}).
|
120 |
|
|
|
121 |
|
|
\subparagraph{Gaussian weighted average} Blend of the two layers using
|
122 |
|
|
weighted averaging such that the relative contribution of the SRTM
|
123 |
|
|
elevation is zero at 60N, and increases according to a Gaussian function
|
124 |
|
|
of distance moving south away from 60N. As presented here, this function
|
125 |
|
|
was parameterized such that the ASTER and SRTM are equally weighted at a
|
126 |
|
|
distance of $\sim$2.4km (26 cells) from the boundary, and the influence of
|
127 |
|
|
ASTER is negligible by $\sim$5km from the boundary (Figure
|
128 |
|
|
\ref{blend-gaussian}).
|
129 |
|
|
|
130 |
|
|
\subparagraph{Others not shown} Fused with exponential ramp north of
|
131 |
|
|
60N. The first step is to take the pixel-wise difference between ASTER
|
132 |
|
|
and SRTM in the row immediately below 60N (i.e., the northmost extent of
|
133 |
|
|
SRTM). An exponentially declining fraction of this difference is then
|
134 |
|
|
then added back into the ASTER values north of 60N. This does a fine job
|
135 |
|
|
of eliminating the artificial shelf and thus the appearance of a seam
|
136 |
|
|
right along the 60N boundary, but it does not address the abrupt
|
137 |
|
|
transition in texture (i.e., the sudden appearance of high frequency
|
138 |
|
|
variability moving north across the boundary). Additionally, it
|
139 |
|
|
introduces vertical ``ridges'' running north from the boundary. These
|
140 |
|
|
arise because the calculated ramps are independent from one longitudinal
|
141 |
|
|
``column'' to the next, and thus any changes in the boundary difference
|
142 |
|
|
from one pixel to the next lead to adjacent ramps with different
|
143 |
|
|
inclines.
|
144 |
|
|
|
145 |
|
|
I also tried a simple LOESS predictive model. This involved first
|
146 |
|
|
calculating the difference between ASTER and SRTM everywhere south of
|
147 |
|
|
60N, and then fitting a LOESS line to these differences using the actual
|
148 |
|
|
ASTER elevation as a predictor. I then used the fitted model to predict
|
149 |
|
|
the ASTER-SRTM difference for ASTER cells north of 60N, and add a
|
150 |
|
|
declining fraction (based on a Gaussian curve) of this difference to the
|
151 |
|
|
ASTER values north of 60N. Conceptually, this amounts to applying an
|
152 |
|
|
ASTER-predicted correction to the ASTER elevation values, where the
|
153 |
|
|
correction term declines to zero according with increasing distance
|
154 |
|
|
north of the bonudary. However, this method alone didn't yield
|
155 |
|
|
particularly promising results in removing the 60N seam itself,
|
156 |
|
|
presumably because adding a predicted correction at the boundary does
|
157 |
|
|
not close the SRTM-ASTER gap nearly as efficiently as do corrections
|
158 |
|
|
that are based on the actual elevation values. I therefore haven't
|
159 |
|
|
pursued this any further, although it (or something like it) may prove
|
160 |
|
|
useful in combination with one of the other methods.
|
161 |
|
|
|
162 |
|
|
\begin{figure}
|
163 |
|
|
\caption{SRTM/ASTER blend configurations}
|
164 |
3c841968
|
Jim Regetz
|
\centering
|
165 |
0ffc32ec
|
Jim Regetz
|
\subfloat[Simple fusion]{
|
166 |
|
|
\label{blend-simple}
|
167 |
3c841968
|
Jim Regetz
|
<<echo=FALSE,results=hide,fig=TRUE, height=3, width=6>>=
|
168 |
0ffc32ec
|
Jim Regetz
|
par(omi=c(0,0,0,0), mar=c(4,4,0,2)+0.1)
|
169 |
|
|
plot(0, xlim=c(-150, 150), ylim=c(0, 1), type="n", xaxt="n", yaxt="n",
|
170 |
|
|
bty="n", xlab="Latitude", ylab=NA)
|
171 |
|
|
rect(0, 0, 150, 0.75, col="red", density=5, angle=45)
|
172 |
|
|
rect(-150, 0, 0, 0.75, col="blue", density=5, angle=135)
|
173 |
|
|
# axis(1, at=seq(-120, 120, by=60), labels=seq(59.9, 60.1, by=0.05))
|
174 |
|
|
axis(1, at=seq(-150, 150, by=75), labels=c(59.875, NA, 60, NA, 60.125))
|
175 |
|
|
text(-150, 0.9, labels="SRTM", pos=4, col="blue")
|
176 |
|
|
text(150, 0.9, labels="ASTER", pos=2, col="red")
|
177 |
3c841968
|
Jim Regetz
|
@
|
178 |
|
|
}\\
|
179 |
|
|
\subfloat[Multiresolution spline]{
|
180 |
0ffc32ec
|
Jim Regetz
|
\label{blend-multires}
|
181 |
3c841968
|
Jim Regetz
|
<<echo=FALSE,results=hide,fig=TRUE, height=3, width=6>>=
|
182 |
|
|
par(omi=c(0,0,0,0), mar=c(4,4,0,2)+0.1)
|
183 |
|
|
plot(0, xlim=c(-150, 150), ylim=c(0, 1), type="n", xaxt="n", yaxt="n",
|
184 |
|
|
bty="n", xlab="Latitude", ylab=NA)
|
185 |
0ffc32ec
|
Jim Regetz
|
rect(-75, 0, 0, 0.75, col="lightgray")
|
186 |
3c841968
|
Jim Regetz
|
rect(-75, 0, 150, 0.75, col="red", density=5, angle=45)
|
187 |
|
|
rect(-150, 0, 0, 0.75, col="blue", density=5, angle=135)
|
188 |
|
|
#axis(1, at=seq(-150, 150, by=60), labels=seq(59.875, 60.125, by=0.05))
|
189 |
|
|
#axis(1, at=0, labels=60, col="red", cex=0.85)
|
190 |
0ffc32ec
|
Jim Regetz
|
#axis(1, at=seq(-120, 120, by=60), labels=seq(59.9, 60.1, by=0.05))
|
191 |
|
|
axis(1, at=seq(-150, 150, by=75), labels=c(59.875, NA, 60, NA, 60.125))
|
192 |
3c841968
|
Jim Regetz
|
text(-150, 0.9, labels="SRTM", pos=4, col="blue")
|
193 |
|
|
text(-37.5, 0.8, labels="overlap", pos=3, font=3)
|
194 |
|
|
text(150, 0.9, labels="ASTER", pos=2, col="red")
|
195 |
|
|
@
|
196 |
0ffc32ec
|
Jim Regetz
|
}\\
|
197 |
|
|
\subfloat[Gaussian weighted average]{
|
198 |
|
|
\label{blend-gaussian}
|
199 |
|
|
<<echo=FALSE,results=hide,fig=TRUE, height=3, width=6>>=
|
200 |
|
|
par(omi=c(0,0,0,0), mar=c(4,4,1,2)+0.1)
|
201 |
|
|
curve(exp(-0.001*x^2), from=-150, to=0, xlim=c(-150, 150), col="red",
|
202 |
|
|
xaxt="n", bty="n", xlab="Latitude", ylab="Weighting")
|
203 |
|
|
curve(1+0*x, from=0, to=150, add=TRUE, col="red")
|
204 |
|
|
curve(1-exp(-0.001*x^2), from=-150, to=0, add=TRUE, col="blue")
|
205 |
|
|
#axis(1, at=seq(-150, 150, by=60), labels=seq(59.875, 60.125, by=0.05))
|
206 |
|
|
#axis(1, at=0, labels=60, col="red", cex=0.85)
|
207 |
|
|
#axis(1, at=seq(-120, 120, by=60), labels=seq(59.9, 60.1, by=0.05))
|
208 |
|
|
axis(1, at=seq(-150, 150, by=75), labels=c(59.875, NA, 60, NA, 60.125))
|
209 |
|
|
text(-100, 0.6, labels="gaussian\nblend")
|
210 |
|
|
text(-140, 0.9, labels="SRTM", col="blue", pos=4)
|
211 |
|
|
text(-140, 0.1, labels="ASTER", col="red", pos=4)
|
212 |
|
|
@
|
213 |
|
|
}
|
214 |
|
|
\end{figure}
|
215 |
|
|
|
216 |
|
|
\newpage
|
217 |
|
|
|
218 |
|
|
%\includepdfset{pagecommand=\thispagestyle{fancy}}
|
219 |
|
|
%\setkeys{Gin}{width=1.8\linewidth}
|
220 |
|
|
%\captionsetup[table]{position=top}
|
221 |
|
|
|
222 |
|
|
|
223 |
|
|
\paragraph{Latitudinal terrain profiles (means)}
|
224 |
|
|
|
225 |
|
|
\subparagraph{Elevation} As indicated in Figure \ref{mean-elevation},
|
226 |
|
|
the mean SRTM elevation is uniformly higher than the mean ASTER
|
227 |
|
|
elevation at all latitudes in the area of overlap, by $\sim$11 meters.
|
228 |
|
|
However, the shape of the profile itself is nearly identical between the
|
229 |
|
|
two. As point of reference, the Canada DEM shares a similarly shaped
|
230 |
|
|
profile, but with elevation values intermediate to the ASTER and SRTM.
|
231 |
|
|
|
232 |
|
|
Not surprisingly, simple fusion produces an artificial cliff in the mean
|
233 |
|
|
elevation profile. This artifact is completely removed by both the
|
234 |
|
|
multiresolution spline and gaussian weighted average methods. The
|
235 |
|
|
transition is, at least to the eye, slightly smoother in the former
|
236 |
|
|
case, although ultimately this would depend on the chosen zone of
|
237 |
|
|
overlap and on the exact parameterization of the weighting function.
|
238 |
|
|
|
239 |
|
|
|
240 |
|
|
\subparagraph{Slope} As indicated in Figure \ref{mean-slope},
|
241 |
|
|
the mean ASTER slope is uniformly steeper than the mean SRTM
|
242 |
|
|
elevation at all latitudes in the area of overlap, by nearly 1 degree.
|
243 |
|
|
However, the shape of the profile itself is nearly identical between the
|
244 |
|
|
two. Although this may partly reflect inherent SRTM vs ASTER
|
245 |
|
|
differences, my guess is that CGIAR postprocessing of the particular
|
246 |
|
|
SRTM product we're using has removed some of the high frequency
|
247 |
|
|
``noise'' that remains in ASTER.
|
248 |
|
|
|
249 |
|
|
Note that the he Canada DEM tends to be flatter than both ASTER and
|
250 |
|
|
SRTM (presumably because it is at least partially derived from
|
251 |
|
|
contour-based data (\textbf{check!})). Moreover, this figure makes it
|
252 |
|
|
clear that the Canada DEM has some major artifacts at regular intervals.
|
253 |
|
|
The spike especially at 60N (which coincides with provincial boundaries
|
254 |
|
|
across the entirety of western Canada) means we probably need to scuttle
|
255 |
|
|
our plans to use this DEM as a reference dataset for boundary analysis.
|
256 |
|
|
|
257 |
|
|
The simple fused layer exhibits a dramatic spike in slope at the
|
258 |
|
|
immediate 60N boundary, undoubtedly associated with the artificial
|
259 |
|
|
elevation cliff. This artifact is eliminated by both the multiresolution
|
260 |
|
|
spline and gaussian weighting. However, former exhibits a sudden step
|
261 |
|
|
change in slope in the SRTM-ASTER overlap region, whereas the transition
|
262 |
|
|
is smoothed out in the latter. This likely reflects the fact that the
|
263 |
|
|
multiresolution spline effectively uses a very narrow transition zone
|
264 |
|
|
for stitching together high frequency components of the input images,
|
265 |
|
|
and I surmise these are precisely the features responsible for the shift
|
266 |
|
|
in mean slope.
|
267 |
|
|
|
268 |
|
|
\subparagraph{Aspect} As indicated in Figure \ref{mean-aspect},
|
269 |
|
|
the mean aspect of ASTER and SRTM are quite similar across all latitudes
|
270 |
|
|
in the area of overlap. However, the shape of the
|
271 |
|
|
profile itself is nearly identical between the
|
272 |
|
|
two. Although this may partly reflect inherent SRTM vs ASTER
|
273 |
|
|
differences, my guess is that CGIAR postprocessing of the particular
|
274 |
|
|
SRTM product we're using has removed some of the high frequency
|
275 |
|
|
``noise'' that remains in ASTER.
|
276 |
|
|
|
277 |
|
|
%TODO: recalc aspect using circular mean?
|
278 |
|
|
%TODO: run flow for enblend output? or just leave what we have, and
|
279 |
|
|
%discuss that? be sure to mention that we're doing flow for a smaller
|
280 |
|
|
%longitudinal range
|
281 |
|
|
|
282 |
|
|
%
|
283 |
|
|
% Latitudinal terrain profiles (means)
|
284 |
|
|
%
|
285 |
|
|
\begin{figure}[t!]
|
286 |
|
|
\centering
|
287 |
|
|
\caption{Latitudinal terrain profiles}
|
288 |
|
|
\subfloat[Mean elevation (m)]{
|
289 |
|
|
\includegraphics[page=1, trim=1in 1in 1in 1in, width=\linewidth]{../dem/elevation-assessment.pdf}
|
290 |
|
|
\label{mean-elevation}
|
291 |
|
|
}\\
|
292 |
|
|
\newpage
|
293 |
|
|
\subfloat[Mean slope (degrees)]{
|
294 |
|
|
\includegraphics[page=1, trim=1in 1in 1in 1in, width=\linewidth]{../slope/slope-assessment.pdf}
|
295 |
|
|
\label{mean-slope}
|
296 |
|
|
}
|
297 |
|
|
\end{figure}
|
298 |
|
|
\begin{figure}[h!]
|
299 |
|
|
\ContinuedFloat
|
300 |
|
|
\centering
|
301 |
|
|
\captionsetup{position=top}
|
302 |
|
|
\subfloat[Aspect (direction, 0=East)]{
|
303 |
|
|
\includegraphics[page=1, trim=1in 1in 1in 1in, width=\linewidth]{../aspect/aspect-assessment.pdf}
|
304 |
|
|
\label{mean-aspect}
|
305 |
|
|
}\\
|
306 |
|
|
\subfloat[Flow (D8 direction, 0=East)]{
|
307 |
|
|
\includegraphics[page=1, trim=1in 1in 1in 1in, width=\linewidth]{../flow/flowdir-assessment.pdf}
|
308 |
|
|
\label{mean-flow}
|
309 |
3c841968
|
Jim Regetz
|
}
|
310 |
|
|
\end{figure}
|
311 |
|
|
|
312 |
0ffc32ec
|
Jim Regetz
|
\paragraph{Summary of findings}
|
313 |
|
|
\begin{itemize}
|
314 |
|
|
\item CDEM itself has problems
|
315 |
|
|
\begin{itemize}
|
316 |
|
|
\item 60N coincides with provincial boundaries; there are clear 60N
|
317 |
|
|
artifacts in this layer!
|
318 |
|
|
\item other evident tiling artifacts too
|
319 |
|
|
\end{itemize}
|
320 |
|
|
\item Big SRTM vs ASTER differences:
|
321 |
|
|
\begin{itemize}
|
322 |
|
|
\item ASTER is generally lower elevation
|
323 |
|
|
\item ASTER has more high-frequency variability ("texture"), which
|
324 |
|
|
affects slope/aspect?
|
325 |
|
|
\end{itemize}
|
326 |
|
|
\item Exponential ramping
|
327 |
|
|
\begin{itemize}
|
328 |
|
|
\item fixes seam itself
|
329 |
|
|
\item leaves dramatic transition in SRTM/ASTER textural differences
|
330 |
|
|
\item introduces ridging
|
331 |
|
|
\end{itemize}
|
332 |
|
|
\item Blending
|
333 |
|
|
\begin{itemize}
|
334 |
|
|
\item fixes seam itself
|
335 |
|
|
\item smooths transition in textural differences
|
336 |
|
|
\end{itemize}
|
337 |
|
|
\item Other comments
|
338 |
|
|
\begin{itemize}
|
339 |
|
|
\item Routing is a big ball of wax
|
340 |
|
|
\end{itemize}
|
341 |
|
|
\end{itemize}
|
342 |
|
|
|
343 |
|
|
\paragraph{To do (possibly)}
|
344 |
|
|
\begin{itemize}
|
345 |
|
|
\item add constant offset to ASTER? or maybe an offset that is a
|
346 |
|
|
function of elevation? (revisit LOESS fit)
|
347 |
|
|
\item smooth ASTER?
|
348 |
|
|
\end{itemize}
|
349 |
|
|
|
350 |
|
|
%TODO: include and discuss the RMSE/correlation plots
|
351 |
|
|
|
352 |
|
|
%\includepdf[landscape=true,pages=-]{../dem/elevation-assessment.pdf}
|
353 |
|
|
%\includepdf[landscape=true,pages=-]{../slope/slope-assessment.pdf}
|
354 |
|
|
%\includepdf[landscape=true,pages=-]{../aspect/aspect-assessment.pdf}
|
355 |
|
|
%\includepdf[landscape=true,pages=-]{../flow/flowdir-assessment.pdf}
|
356 |
3c841968
|
Jim Regetz
|
|
357 |
|
|
\newpage
|
358 |
|
|
|
359 |
0ffc32ec
|
Jim Regetz
|
\appendix
|
360 |
3c841968
|
Jim Regetz
|
|
361 |
0ffc32ec
|
Jim Regetz
|
\lstinputlisting[language=R, caption={R wrapper code for multiresolution
|
362 |
|
|
spline}, label=code-enblend]{../dem/enblend.R}
|
363 |
3c841968
|
Jim Regetz
|
|
364 |
|
|
\end{document}
|