If x
is a SpatRaster:
If y
is missing
this method computes the distance, for all cells that are NA
in SpatRaster x
to the nearest cell that is not NA
. If argument grid=TRUE
, the distance is computed using a path that goes through the centers of the 8 neighboring cells.
If y
is a SpatVector, the distance to that SpatVector is computed for all cells. For lines and polygons this is done after rasterization; and only the overlapping areas of the vector and raster are considered (for now).
The distance is always expressed in meter if the coordinate reference system is longitude/latitude, and in map units otherwise. Map units are typically meter, but inspect crs(x)
if in doubt.
Results are more precise, sometimes much more precise, when using longitude/latitude rather than a planar coordinate reference system, as these distort distance.
If x
is a SpatVector:
If y
is missing
, a distance matrix between all object in x
is computed. An distance matrix object of class "dist" is returned.
If y
is a SpatVector the geographic distance between all objects is computed (and a matrix is returned). If both sets have the same number of points, and pairwise=TRUE
, the distance between each pair of objects is computed, and a vector is returned.
The distance is always expressed in meter, except when the coordinate reference system is longitude/latitude AND one of the SpatVector(s) consists of lines or polygons. In that case the distance is in degrees, and thus not very useful (this will be fixed soon). Otherwise, results are more precise, sometimes much more precise, when using longitude/latitude rather than a planar coordinate reference system, as these distort distance.
# S4 method for SpatRaster,missing
distance(x, y, grid=FALSE, filename="", ...)# S4 method for SpatRaster,SpatVector
distance(x, y, filename="", ...)
# S4 method for SpatVector,ANY
distance(x, y, sequential=FALSE, pairs=FALSE, symmetrical=TRUE)
# S4 method for SpatVector,SpatVector
distance(x, y, pairwise=FALSE)
# S4 method for matrix,matrix
distance(x, y, lonlat, pairwise=FALSE)
# S4 method for matrix,missing
distance(x, y, lonlat, sequential=FALSE)
SpatRaster, SpatVector, or two-column matrix with coordinates (x,y) or (lon,lat)
missing or SpatVector, or two-column matrix
logical. If TRUE
, distance is computed using a path that goes through the centers of the 8 neighboring cells
character. Output filename
additional arguments for writing files as in writeRaster
logical. If TRUE
, the distance between sequential geometries is returned
logical. If TRUE
and if x and y have the same size (number of rows), the pairwise distances are returned instead of the distances between all elements
logical. If TRUE
the coordinates are interpreted as angular (longitude/latitude). If FALSE
they are interpreted as planar
logical. If TRUE
a "from", "to", "distance" matrix is returned
logical. If TRUE
and pairs=TRUE
, the distance between a pair is only included once. The distance between geometry 1 and 3 is included, but the (same) distance between 3 and 1 is not
SpatRaster or numeric or matrix or distance matrix (object of class "dist")
# NOT RUN {
#lonlat
r <- rast(ncols=36, nrows=18, crs="+proj=longlat +datum=WGS84")
r[500] <- 1
d <- distance(r)
plot(d / 100000)
#planar
r <- rast(ncols=36, nrows=18, crs="+proj=utm +zone=1 +datum=WGS84")
r[500] <- 1
d <- distance(r)
p1 <- vect(rbind(c(0,0), c(90,30), c(-90,-30)), crs="+proj=longlat +datum=WGS84")
dp <- distance(r, p1)
d <- distance(p1)
d
as.matrix(d)
p2 <- vect(rbind(c(30,-30), c(25,40), c(-9,-3)), crs="+proj=longlat +datum=WGS84")
dd <- distance(p1, p2)
dd
pd <- distance(p1, p2, pairwise=TRUE)
pd
pd == diag(dd)
# polygons, lines
crs <- "+proj=utm +zone=1"
p1 <- vect("POLYGON ((0 0, 8 0, 8 9, 0 9, 0 0))", crs=crs)
p2 <- vect("POLYGON ((5 6, 15 6, 15 15, 5 15, 5 6))", crs=crs)
p3 <- vect("POLYGON ((2 12, 3 12, 3 13, 2 13, 2 12))", crs=crs)
p <- rbind(p1, p2, p3)
L1 <- vect("LINESTRING(1 11, 4 6, 10 6)", crs=crs)
L2 <- vect("LINESTRING(8 14, 12 10)", crs=crs)
L3 <- vect("LINESTRING(1 8, 12 14)", crs=crs)
lns <- rbind(L1, L2, L3)
pts <- vect(cbind(c(7,10,10), c(3,5,6)), crs=crs)
distance(p1,p3)
distance(p)
distance(p,pts)
distance(p,lns)
distance(pts,lns)
# }
Run the code above in your browser using DataLab