sf kullanarak poligon / overing'de sp paketinin eşdeğeri


16

Kod sp paketinden yeni sf paketine geçiriyorum. Önceki kodum bir çokgen SpatialDataFrame (censimentoMap) ve bir SpatialPointDataFrame (indirizzi.sp) vardı ve ben aşağıdaki talimat ile döşeme her nokta için çokgen hücre kimliği ("Cell110") var:

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

Aslında iki sf nesnesi oluşturdum:

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

Ve yukarıdaki talimatın sf eşdeğerini arıyorum ... Migth öyle:

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

Yanıtlar:


20

Aynı sonucu st_join kullanarak elde edebilirsiniz: Önce sf ile bir demo çokgen ve bazı noktalar oluşturun.

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))

şimdi sp nesnelerini kullanarak sonucu görün

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

şimdi sf st_join ile eşdeğer

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)

veya aynı sonuç için

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

>#    ID
># 1 poly1
># 2 poly1
># 3  <NA>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.