我想从一个简单的要素集合中选择与另一个 sf 集合中的多边形相交的多边形。这是一个可重现的示例:
library(sf)
nc <- st_read(system.file("shape/nc.shp", package="sf"))
nc <- st_transform(nc,32717);nc
poly <- nc[1,]
fishnet<-st_make_grid(st_as_sfc(st_bbox(poly)),cellsize=5000)
Run Code Online (Sandbox Code Playgroud)
现在,在创建了多边形和围绕它的渔网后,我想选择那些与多边形相交或完全被多边形包含的渔网单元。
谢谢你的帮助!
标记
列表中的每个元素都包含一组空间坐标,我希望使用sf将其转换为多边形。每一组坐标按我想“连接点”的顺序排序,并且第一行和最后一行相同,以关闭多边形。每个列表元素都用唯一的标识符命名,我希望将其保留为sf输出中的属性。
我已经从与SF相关的答案中改编了代码:
但是我的情况有所不同,因为我有多组坐标(每组坐标应产生一个单独的多边形),而该问题只有一组坐标(导致一个多边形)。
我的具体问题是如何使用sf来生成一个sf多边形对象,该对象在单独的行中包含多个多边形,每个多边形都是使用列表元素之一的坐标创建的。
预先感谢您的任何建议或帮助。
标记
我的示例数据是由dput()生成的,位于该问题的结尾,并且我的代码是:
points_df<-arrange(dat,SitePondGpsRep,DateTime_local) #sort on DateTime_local for proper sequence
points_df<-dplyr::select(points_df,SitePondGpsRep,Longitude,Latitude) #drop columns, for upcoming st_polygon call (requires numerics only)
points_ls<-split(points_df,points_df$SitePondGpsRep) #dataframe to list
points_ls<-lapply(points_ls, function(x) { x["SitePondGpsRep"] <- NULL; x }) #delete SitePondGpsRep column, it’s retained in list names
points_ls<-lapply(points_ls,function(x) {as.matrix(x)}) #convert to matrix for upcoming st_sf call
points_ls<-lapply(points_ls,function(x) {rbind(x,x[1,])}) #close poly, first and last point must be same
polys <- st_sf(st_sfc(st_polygon(points_ls)), crs = 4326) #create polys, but only one polygon is created when …Run Code Online (Sandbox Code Playgroud)