R sf包中多边形点的求法

R sf包中多边形点的求法,r,geospatial,sf,sp,R,Geospatial,Sf,Sp,我正在尝试在sf中创建一个简单的多边形,并仅选择该多边形中的点。我做错了什么 library(concaveman) library(ggplot2) foo.df <- data.frame("long"=c(136,137,137,136),"lat"=c(36,36,37,37)) foo.sf <- st_as_sf(foo.df, coords = c("long","

我正在尝试在sf中创建一个简单的多边形,并仅选择该多边形中的点。我做错了什么

    library(concaveman)
    library(ggplot2)


    foo.df <- data.frame("long"=c(136,137,137,136),"lat"=c(36,36,37,37))
    foo.sf <- st_as_sf(foo.df, coords = c("long","lat"))
    poly <- concaveman(foo.sf) ## in case points are out of order
    point.df <- data.frame("long"=c(136.2,136.5,137.5),"lat"=c(36.5,36.5,36.5))
    point.sf <- st_as_sf(point.df, coords = c("long","lat"))

good_points <- st_join(point.sf,poly,join=st_within)
问题不在于concaveman软件包

good_points <- st_join(point.sf,foo.sf,join=st_within)

ggplot() + 
  geom_sf(data = poly) +
  geom_sf(data= good_points)

good\u points我想您正在寻找
st\u filter
。这样,您将只获得在多边形中找到的点。
good points
对象现在只包含两个点,而不是三个点(如OP中的点)


我想记住的好几点。。。可能使用
st_交叉点(point.sf,poly)
?不完全肯定是的!这在多边形对象上非常有效。但在另一个多边形上,它返回一个点而不是两个点!是的,就是这样。它还可以和我直接从点创建的另一个_poly对象一起使用!sf并不“简单”,但它与ggplot配合得很好!
good_points <- st_join(point.sf,foo.sf,join=st_within)

ggplot() + 
  geom_sf(data = poly) +
  geom_sf(data= good_points)
another_poly <- st_polygon(list(as.matrix(foo.df)))
good_points <- st_join(point.sf,another_poly,join=st_within)
good_points <- st_filter(point.sf, poly)

# Simple feature collection with 2 features and 0 fields
# Geometry type: POINT
# Dimension:     XY
# Bounding box:  xmin: 136.2 ymin: 36.5 xmax: 136.5 ymax: 36.5
# CRS:           NA
#            geometry
# 1 POINT (136.2 36.5)
# 2 POINT (136.5 36.5)