微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 st_intersects() 为 sf >1.0.0 找到两个几何的交集

如何解决使用 st_intersects() 为 sf >1.0.0 找到两个几何的交集

我想知道如何正确使用 st_intersect() for sf >1.0.0。我正在重用我在 sf 0.9.7 版本上编写的代码并注意到一个变化。我知道 s2 对 sf 的实现,但我不确定在这种情况下如何使用它。我有一个包含许多行的 data.frame,包括纬度和经度,我想选择一个区域(多边形)内的行。以下代码(对于 sf ==0.9.7)将返回警告:

# Creates some points
table<-data.frame(type=c("1","2","3"),Longitude=c(0,2,4),Latitude=c(0,5))
df<-st_as_sf(table,coords=c("Longitude","Latitude"),crs=4326)
# Creates a polygon
s <- rbind(c(-180,-90),c(-180,90),c(180,-90)) %>% list %>% st_polygon %>% st_sfc(crs=4326)
# Evaluates intersection
st_intersects(df,s,sparse = FALSE)

对于 0.9.7:

尽管坐标是经度/纬度,但 st_intersects 假设它们是平面的

     [,1]
[1,] TRUE
[2,] TRUE
[3,] TRUE

对于 sp>1.0.0 在这种情况下,函数返回:

      [,] FALSE
[2,] FALSE
[3,] FALSE

我不确定如何调整代码以将 st_intersects() 与我的数据帧一起使用。例如,使用 sfc 对象似乎有效:

# create square
s <- rbind(c(1,1),c(10,10),c(1,1)) %>% list %>% st_polygon %>% st_sfc(crs=4326)
# create random points
p <- runif(50,11) %>% cbind(runif(50,11)) %>% st_multipoint %>% st_sfc(crs=4326) %>% st_cast("POINT")

# Intersect
st_intersects(p,sparse=FALSE)

       [,1]
 [1,]  TRUE
 [2,] FALSE
 [3,]  TRUE
   ...
[49,] FALSE
[50,] FALSE

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。