合并多边形并求和它们的值
Merging polygons and summing their values
我有一个包含许多重叠多边形的数据框,我想将它们组合成一个形状,其值等于赋予每个单个多边形的值的总和。
一些示例数据:
df <- data.frame(x = c(0.5, 1.5, 4.5, 5.5),
y = c(1, 1, 1, 1),
id = c('a', 'b', 'c', 'd'),
score = c(1, 3, 2, 4))
s_df <- SpatialPointsDataFrame(df[, c('x', 'y')], df[, 3:4]) %>%
as('sf') %>%
st_buffer(dist = 1)
plot(s_df)
我可以使用 sf 包中的 st_union 函数获得这些多边形的并集,我认为下一步是在多边形和原始多边形之间进行空间连接。但是,我不知道该怎么做。
st_union 给出一个多边形对象作为其输出,但是 st_intersects 不适用于该对象 class,而且我似乎无法从多边形制作 SpatialPolygonsDataframe反对。
如此简单的任务,我觉得一定有一些我忽略或错过的基本功能
如有任何帮助,我们将不胜感激
你考虑过卑微的dplyr::summarise()
吗?
它将合并空间对象的几何图形 - 合并为单个几何图形,或者如果设置分组变量则合并为多个几何图形 - 并且它可以进行任何聚合,例如在这个玩具示例中计算总分。
一个可能的分组变量是多边形与它们自身的交集——它似乎在这个例子中有效,我希望它能概括
library(sf)
library(sp)
library(dplyr)
df <- data.frame(x = c(0.5, 1.5, 4.5, 5.5),
y = c(1, 1, 1, 1),
id = c('a', 'b', 'c', 'd'),
score = c(1, 3, 2, 4))
s_df <- SpatialPointsDataFrame(df[, c('x', 'y')], df[, 3:4]) %>%
as('sf') %>%
st_buffer(dist = 1)
plot(s_df)
result <- s_df %>%
group_by(group = paste(st_intersects(s_df, s_df, sparse = T))) %>%
summarise(score = sum(score))
plot(result["score"])
我有一个包含许多重叠多边形的数据框,我想将它们组合成一个形状,其值等于赋予每个单个多边形的值的总和。
一些示例数据:
df <- data.frame(x = c(0.5, 1.5, 4.5, 5.5),
y = c(1, 1, 1, 1),
id = c('a', 'b', 'c', 'd'),
score = c(1, 3, 2, 4))
s_df <- SpatialPointsDataFrame(df[, c('x', 'y')], df[, 3:4]) %>%
as('sf') %>%
st_buffer(dist = 1)
plot(s_df)
我可以使用 sf 包中的 st_union 函数获得这些多边形的并集,我认为下一步是在多边形和原始多边形之间进行空间连接。但是,我不知道该怎么做。
st_union 给出一个多边形对象作为其输出,但是 st_intersects 不适用于该对象 class,而且我似乎无法从多边形制作 SpatialPolygonsDataframe反对。
如此简单的任务,我觉得一定有一些我忽略或错过的基本功能
如有任何帮助,我们将不胜感激
你考虑过卑微的dplyr::summarise()
吗?
它将合并空间对象的几何图形 - 合并为单个几何图形,或者如果设置分组变量则合并为多个几何图形 - 并且它可以进行任何聚合,例如在这个玩具示例中计算总分。
一个可能的分组变量是多边形与它们自身的交集——它似乎在这个例子中有效,我希望它能概括
library(sf)
library(sp)
library(dplyr)
df <- data.frame(x = c(0.5, 1.5, 4.5, 5.5),
y = c(1, 1, 1, 1),
id = c('a', 'b', 'c', 'd'),
score = c(1, 3, 2, 4))
s_df <- SpatialPointsDataFrame(df[, c('x', 'y')], df[, 3:4]) %>%
as('sf') %>%
st_buffer(dist = 1)
plot(s_df)
result <- s_df %>%
group_by(group = paste(st_intersects(s_df, s_df, sparse = T))) %>%
summarise(score = sum(score))
plot(result["score"])