Skip to content

stars::RasterIO using extent info?

3 messages · Howard, Tim G (DEC), Michael Sumner

#
Ok, fair enough that there's no magic involved. I've worked through the details with the small example as follows. The result is only a couple of cells different in each direction.

library(stars)
tif <- system.file("tif/L7_ETMs.tif", package = "stars")
x <- read_stars(tif) 
x <- x[,,,1]
# calculate a circular polygon at the center of the raster
pol <- x %>% st_bbox() %>% st_as_sfc() %>% st_centroid() %>% st_buffer(500)

bb_pol <- st_bbox(pol)

xoff <- st_dimensions(x)$x$offset
xdelt <- st_dimensions(x)$x$delta
yoff <- st_dimensions(x)$y$offset
ydelt <- st_dimensions(x)$y$delta
cropXoff <- (bb_pol$xmin - xoff + xdelt)/xdelt
cropXsize <- (bb_pol$xmax - bb_pol$xmin)/xdelt
cropYoff <- (bb_pol$ymin - yoff + ydelt)/ydelt
cropYsize <- (bb_pol$ymax - bb_pol$ymin)/ydelt

# if ydelt is negative, get abs of ysize and move yoffset to the top
if(cropYsize < 0){
  cropYsize <- abs(cropYsize)
  cropYoff <- cropYoff - cropYsize  
}

rasterio <- list(nXOff = cropXoff, nYOff = cropYoff, nXSize = cropXsize, nYSize = cropYsize, bands = c(1))
(z = read_stars(tif, RasterIO = rasterio))
plot(z)

# crop it if desired
plot(z[pol])

## compare to proxy method

x <- read_stars(tif, proxy = TRUE) 
x <- x[,,,1]
y <- st_as_stars(x[pol])
plot(y)

# only a couple of cells off!
z
y




------------------------------
Date: Tue, 13 Nov 2018 17:26:16 +0100
From: Edzer Pebesma <edzer.pebesma at uni-muenster.de>
To: r-sig-geo at r-project.org
Subject: Re: [R-sig-Geo] stars::RasterIO using extent info?
Message-ID: <9d037da7-dc9c-9886-d6fc-5864cf8b4a17 at uni-muenster.de>
Content-Type: text/plain; charset="utf-8"
On 11/13/18 4:10 PM, Howard, Tim G (DEC) via R-sig-Geo wrote:
stars can do the math, and so can you; it is explained here:

https://r-spatial.github.io/stars/articles/data_model.html

stars uses some functions directly from GDAL which it doesn't expose to
the user, but there is no magic going on here.
--
Edzer Pebesma
Institute for Geoinformatics
Heisenbergstrasse 2, 48151 Muenster, Germany
Phone: +49 251 8333081
#
FWIW I have a raster-delivering-front-end for RasterIO in this dev package:

https://github.com/hypertidy/lazyraster

It uses the more obvious extent() idioms and will even use an open plot if
nothing else is specified.

(It uses an independent binding to GDAL in the vapour package).

That might help, or not. It's on my list to find a sensible way for stars
to leverage this obvious ease-of-use.  rgdal::readGDAL always had an
interface to RasterIO, but only raster ever made use of that, and it's
indirect - raster doesn't allow a mix of extent and resolution in its
approach.

Cheers, Mike.

On Thu, 15 Nov 2018 at 02:27 Howard, Tim G (DEC) via R-sig-Geo <
r-sig-geo at r-project.org> wrote:

            
#
Mike, 
Thanks for the feedback - I'll check it out. 
Best, 
Tim

From: Michael Sumner [mailto:mdsumner at gmail.com] 
Sent: Wednesday, November 14, 2018 5:55 PM
To: Howard, Tim G (DEC) <tim.howard at dec.ny.gov>
Cc: r-sig-geo at r-project.org
Subject: Re: [R-sig-Geo] stars::RasterIO using extent info?

FWIW I have a raster-delivering-front-end for RasterIO in this dev package:? 

https://github.com/hypertidy/lazyraster

It uses the more obvious extent() idioms and will even use an open plot if nothing else is specified.?

(It uses an independent binding to GDAL in the vapour package).?

That might help, or not. It's on my list to find a sensible way for stars to leverage this obvious ease-of-use.? rgdal::readGDAL always had an interface to RasterIO, but only raster ever made use of that, and it's indirect - raster doesn't allow a mix of extent and resolution in its approach.?

Cheers, Mike.?
On Thu, 15 Nov 2018 at 02:27 Howard, Tim G (DEC) via R-sig-Geo <mailto:r-sig-geo at r-project.org> wrote:
Ok, fair enough that there's no magic involved. I've worked through the details with the small example as follows. The result is only a couple of cells different in each direction.

library(stars)
tif <- system.file("tif/L7_ETMs.tif", package = "stars")
x <- read_stars(tif) 
x <- x[,,,1]
# calculate a circular polygon at the center of the raster
pol <- x %>% st_bbox() %>% st_as_sfc() %>% st_centroid() %>% st_buffer(500)

bb_pol <- st_bbox(pol)

xoff <- st_dimensions(x)$x$offset
xdelt <- st_dimensions(x)$x$delta
yoff <- st_dimensions(x)$y$offset
ydelt <- st_dimensions(x)$y$delta
cropXoff <- (bb_pol$xmin - xoff + xdelt)/xdelt
cropXsize <- (bb_pol$xmax - bb_pol$xmin)/xdelt
cropYoff <- (bb_pol$ymin - yoff + ydelt)/ydelt
cropYsize <- (bb_pol$ymax - bb_pol$ymin)/ydelt

# if ydelt is negative, get abs of ysize and move yoffset to the top
if(cropYsize < 0){
? cropYsize <- abs(cropYsize)
? cropYoff <- cropYoff - cropYsize? 
}

rasterio <- list(nXOff = cropXoff, nYOff = cropYoff, nXSize = cropXsize, nYSize = cropYsize, bands = c(1))
(z = read_stars(tif, RasterIO = rasterio))
plot(z)

# crop it if desired
plot(z[pol])

## compare to proxy method

x <- read_stars(tif, proxy = TRUE) 
x <- x[,,,1]
y <- st_as_stars(x[pol])
plot(y)

# only a couple of cells off!
z
y




------------------------------
Date: Tue, 13 Nov 2018 17:26:16 +0100
From: Edzer Pebesma <mailto:edzer.pebesma at uni-muenster.de>
To: mailto:r-sig-geo at r-project.org
Subject: Re: [R-sig-Geo] stars::RasterIO using extent info?
Message-ID: <mailto:9d037da7-dc9c-9886-d6fc-5864cf8b4a17 at uni-muenster.de>
Content-Type: text/plain; charset="utf-8"
On 11/13/18 4:10 PM, Howard, Tim G (DEC) via R-sig-Geo wrote:
stars can do the math, and so can you; it is explained here:

https://r-spatial.github.io/stars/articles/data_model.html

stars uses some functions directly from GDAL which it doesn't expose to
the user, but there is no magic going on here.
--
Edzer Pebesma
Institute for Geoinformatics
Heisenbergstrasse 2, 48151 Muenster, Germany
Phone: tel:+49%20251%208333081

_______________________________________________
R-sig-Geo mailing list
mailto:R-sig-Geo at r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-geo