बहुभुज में एसपी पैकेज के बिंदु के बराबर / एसएफ का उपयोग करके ओवरिंग


16

मैं एसपी पैकेज से नए एसएफ पैकेज के लिए कोड माइग्रेट कर रहा हूं। मेरा पिछला कोड मेरे पास एक बहुभुज SpatialDataFrame (censimentoMap) और एक SpatialPointDataFrame (indirizzi.sp) था और मुझे नीचे दिए गए निर्देश के साथ प्रत्येक बिंदु पर बहुभुज सेल आईडी ("सेल110") मिला:

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 की तलाश कर रहा हूँ ... यह हो:

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(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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.