6. How raster functions map to stars functions
Sébastien Rochette, Adriano Fantini, Edzer Pebesma
For a better version of the stars vignettes see https://r-spatial.github.io/stars/articles/
Here’s an attempt at the table describing how raster functions map to stars functions, discussed in issue #122. This table uses the functionality of the raster package as a template; it may be incomplete, imprecise or plain wrong, so take it with a pinch of salt. Any comment or correction is hugely appreciated, please contribute!
Some of the functions (filter, slice, mutate, select, pull, …) are provided via dplyr, which must be loaded. See ?stars::dplyr.
Creating objects
| {raster, stack, brick} (read) |
read_stars or read_stars(along = …) |
|
| {stack, brick} (concatenate layers) |
c or c(along = …) |
|
| subset |
{[ ] , slice, filter} |
|
| addLayer |
c() or c(along = …) |
|
| dropLayer |
{[ ] , slice, filter} |
|
| unstack |
combine lapply and {[ ] , slice, filter} |
|
Changing spatial extent and/or resolution of objects
| merge |
c |
#, currently only works for adjacent objects |
| mosaic |
st_mosaic |
these are not identical, read the docs carefully |
| crop |
filter, st_crop |
|
| setExtent |
|
# maybe use st_warp? |
| trim |
|
# |
| aggregate |
aggregate |
WIP; raster’s aggregate with fact=2 will not work, use st_warp in that case? |
| disaggregate |
|
# use st_warp(use_gdal = TRUE)? |
| resample |
{st_transform, st_warp} |
|
| projectRaster |
{st_transform, st_warp} |
|
| shift |
|
#, now use st_set_dimensions |
| flip |
[] with reversed index |
# |
| rotate |
|
* |
| t |
|
NA |
Cell based computation
| calc |
st_apply |
|
| overlay |
c(along = , …) %>% st_apply(…) |
|
| cover |
[ ] <- |
|
| mask |
[ ] <- |
|
| cut |
cut |
|
| subs |
|
|
| reclassify |
mutate with case_when |
or forcats::fct_recode ? |
| init |
[ ] <- |
|
| stackApply |
{[ ] , slice, filter} %>% st_apply |
|
| stackSelect |
|
|
Spatial contextual computation
| distance |
|
# |
| gridDistance |
|
* |
| distanceFromPoints |
|
# |
| direction |
|
* |
| focal |
f = st_apply(x1, 3, foc, w = matrix(1, 3, 3)) |
See. issue 176 |
| localFun |
|
* |
| boundaries |
st_as_sf(as_points=FALSE, merge=TRUE, connect8=TRUE) |
|
| clump |
st_as_sf(r, merge = TRUE) |
st_as_sf returns polygons, clump a raster |
| adjacent |
|
* |
| area |
st_area |
|
| terrain |
|
# |
| Moran |
|
|
Model predictions
| predict |
predict |
|
| interpolate |
gstat::idw, gstat::krige |
st_warp has raster-raster interpolations of gdalwarp |
Data type conversion
| rasterize |
st_as_stars |
|
| rasterToPoints |
st_as_sf(as_points=TRUE) |
|
| rasterToPolygons |
st_as_sf(as_points=FALSE, …), st_polygonize |
|
| rasterToContour |
st_contour |
requires GDAL >= 2.4.0 |
| rasterFromXYZ |
|
|
| rasterFromCells |
|
|
Summarizing
| cellStats |
st_apply |
|
| summary |
print, summary(as.vector(. %>% pull)) |
|
| freq |
table |
* |
| crosstab |
|
|
| unique |
unique(as.vector(. %>% pull)) |
|
| zonal |
|
* |
Accessing values of objects
| getValues |
{pull, [[ ]]} |
|
| getValuesBlock |
{[ ] , slice, filter} %>% pull |
|
| getValuesFocal |
{[ ] , slice, filter} %>% pull |
|
| as.matrix |
[[ ]] |
currently behaves somewhat unexpectedly * |
| as.array |
[[ ]] |
currently behaves somewhat unexpectedly * |
| extract (by cell) |
{[ ] , slice, filter} |
|
| extract (by polygon) |
x[sf_object] |
|
| extract (by point) |
aggregate(stars_object, sf_object, function(x) x[1], as_points = FALSE) |
|
| sampleRandom |
|
* |
| sampleRegular |
|
* |
| minValue |
purrr::map(x, min) |
|
| maxValue |
purrr::map(x, max) |
|
| setMinMax |
|
, |
Plotting
| plot |
plot, geom_stars |
|
| plotRGB |
plot(x, rgb =…) |
|
| spplot |
- |
|
| image |
image |
|
| persp |
- |
|
| contour |
(st_contour, then sf::plot) |
|
| filledContour |
(same) |
|
| text |
text |
|
hist |
hist(x[[1]]) |
|
| barplot |
|
|
| density |
|
|
| pairs |
|
|
| boxplot |
|
|
Getting and setting dimensions
| ncol |
dim(x)[1] |
or use name instead of 1; cols may be the second dimension! |
| nrow |
dim(x)[2] |
or use name instead of 2; rows may be the first dimension! |
| ncell |
prod(dim(x)) |
|
| res |
st_dimensions |
can also not be a constant in case of rectilinear or curvilinear grids |
| nlayers |
- |
there is no concept of layers in stars |
| names |
names |
|
| xres |
st_dimensions, look for delta |
may not be a constant in case of rectilinear or curvilinear grids |
| yres |
st_dimensions, look for delta |
may not be a constant in case of rectilinear or curvilinear grids |
| xmin |
st_bbox(x)[1] |
|
| xmax |
st_bbox(x)[3] |
|
| ymin |
st_bbox(x)[2] |
|
| ymax |
st_bbox(x)[4] |
|
| extent |
st_bbox(x) |
different ordering of numbers |
| origin |
- |
|
| projection |
st_crs(x) |
|
| isLonLat |
st_is_longlat(st_crs(x)) |
|
| filename |
|
stars_proxy objects carry file names where otherwise the array data is |
| bandnr |
|
stars has no general concept of bands |
| nbands |
dim(x)[3] |
may also be time; bands may also be in another dimension, or have another name |
| compareRaster |
all.equal(st_dimensions(x), st_dimensions(y)) |
* |
| NAvalue |
|
- |
Computing row, column, cell numbers and coordinates
| xFromCol |
st_get_dimension_values(., ‘x’)[col] |
I am not sure how to generally get the x dimension name - here it is x |
| yFromRow |
st_get_dimension_values(., ‘y’)[row] |
I am not sure how to generally get the y dimension name - here it is y |
| xFromCell |
|
|
| yFromCell |
|
|
| xyFromCell |
|
|
| colFromX |
|
* |
| rowFromY |
|
* |
| rowColFromCell |
|
|
| cellFromXY |
|
|
| cellFromRowCol |
|
|
| cellsFromExtent |
|
|
| coordinates |
st_coordinates |
|
| validCell |
|
|
| validCol |
col %>% between(st_dimensions(.)\(x\)from, st_dimensions(.)\(x\)to) |
raster columns are not always named ‘x’ |
| validRow |
row %>% between(st_dimensions(.)\(y\)from, st_dimensions(.)\(y\)to) |
raster columns are not always named ‘y’ |
| setValues |
[ ] <- |
|
| writeRaster |
write_stars |
currently uses GDAL, somewhat limited |
| KML |
|
|
The format of this table follows the raster-package entry in the raster manual, found at https://cran.r-project.org/web/packages/raster/raster.pdf.
COMMENT LEGEND
? = Not sure / unknown
* = Not present, low priority
# = Not present, high priority
NA = Not available by design