我一直在使用QGIS中的溶解功能(我使用的是3.28.9-Firenze版本)。我对该功能的欣赏之处在于它有一个选项“将不相交的功能分开”。我正在寻找一种在 R 中执行此操作的方法,这样我就不需要来回切换到 QGIS。
我该如何在 R 中做到这一点?该示例显示了多边形,但我也想对线要素执行此操作。下面是一个示例数据集以及我在 R 中尝试过的内容。
我知道可以在 R 中完成按组溶解,但输出仅保留与数据集中的组相同数量的特征。在下面的示例中,我有 6 个不同的空间特征,要么属于框 1,要么属于框 2。当我按组溶解时,结果只是两个特征,每个组一个。它不考虑溶解的特征是否共享几何形状。期望的结果应该是四个不同的特征(右上角 - 溶解框 1;中间 - 溶解框 2;中间 - 单框 1;左下 - 单框 2)。
library(sf)
library(dplyr)
# Create example data
sq = function(pt, sz = 1) st_polygon(list(rbind(c(pt - sz), c(pt[1] + sz, pt[2] - sz), c(pt + sz), c(pt[1] - sz, pt[2] + sz), c(pt - sz))))
x = st_sf(box = 1:2, st_sfc(sq(c(4.2,4.2)), sq(c(0,0)), sq(c(1, -0.8)), sq(c(0.5, 1.7)), sq(c(3,3)), sq(c(-3, -3))))
# Visualise
plot(x)
# Dissolve
dissolve <- x |>
group_by(box) |>
summarise()
## Only two features are kept; one for box 1 and one for box 2
# Show dissolve results
dissolve
plot(dissolve)
您的 QGIS 方法通常应该可以通过 R 的 qgisprocess 包进行访问。
然而,目前这种特定的 QGIS 算法以这种方式使用似乎存在问题;报告于https://github.com/qgis/QGIS/issues/55587。当这个问题解决后,您可以在 R 中使用这种方法,但当然它需要 QGIS 存在。
也许这会起作用?
x %>% group_by(box) %>% summarise() %>% sf::st_cast("POLYGON")
# box
# <int> <POLYGON>
# 1 1 ((0 0.2, 2 0.2, 2 -1.8, 0 -1.8, 0 0.2))
# 2 1 ((2 2, 2 4, 3.2 4, 3.2 5.2, 5.2 5.2, 5.2 3.2, 4 3.2, 4 2, 2 2))
# 3 2 ((-4 -2, -2 -2, -2 -4, -4 -4, -4 -2))
# 4 2 ((-1 -1, -1 1, -0.5 1, -0.5 2.7, 1.5 2.7, 1.5 0.7, 1 0.7, 1 -1, -1 -1))