【发布时间】:2021-09-22 01:11:37
【问题描述】:
我在 shapefile 中有两组多边形,使用 R 的 sf 包导入。我称他们为 A 和 B。
我想获取 B 中的所有多边形,其中 a) 与 A 中的任何多边形重叠 0% 或 b) 一些 与 A 中的多边形不重叠。
例如,对于 B 中的给定多边形 b,我确实不希望 b 100% 包含在两个(或A 中的三个或四个...) 多边形。
但是,假设 b 有 50% 包含在 A 中的两个(或三个或四个...)多边形中,但其中 50% 不包含在 A 中的任何其他多边形中。这种情况下,我想选择b。或者如果 100% 的 b 在 A 中的所有多边形之外,我想选择 b。
是否有可能使用 st_intersects 来做到这一点?请让我知道图表或其他内容是否有助于澄清。
======
更明确地说:
我有类似的东西
## A is an sf object with many polygons, and so is B
## they both are part of the same geospatial area,
## with some non-overlapping regions and many overlapping.
## I want all polygons in B that partially but not fully
## are covered by A. That is, I'm searching for regions of
## the area not entirely covered by A, but if A covers it,
## I don't need B.
## So consider a loop approach
for (b in 1:nrow(B)) {
if( !st_intersects(B[b,], A) {
....
}
}
这就是我卡住的地方...我不太确定是否应该将多边形与 A 或 st_combine(A) 进行比较。而且我不确定如何设置 st_intersects 以获得非重叠区域,或使用 st_intersection。我对 sf 有点陌生,我以前都用过,但只是为了测试 一些 重叠,从不测试这样的情况。
【问题讨论】:
-
我认为您可以计算交叉点,然后计算区域的比率。无论如何,如果您可以创建一个reproducible example,那将非常有用。
-
谢谢——在这种情况下,我宁愿用很少的代码来显示,但我会添加我所拥有的。在高层次上,给定多边形集 A 和 B,遍历 B 中的所有多边形并用 A 执行 st_intersects() 。但这就是我卡住的地方。我想排除与 A 中的一个或多个 100% 重叠的多边形,并且只得到那些存在一定程度非重叠的多边形,但 st_intersects() 将给我任何交叉点。我不知道如何改变它以获得只有部分重叠但没有完全重叠的情况。
标签: r gis geospatial shapefile sf