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

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

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

library(tibble)

library(dplyr)

library(sf)

ncircles

rmax

x_limits

y_limits

set.seed(100)

xy

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_buffer(runif(ncircles, min = 1, max = 20))

plot(polys[1])

f280aebee689cd70ce0c9125e5a47e55.png

我需要派生一个包含ALL的sf或sp多边形,并且只需要交叉点生成的多边形,例如:

31cffbf7d127bdd6c66c9c2aee6d489b.png

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

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

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

(欢迎基于sf和sp的解决方案)

更新:

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

更新2:

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

更新3:

我将赏金奖给了@ shuiping-chen(谢谢!),他的回答正确地解决了所提供的示例数据集上的问题。然而,“方法”一般被推广到“四倍”或“n-uple”交叉点可能的情况。如果我管理的话,我会在未来几天尝试解决这个问题并发布一个更通用的解决方案!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值