Filter data cube pixels by a user-defined predicate on band values
Description
Create a proxy data cube, which evaluates a predicate over all pixels of a data cube. For all pixels that fulfill the predicate, the original band values are returned. Other pixels are simply filled with NANs. The predicate may access band values by name.
Usage
filter_pixel(cube, pred)
Arguments
Argument
Description
cube
source data cube
pred
predicate to be evaluated over all pixels
Details
gdalcubes uses and extends the tinyexpr library to evaluate expressions in C / C++, you can look at the library documentation to see what kind of expressions you can execute. Pixel band values can be accessed by name.
Value
a proxy data cube object
Note
This function returns a proxy object, i.e., it will not start any computations besides deriving the shape of the result.
Examples
# create image collection from example Landsat data only # if not already done in other examplesif (!file.exists(file.path(tempdir(), "L8.db"))) { L8_files <-list.files(system.file("L8NY18", package ="gdalcubes"),".TIF", recursive =TRUE, full.names =TRUE)create_image_collection(L8_files, "L8_L1TP", file.path(tempdir(), "L8.db"), quiet =TRUE) }L8.col =image_collection(file.path(tempdir(), "L8.db"))v =cube_view(extent=list(left=388941.2, right=766552.4, bottom=4345299, top=4744931, t0="2018-01", t1="2018-06"),srs="EPSG:32618", nx =497, ny=526, dt="P1M")L8.cube =raster_cube(L8.col, v) L8.cube =select_bands(L8.cube, c("B04", "B05")) L8.ndvi =apply_pixel(L8.cube, "(B05-B04)/(B05+B04)", "NDVI") L8.ndvi.filtered =filter_pixel(L8.ndvi, "NDVI > 0.5") L8.ndvi.filtered
A data cube proxy object
Dimensions:
low high count pixel_size chunk_size
t 2018-01-01 2018-06-30 6 P1M 1
y 4345299 4744931 526 759.756653992395 384
x 388941.2 766552.4 497 759.781086519115 384
Bands:
name offset scale nodata unit
1 NDVI 0 1 NaN
# filter_pixelFilter data cube pixels by a user-defined predicate on band values```{r include=FALSE}library(gdalcubes)```## DescriptionCreate a proxy data cube, which evaluates a predicate over all pixels of a data cube. For all pixels that fulfill the predicate, the originalband values are returned. Other pixels are simply filled with NANs. The predicate may access band values by name.## Usage```rfilter_pixel(cube, pred)```## Arguments| Argument | Description ||:------------|:----------------------------------|| cube | source data cube || pred | predicate to be evaluated over all pixels |## Detailsgdalcubes uses and extends the [tinyexpr library](https://github.com/codeplea/tinyexpr) to evaluate expressions in C / C++, you can look at the [library documentation](https://github.com/codeplea/tinyexpr#functions-supported)to see what kind of expressions you can execute. Pixel band values can be accessed by name.## Valuea proxy data cube object## NoteThis function returns a proxy object, i.e., it will not start any computations besides deriving the shape of the result.## Examples```{r}# create image collection from example Landsat data only # if not already done in other examplesif (!file.exists(file.path(tempdir(), "L8.db"))) { L8_files <-list.files(system.file("L8NY18", package ="gdalcubes"),".TIF", recursive =TRUE, full.names =TRUE)create_image_collection(L8_files, "L8_L1TP", file.path(tempdir(), "L8.db"), quiet =TRUE) }L8.col =image_collection(file.path(tempdir(), "L8.db"))v =cube_view(extent=list(left=388941.2, right=766552.4, bottom=4345299, top=4744931, t0="2018-01", t1="2018-06"),srs="EPSG:32618", nx =497, ny=526, dt="P1M")L8.cube =raster_cube(L8.col, v) L8.cube =select_bands(L8.cube, c("B04", "B05")) L8.ndvi =apply_pixel(L8.cube, "(B05-B04)/(B05+B04)", "NDVI") L8.ndvi.filtered =filter_pixel(L8.ndvi, "NDVI > 0.5") L8.ndvi.filteredplot(L8.ndvi.filtered)```