gpt4 book ai didi

r - 高效提取 MultiPolygon 中自相交特征生成的所有子多边形

转载 作者:行者123 更新时间:2023-12-03 11:01:42 26 4
gpt4 key购买 nike

从包含相当多(大约 20000)个可能部分重叠的多边形的 shapefile 开始,我需要提取所有通过与不同“边界”相交而产生的子多边形。

在实践中,从一些模型数据开始:

library(tibble)
library(dplyr)
library(sf)

ncircles <- 9
rmax <- 120
x_limits <- c(-70,70)
y_limits <- c(-30,30)
set.seed(100)
xy <- data.frame(
id = paste0("id_", 1:ncircles),
x = runif(ncircles, min(x_limits), max(x_limits)),
y = runif(ncircles, min(y_limits), max(y_limits))) %>%
as_tibble()

polys <- st_as_sf(xy, coords = c(2,3)) %>%
st_buffer(runif(ncircles, min = 1, max = 20))

plot(polys[1])

Input Data

我需要推导出 sfsp包含所有且仅包含由交叉点生成的多边形的多多边形,例如:

enter image description here

(请注意,颜色只是为了举例说明预期的结果,其中每个“不同颜色”的区域都是一个单独的多边形,不会覆盖任何其他多边形)

我知道我可以通过一次分析一个多边形,识别并保存它的所有交叉点,然后“删除”这些区域形成完整的多多边形并循环进行,从而解决问题,但这很慢。

我觉得应该有一个更有效的解决方案,但我无法弄清楚,所以任何帮助将不胜感激!
(欢迎基于 sfsp 的解决方案)

更新 :

最后,我发现即使是“一次一个多边形”的任务也远非简单!我真的在这个看似“简单”的问题上挣扎!任何提示?即使是缓慢的解决方案或开始正确路径的提示也将不胜感激!

更新 2 :

也许这会澄清一些事情:所需的功能类似于此处描述的功能:

https://it.mathworks.com/matlabcentral/fileexchange/18173-polygon-intersection?requestedDomain=www.mathworks.com

更新 3 :

我将赏金授予了 @shuiping-chen(谢谢!),他的回答正确地解决了提供的示例数据集上的问题。然而,“方法”必须推广到可能出现“四重”或“n-uple”交叉的情况。我会在接下来的几天里努力解决这个问题,如果我能做到的话,我会发布一个更通用的解决方案!

最佳答案

这现已在 R 包 sf 中实现,作为 st_intersection 时的默认结果。使用单个参数(sf 或 sfc)调用,参见 https://r-spatial.github.io/sf/reference/geos_binary_ops.html对于示例。 (我不确定 origins 字段是否包含有用的索引;理想情况下,它们应该只指向 x 中的索引,现在它们有点自我引用)。

关于r - 高效提取 MultiPolygon 中自相交特征生成的所有子多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44631044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com