R/cast_sfg.R
, R/cast_sfc.R
st_cast.Rd
Cast geometry to another type: either simplify, or cast explicitly
# S3 method for MULTIPOLYGON st_cast(x, to, ...) # S3 method for MULTILINESTRING st_cast(x, to, ...) # S3 method for MULTIPOINT st_cast(x, to, ...) # S3 method for POLYGON st_cast(x, to, ...) # S3 method for LINESTRING st_cast(x, to, ...) # S3 method for POINT st_cast(x, to, ...) # S3 method for GEOMETRYCOLLECTION st_cast(x, to, ...) # S3 method for CIRCULARSTRING st_cast(x, to, ...) # S3 method for MULTISURFACE st_cast(x, to, ...) # S3 method for COMPOUNDCURVE st_cast(x, to, ...) # S3 method for MULTICURVE st_cast(x, to, ...) # S3 method for CURVE st_cast(x, to, ...) st_cast(x, to, ...) # S3 method for sfc st_cast(x, to, ..., ids = seq_along(x), group_or_split = TRUE) # S3 method for sf st_cast(x, to, ..., warn = TRUE, do_split = TRUE) # S3 method for 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 |
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
.
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.
#> Reading layer `nc' from data source `/tmp/RtmpCdQsky/temp_libpath64f92385e079/sf/shape/nc.shp' using driver `ESRI Shapefile' #> Simple feature collection with 100 features and 14 fields #> geometry type: MULTIPOLYGON #> dimension: XY #> bbox: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965 #> CRS: 4267mpl <- nc$geometry[[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))#> Warning: polygon from first part only#> Warning: line from first ring only#> Warning: point from first coordinate only#> Geometry set for 6 features #> geometry type: GEOMETRY #> dimension: XY #> bbox: xmin: -76.33025 ymin: 36.07282 xmax: -75.77316 ymax: 36.55716 #> CRS: NA #> First 5 geometries:#>#>#>#>#>## no closing coordinates should remain for multipoint any(duplicated(unclass(st_cast(mpl, "MULTIPOINT")))) ## should be FALSE#> [1] 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#> [1] TRUEp1 <- 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))#>#> Warning: keeping first linestring only#> Warning: keeping first coordinate only#> Geometry set for 6 features #> geometry type: GEOMETRY #> dimension: XY #> bbox: xmin: -76.33025 ymin: 36.07282 xmax: -75.77316 ymax: 36.55716 #> CRS: NA #> First 5 geometries:#>#>#>#>#>#> Warning: point from first coordinate only#> Geometry set for 6 features #> geometry type: GEOMETRY #> dimension: XY #> bbox: xmin: -76.33025 ymin: 36.07282 xmax: -75.77316 ymax: 36.55716 #> CRS: NA #> First 5 geometries:#>#>#>#>#>pl <- st_cast(nc$geometry[[4]], "POLYGON")#> Warning: polygon from first part only#> Warning: point from first coordinate only#> Geometry set for 6 features #> geometry type: GEOMETRY #> dimension: XY #> bbox: xmin: -76.33025 ymin: 36.07282 xmax: -75.79885 ymax: 36.55716 #> CRS: NA #> First 5 geometries:#>#>#>#>#>ls <- st_cast(nc$geometry[[4]], "LINESTRING")#> Warning: line from first ring only#> Warning: point from first coordinate only#> Geometry set for 6 features #> geometry type: GEOMETRY #> dimension: XY #> bbox: xmin: -76.33025 ymin: 36.07282 xmax: -75.79885 ymax: 36.55716 #> CRS: NA #> First 5 geometries:#>#>#>#>#>pt <- st_cast(nc$geometry[[4]], "POINT")#> Warning: point from first coordinate only## st_sfc(cast_all(pt)) ## Error: cannot create MULTIPOLYGON from POINT st_sfc(lapply(c("POINT", "MULTIPOINT"), function(x) st_cast(pt, x)))#> Geometry set for 2 features #> geometry type: GEOMETRY #> dimension: XY #> bbox: xmin: -76.00897 ymin: 36.3196 xmax: -76.00897 ymax: 36.3196 #> CRS: NA#>#>#> Warning: point from first coordinate only#>