[R-sig-Geo] Fwd: flip SpatialGridDataFrame across axis

Edzer Pebesma edzer.pebesma at uni-muenster.de
Tue Nov 3 09:13:33 CET 2009


Michael, to be hounest, it even surprised me, being the author, that

data(meuse.grid)
gridded(meuse.grid) = ~x+y
fullgrid(meuse.grid) = TRUE
image(meuse.grid[104:1,])

would not flip the image. It just works hard to not destroy the spatial
location of all individual pixels -- it will select all rows in reverse
order, but in the end put everything back in place. What you do is kind
of more like image analysis, as it  moves the location of pixels, right?

Do you mind if we add your flipXxx functions to sp?
--
Edzer

Michael Sumner wrote:
> Ergh, sorry for the update -  a pox on Gmail for sabotaging my
> attempts at plain text!  I've attached the functions in a text file to
> avoid [ampersand] to " at " conversion ...
>
>
>
>
> ---------- Forwarded message ----------
> From: Michael Sumner <mdsumner at gmail.com>
> Date: Tue, Nov 3, 2009 at 8:45 AM
> Subject: Re: [R-sig-Geo] flip SpatialGridDataFrame across axis
> To: r-sig-geo at stat.math.ethz.ch
>
>
> It would be nice if the "[" methods on ?'SpatialGridDataFrame-class'
> could perform the same indexing orientation, but that uses the
> row/column values for [i,j,...]  to obtain the subsetted cells which
> are regridded via SpatialPixels - so the direction is lost. I'm not
> sure it's a good idea to modify that - given that the indexing could
> be used to subset at the same time - which is probably why the authors
> have written it that way.  ;)
>
> But, I've been meaning to try something like this for ages, and this
> seems to work:
>
> flipHorizontal <- function(x) {
>        if (!inherits(x, "SpatialGridDataFrame")) stop("x must be a
> SpatialGridDataFrame")
>        grd <- getGridTopology(x)
>        idx = 1:prod(grd at cells.dim[1:2])
>        m = matrix(idx, grd at cells.dim[2], grd at cells.dim[1], byrow =
> TRUE)[,grd at cells.dim[1]:1]
>        idx = as.vector(t(m))
>        x at data <- x at data[idx, TRUE, drop = FALSE]
>        x
> }
>
> flipVertical <- function(x) {
>        if (!inherits(x, "SpatialGridDataFrame")) stop("x must be a
> SpatialGridDataFrame")
>        grd <- getGridTopology(x)
>        idx = 1:prod(grd at cells.dim[1:2])
>        m = matrix(idx, grd at cells.dim[2], grd at cells.dim[1], byrow =
> TRUE)[grd at cells.dim[2]:1, ]
>        idx = as.vector(t(m))
>        x at data <- x at data[idx, TRUE, drop = FALSE]
>        x
> }
>
> The approach there is stolen from 'subs.SpatialGridDataFrame' in
> sp/R/SpatialGridDataFrame-methods.R - so thanks as ever to the
> authors!
>
> Cheers, Mike.
>
> On Tue, Nov 3, 2009 at 7:49 AM, Sebastian P. Luque <spluque at gmail.com> wrote:
>   
>> On Tue, 3 Nov 2009 07:40:59 +1100,
>> Michael Sumner <mdsumner at gmail.com> wrote:
>>
>>     
>>> Hi Sebastian, I think the "north-south" note is referring to
>>> possibly-rotated grids (using the transform values supported by many
>>> formats) - not to "north vs. south" in orientation.
>>>       
>>> You can easily flip a grid by reverting it (one band at a time) to an
>>> xyz image and using indexing. I find this approach the least confusing
>>> and easily repeatable.
>>>       
>> [...]
>>
>> Thanks for the quick reply Mike!!
>>
>>
>> Cheers,
>>
>> --
>> Seb
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo at stat.math.ethz.ch
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>>     
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo at stat.math.ethz.ch
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>     

-- 
Edzer Pebesma
Institute for Geoinformatics (ifgi), University of Münster
Weseler Straße 253, 48151 Münster, Germany. Phone: +49 251
8333081, Fax: +49 251 8339763 http://ifgi.uni-muenster.de/
http://www.springer.com/978-0-387-78170-9 e.pebesma at wwu.de



More information about the R-sig-Geo mailing list