tương đương với điểm của gói sp trong đa giác / overing bằng sf


16

Tôi đang chuyển mã từ gói sp sang gói sf mới hơn. Mã trước đây của tôi, tôi có một đa giác SpatialDataFrame (censimentoMap) và SpatialPointDataFrame (indirizzi.sp) và tôi đã nhận được id ô đa giác ("Cell110") cho mỗi điểm nằm trong hướng dẫn bên dưới:

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

Thật ra tôi đã tạo hai đối tượng 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)

Và tôi đang tìm kiếm sf tương đương với hướng dẫn trên ... Di chuyển nó là:

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

Câu trả lời:


20

Bạn có thể nhận được kết quả tương tự bằng cách sử dụng st_join: Đầu tiên tạo đa giác demo và một số điểm với 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))

Bây giờ hãy xem kết quả bằng cách sử dụng trên các đối tượng sp

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

bây giờ tương đương với 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)

hoặc cho cùng một kết quả

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

>#    ID
># 1 poly1
># 2 poly1
># 3  <NA>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.