বহুভুজ / এসফ ব্যবহার করে ওভারিংয়ে এসপি প্যাকেজের পয়েন্টের সমতুল্য


16

আমি এসপি প্যাকেজ থেকে নতুন এসএফ প্যাকেজে কোড স্থানান্তর করছি। আমার আগের কোডটিতে একটি বহুভুজ স্প্যাটিয়ালডাটা ফ্রেম (সেন্সিমেন্টোম্যাপ) এবং একটি স্পাটিয়ালপয়েন্টডেটা ফ্রেম (indirizzi.sp) ছিল এবং নীচের নির্দেশের সাথে প্রতিটি পয়েন্টের জন্য বহুভুজ সেল আইডি ("সেল 110") পেয়েছি:

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

আসলে আমি দুটি এসএফ অবজেক্ট তৈরি করেছি:

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)

এবং আমি উপরের নির্দেশের এসএফ সমতুল্য সন্ধান করছি ... এটি যতটা গুরুত্বপূর্ণ তা হ'ল:

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 ব্যবহার করে একই ফলাফল পেতে পারেন: প্রথমে একটি ডেমো বহুভুজ এবং এসএফ দিয়ে কিছু পয়েন্ট তৈরি করুন।

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

এখন এসপি অবজেক্টে ওভার ব্যবহার করে ফলাফলটি দেখুন

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.