st_cast | R Documentation |
Cast geometry to another type: either simplify, or cast explicitly
## S3 method for class 'MULTIPOLYGON'
st_cast(x, to, ...)
## S3 method for class 'MULTILINESTRING'
st_cast(x, to, ...)
## S3 method for class 'MULTIPOINT'
st_cast(x, to, ...)
## S3 method for class 'POLYGON'
st_cast(x, to, ...)
## S3 method for class 'LINESTRING'
st_cast(x, to, ...)
## S3 method for class 'POINT'
st_cast(x, to, ...)
## S3 method for class 'GEOMETRYCOLLECTION'
st_cast(x, to, ...)
## S3 method for class 'CIRCULARSTRING'
st_cast(x, to, ...)
## S3 method for class 'MULTISURFACE'
st_cast(x, to, ...)
## S3 method for class 'COMPOUNDCURVE'
st_cast(x, to, ...)
## S3 method for class 'MULTICURVE'
st_cast(x, to, ...)
## S3 method for class 'CURVE'
st_cast(x, to, ...)
st_cast(x, to, ...)
## S3 method for class 'sfc'
st_cast(x, to, ..., ids = seq_along(x), group_or_split = TRUE)
## S3 method for class 'sf'
st_cast(x, to, ..., warn = TRUE, do_split = TRUE)
## S3 method for class 'sfc_CIRCULARSTRING'
st_cast(x, to, ...)
x |
object of class |
to |
character; target type, if missing, simplification is tried; when |
... |
ignored |
ids |
integer vector, denoting how geometries should be grouped (default: no grouping) |
group_or_split |
logical; if TRUE, group or split geometries; if FALSE, carry out a 1-1 per-geometry conversion. |
warn |
logical; if |
do_split |
logical; if |
When converting a GEOMETRYCOLLECTION to COMPOUNDCURVE, MULTISURFACE or CURVEPOLYGON, the user is responsible for the validity of the resulting object: no checks are being carried out by the software.
When converting mixed, GEOMETRY sets, it may help to first convert to the MULTI-type, see examples
the st_cast
method for sf
objects can only split geometries, e.g. cast MULTIPOINT
into multiple POINT
features. In case of splitting, attributes are repeated and a warning is issued when non-constant attributes are assigned to sub-geometries. To merge feature geometries and attribute values, use aggregate or summarise.
object of class to
if successful, or unmodified object if unsuccessful. If information gets lost while type casting, a warning is raised.
In case to
is missing, st_cast.sfc
will coerce combinations of "POINT" and "MULTIPOINT", "LINESTRING" and "MULTILINESTRING", "POLYGON" and "MULTIPOLYGON" into their "MULTI..." form, or in case all geometries are "GEOMETRYCOLLECTION" will return a list of all the contents of the "GEOMETRYCOLLECTION" objects, or else do nothing. In case to
is specified, if to
is "GEOMETRY", geometries are not converted, else, st_cast
will try to coerce all elements into to
; ids
may be specified to group e.g. "POINT" objects into a "MULTIPOINT", if not specified no grouping takes place. If e.g. a "sfc_MULTIPOINT" is cast to a "sfc_POINT", the objects are split, so no information gets lost, unless group_or_split
is FALSE
.
# example(st_read)
nc = st_read(system.file("shape/nc.shp", package="sf"))
mpl <- st_geometry(nc)[[4]]
#st_cast(x) ## error 'argument "to" is missing, with no default'
cast_all <- function(xg) {
lapply(c("MULTIPOLYGON", "MULTILINESTRING", "MULTIPOINT", "POLYGON", "LINESTRING", "POINT"),
function(x) st_cast(xg, x))
}
st_sfc(cast_all(mpl))
## no closing coordinates should remain for multipoint
any(duplicated(unclass(st_cast(mpl, "MULTIPOINT")))) ## should be FALSE
## number of duplicated coordinates in the linestrings should equal the number of polygon rings
## (... in this case, won't always be true)
sum(duplicated(do.call(rbind, unclass(st_cast(mpl, "MULTILINESTRING"))))
) == sum(unlist(lapply(mpl, length))) ## should be TRUE
p1 <- structure(c(0, 1, 3, 2, 1, 0, 0, 0, 2, 4, 4, 0), .Dim = c(6L, 2L))
p2 <- structure(c(1, 1, 2, 1, 1, 2, 2, 1), .Dim = c(4L, 2L))
st_polygon(list(p1, p2))
mls <- st_cast(st_geometry(nc)[[4]], "MULTILINESTRING")
st_sfc(cast_all(mls))
mpt <- st_cast(st_geometry(nc)[[4]], "MULTIPOINT")
st_sfc(cast_all(mpt))
pl <- st_cast(st_geometry(nc)[[4]], "POLYGON")
st_sfc(cast_all(pl))
ls <- st_cast(st_geometry(nc)[[4]], "LINESTRING")
st_sfc(cast_all(ls))
pt <- st_cast(st_geometry(nc)[[4]], "POINT")
## st_sfc(cast_all(pt)) ## Error: cannot create MULTIPOLYGON from POINT
st_sfc(lapply(c("POINT", "MULTIPOINT"), function(x) st_cast(pt, x)))
s = st_multipoint(rbind(c(1,0)))
st_cast(s, "POINT")
# https://github.com/r-spatial/sf/issues/1930:
pt1 <- st_point(c(0,1))
pt23 <- st_multipoint(matrix(c(1,2,3,4), ncol = 2, byrow = TRUE))
d <- st_sf(geom = st_sfc(pt1, pt23))
st_cast(d, "POINT") # will not convert the entire MULTIPOINT, and warns
st_cast(d, "MULTIPOINT") %>% st_cast("POINT")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.