【问题标题】:How to filter out each polygon from its list of neighbors with sf::st_intersects如何使用 sf::st_intersects 从其邻居列表中过滤掉每个多边形
【发布时间】:2020-08-20 09:16:41
【问题描述】:

我需要为sf 数据集中的每个多边形提取相邻多边形。

这是一个简单的例子:

library(tidyverse)
library(sf)

demo(nc, ask = FALSE, verbose = FALSE)
nc <- nc %>% 
  mutate(polygon_id = row_number())

我已经成功提取了sf::st_intersects的邻居

neighbors <- st_intersects(nc, nc)
neighbors[[5]]
[1]  5  6  9 16 28

问题是每个多边形(这里是 5 个)都包含在邻居列表中。只使用一个nc 数据集给我同样的结果

neighbors <- st_intersects(nc)
neighbors[[5]]
[1]  5  6  9 16 28

关于如何从相邻/相邻多边形列表中过滤掉实际多边形的任何提示?

【问题讨论】:

  • 我设法用st_touches而不是st_intersects解决了这个问题

标签: r polygon sf


【解决方案1】:

好问题。这个问题可以有很多解决方案。但是这个问题的简单答案:"Any tips on how to filter out the actual polygon from the list of adjacent/neighboring polygons?",是使用带有 R 内核的 Jupyter Lab IDE 完成的。以下代码提供了一种回答问题的方法。

nc 数据集中有 100 个县。此代码以颜色显示所选县并显示所有相邻县。此代码适用于北卡罗来纳州 100 个县中的任何一个县。这里选择了100个县。

代码:

nc1 <- nc %>% mutate(c_id = 1:nrow(nc))        
n = 100                  
grp <- st_intersects(nc1, nc1[n,1]   , sparse = F ) 

neighborhood <- nc1[grp,]
neighborhood 

plot(neighborhood$geom)
plot(nc1[n,1], col = 'blue', add = TRUE)   #

此代码很容易扩展。我写了一个快速的小函数来显示邻国的名字(这里没有显示),但这个问题似乎很可能是一个与绘图相关的问题。

情节显示在Link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2012-11-09
    相关资源
    最近更新 更多