将具有相同几何形状的多边形组合成单个多边形,将它们的属性保留在生成的多边形中

Combine polygons with same geometry into single polygon, keeping their attributes in resulting polygon

我有一个 sf class 对象,其中有一些多边形:

id  use_type   area
1   housing    100
1   farming    200
2   farming    150
2   forest     100
3   housing    250

具有相同 id 值的多边形具有相同的几何形状。还有字段 use_typearea:第一个是多边形边界内土地利用类型的名称,第二个是多边形边界内该土地利用类型的区域。因此,每个重复的几何图形都包含有关单一土地利用类型的信息,但我想消除重复项并在列中包含有关土地利用类型的信息,每个列代表有关特定土地利用类型的区域的信息,而不是不同的多边形。像这样:

id  housing_area   farming_area   forest_area
1   100            200            NULL
2   NULL           150            100
3   250            NULL           NULL

我该怎么做?

是的,正如 camille 所提到的,很难用几何来完成这项工作,因为你没有提供一个可重现的几何示例。

您可以使用

分隔您的数据
tab <- sf::st_drop_geometry( your_sf_object )

然后用dplyr分组汇总(我先做数据):

library(dplyr)
library(sf)

tab <- "id use_type   area
1   housing    100
1   farming    200
2   farming    150
2   forest     100
3   housing    250"

tab <- read.table( text=tab, header=TRUE, 
                   stringsAsFactors = FALSE,
                   colClasses = c( "character", "character", "integer" ))

tab2 <- tab %>%
  group_by(id) %>%
  summarise( housing=sum( area[use_type=="housing"] ),
             farming=sum( area[use_type=="farming"] ),
             forest=sum( area[use_type=="forest"] ) )

> as.data.frame(tab2)
  id housing farming forest
1  1     100     200      0
2  2       0     150    100
3  3     250       0      0

然后获取您的 sf 对象的几何列并加入数据框(未测试,因为我没有您的数据)。

new_sf_object <- left_join( x=tab2, y=your_sf_object$geometry )