sf를 사용한 다각형 / 오버 링에서 sp 패키지의 점에 해당


16

sp 패키지에서 최신 sf 패키지로 코드를 마이그레이션하고 있습니다. 내 이전 코드에는 다각형 SpatialDataFrame (censimentoMap)과 SpatialPointDataFrame (indirizzi.sp)이 있었고 아래 지침에 따라 각 점에 대한 다각형 셀 ID ( "Cell110")를 얻었습니다.

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

실제로 두 개의 sf 객체를 만들었습니다.

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

그리고 위의 명령과 동등한 sf를 찾고 있습니다 ... Migth it :

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

답변:


20

st_join을 사용하여 동일한 결과를 얻을 수 있습니다. 먼저 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))

이제 sp 객체에서 over를 사용하여 결과를 봅니다.

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

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)

또는 정확히 동일한 결과

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

>#    ID
># 1 poly1
># 2 poly1
># 3  <NA>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.