équivalent du point du package sp dans polygone / overing utilisant sf

16

Je migre le code du package sp vers le package sf plus récent. Mon code précédent, j'avais un polygone SpatialDataFrame (censimentoMap) et un SpatialPointDataFrame (indirizzi.sp) et j'ai obtenu l'ID de cellule de polygone ("Cell110") pour chaque point se trouvant à l'intérieur avec les instructions ci-dessous:

points.data <- over(indirizzi.sp, censimentoMap[,"Cell110"])

En fait, j'ai créé deux objets sf:

shape_sf <- st_read(dsn = shape_dsn) shape_sf <- st_transform(x=shape_sf, crs=crs_string) et indirizzi_sf = st_as_sf(df, coords = c("lng", "lat"), crs = crs_string)

Et je cherche l'équivalent sf de l'instruction ci-dessus ... Migth ce soit:

ids<-sapply(st_intersects(x=indirizzi_sf,y=shshape_sfpeCrif), function(z) if (length(z)==0) NA_integer_ else z[1]) cell_ids <- shape_sf[ids,"Cell110"]

Giorgio Spedicato
la source

Réponses:

20

Vous pouvez obtenir le même résultat en utilisant st_join: Créez d'abord un polygone de démonstration et quelques points avec sf.

library(sf)
library(magrittr)

poly <- st_as_sfc(c("POLYGON((0 0 , 0 1 , 1 1 , 1 0, 0 0))")) %>% 
  st_sf(ID = "poly1")    

pts <- st_as_sfc(c("POINT(0.5 0.5)",
                   "POINT(0.6 0.6)",
                   "POINT(3 3)")) %>%
  st_sf(ID = paste0("point", 1:3))

voir maintenant le résultat en utilisant sur des objets sp

over(as(pts, "Spatial"), as(polys, "Spatial"))
>#      ID
># 1 poly1
># 2 poly1
># 3  <NA>

maintenant équivalent avec sf st_join

st_join(pts, poly, join = st_intersects)
># Simple feature collection with 3 features and 2 fields
># geometry type:  POINT
># dimension:      XY
># bbox:           xmin: 0.5 ymin: 0.5 xmax: 3 ymax: 3
># epsg (SRID):    NA
># proj4string:    NA
>#     ID.x  ID.y               .
># 1 point1 poly1 POINT (0.5 0.5)
># 2 point2 poly1 POINT (0.6 0.6)
># 3 point3  <NA>     POINT (3 3)

ou pour le même résultat exact

as.data.frame(st_join(pts, poly, join = st_intersects))[2] %>% setNames("ID")

>#    ID
># 1 poly1
># 2 poly1
># 3  <NA>
sebdalgarno
la source