é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"]

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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.