[R-sig-Geo] Slope and Aspect calculations in R
Ashton Shortridge
ashton at msu.edu
Mon Jul 13 17:35:38 CEST 2009
Hello Josh, and list,
Figuring out how to link R with GIS may be extremely useful to you, not just
for calculating slope and aspect, but also for other analyses in the future.
There are also reasons you might not want to; I am one of those people who
likes to write his own code. Consequently I implemented the Horne algorithm a
while back - this is used in ESRI software for calculating slope. The code, a
pretty simple function, is here:
https://www.msu.edu/~ashton/classes/866/notes/lab12/slope.R
Three caveats:
1. ESRI's version changes the neighborhood shape on the raster edges. The
result is a slope grid with slopes calculated for every cell in the input
elevation grid. The linked function only calculates slope on the interior
cells. It returns a raster of the same dimension as the input, but there are
no valid slope values around the edges.
2. Many developers on this list might agree with me that often the hardest
part of coding spatial algorithms is dealing with the data structures. Over
the years we've seen the development of increasingly sophisticated spatial
data structures in R. My implementation dates from the Pleistocene of R, and
is simply implemented on a matrix. Your data may have to be restructured to
work seamlessly with this script, or you may wish to change the script to fit
your structure.
3. While this function works perfectly adequately on smaller grids, it has not
been tested on large matrices. It was not developed with speed in mind - the
script was for a classroom exercise, and I wanted my students to be able to
read the code and relate it to the published algorithm before executing it on
fairly small datasets. If I wanted to calculate slope on huge grids, I'd
personally do it in GRASS or Arc/Info, or in home-rolled C code.
Hope this may be useful!
Ashton
On Friday 10 July 2009 14:42:29 Josh London wrote:
> Thanks to everyone for the feedback. I may dabble around with SAGA/RSAGA
> on a linux box we have and also continue to watch for any MacOS builds.
>
> Roger, I am especially excited that spgrass6 has the initGRASS()
> function. by providing access to r.slope.aspect, I think that will be
> the simplest/quickest route to a solution. I look forward to tapping
> into other GRASS commands in the future. You may want to consider
> changing the description of spgrass6 on CRAN. I have interpreted the
> phrase 'based on starting R from within the GRASS environment' to mean
> the package is for those who use GRASS and want to access functions
> within R.
>
> cheers, and thanks again for the feedback and help
>
> Josh
>
--
Ashton Shortridge
Associate Professor ashton at msu.edu
Dept of Geography http://www.msu.edu/~ashton
235 Geography Building ph (517) 432-3561
Michigan State University fx (517) 432-1671
More information about the R-sig-Geo
mailing list