Comment combiner des objets SFC à partir du package R SF

12

En utilisant le package R sf, comment combiner des sfcobjets? Par exemple, étant donné le code suivant, comment créer un sfcobjet unique sfc12qui comprend les géométries des deux sfc1et sfc2? ( length(sfc12)devrait être 2.)

library(sf)
pt1 = st_point(c(0,1))
pt2 = st_point(c(1,1))
sfc1 = st_sfc(pt1) # An sfc object
sfc2 = st_sfc(pt2) # Another sfc object
# sfc12 = ?

Quelques approches qui ne fonctionnent pas:

sf_sfc(sfc1, sfc2) 
# Error in vapply(lst, class, rep("", 3)) : values must be length 3,
# but FUN(X[[1]]) result is length 2

sfc1 + sfc2 # Seems to add the points coordinate-wise.
# Geometry set for 1 feature 
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: 1 ymin: 2 xmax: 1 ymax: 2
# epsg (SRID):    NA
# proj4string:    NA
# POINT(1 2)

rbind(sfc1, sfc2)
# [,1]     
# sfc1 Numeric,2
# sfc2 Numeric,2
apc
la source

Réponses:

11

Utilisez simplement ccomme un vecteur:

> (sfc12 = c(sfc1, sfc2))
Geometry set for 2 features 
geometry type:  POINT
dimension:      XY
bbox:           xmin: 0 ymin: 1 xmax: 1 ymax: 1
epsg (SRID):    NA
proj4string:    NA
POINT(0 1)
POINT(1 1)

Et la longueur est de 2:

> length(sfc12)
[1] 2
Spacedman
la source
1
et comment combineriez-vous de nombreux objets SFC, par exemple à partir d'une liste d'objets SFC?
Bernd V.21
l'avez-vous résolu Bernd? Je ne trouve pas non plus de moyen pratique de le faire.
Marco
@Marco si c'est un problème pour vous et Bernd, commencez une nouvelle question avec un exemple reproductible.
Spacedman
6
@Marco a do.call(c, list(sfc1, sfc2))travaillé pour moi.
johannes
1
Combinez une liste d' sfcobjets en utilisant Reduce(c, sfcs)oupurrr::reduce(sfcs , c)
Luke1018
3

S'inspirant de la réponse de @ TimSalabim , si vos sfcobjets sont dans le même CRS, vous pouvez utiliser

do.call(rbind, list(sfc1, sfc2)).

Mat
la source