```{r}
library(sf)
x = st_sfc(st_polygon(list(rbind(c(0,0),c(0.5,0),c(0.5,0.5),c(0.5,0),c(1,0),c(1,1),c(0,1),c(0,0)))))
st_is_valid(x)
```
[1] FALSE
HES 505 Fall 2025: Session 11
Coordinates define the Vertices (i.e., discrete x-y locations) that comprise the geometry
The organization of those vertices define the shape of the vector
General types: points, lines, polygons
sf
hierarchy reflects increasing complexity of geometry
st_point
, st_linestring
, st_polygon
for single featuresst_multi*
for multiple features of the same typest_geometrycollection
for multiple feature typesst_as_sfc
creates the geometry list column for many sf
operationssf
package relies on a simple feature data model to represent geometries
type | description |
---|---|
POINT |
single point geometry |
MULTIPOINT |
set of points |
LINESTRING |
single linestring (two or more points connected by straight lines) |
MULTILINESTRING |
set of linestrings |
POLYGON |
exterior ring with zero or more inner rings, denoting holes |
MULTIPOLYGON |
set of polygons |
GEOMETRYCOLLECTION |
set of the geometries above |
We can categorize sf
operations based on what they return and/or how many geometries they accept as input.
Predicates: evaluate a logical statement asserting that a property is TRUE
Measures: return a numeric value with units based on the units of the CRS
Transformations: create new geometries based on input geometries.
Input Geometries
MULTI*
object the function works on each geometry individually)Vectors and scale
Slivers and overlaps
Undershoots and overshoots
Self-intersections and rings
We’ll use st_is_valid()
(a predicate) to check this, but fixing can be tricky
st_make_valid()
(a transformer) for simple cases
st_buffer
(also a transformer) with dist=0
all(st_is_valid(your.shapefile))
returns FALSE
st_make_valid
has two methods:
st_make_valid
st_buffer
Vector data describe the “exact” locations of features on a landscape (including a Cartesian landscape)
Raster data represent spatially continuous phenomena (NA
is possible)
Depict the alignment of data on a regular lattice (often a square)
matrix
objects in R
Geometry is implicit; the spatial extent and number of rows and columns define the cell size
terra
syntax is different for terra
compared to sf
Representation in Environment
is also different
Can break pipes, Be Explicit
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
class : SpatRaster
size : 4, 4, 1 (nrow, ncol, nlyr)
resolution : 1, 1 (x, y)
extent : 0, 4, 0, 4 (xmin, xmax, ymin, ymax)
coord. ref. :
source(s) : memory
name : lyr.1
min value : 1
max value : 16
Note: you must have raster
or terra
loaded for plot()
to work on Rast*
objects; otherwise you get Error in as.double(y) : cannot coerce type 'S4' to vector of type 'double'
res
) defines the length and width of an individual pixelterra
Predicates: evaluate a logical statement asserting that a property is TRUE
terra
does not follow the same hierarchy as sf
so a little trickier
terra
Can tell us qualities of a raster dataset
Many similar operations for SpatVector
class (note use of .
)
predicate | asks… |
---|---|
is.lonlat |
Does the object have a longitude/latitude CRS? |
inMemory |
is the object stored in memory? |
is.factor |
Are there categorical layers? |
hasValues |
Do the cells have values? |
terra
terra
Take exactly 2 inputs, return 1 matrix of cell locs where value is TRUE
adjacent
: identifies cells adajcent to a set of raster cells
terra
Slightly more flexible than sf
One result for each layer in a stack
measure | returns |
---|---|
cellSize |
area of individual cells |
expanse |
summed area of all cells |
values |
returns all cell values |
ncol |
number of columns |
nrow |
number of rows |
ncell |
number of cells |
res |
resolution |
ext |
minimum and maximum of x and y coords |
origin |
the orgin of a SpatRaster |
crs |
the coordinate reference system |
cats |
categories of a categorical raster |
terra
SpatRaster
describing the measuremeasure | returns |
---|---|
distance |
shortest distance to non-NA or vector object |
gridDistance |
shortest distance through adjacent grid cells |
costDistance |
Shortest distance considering cell-varying friction |
direction |
azimuth to cells that are not NA |