将具有相同几何形状的多边形组合成单个多边形,将它们的属性保留在生成的多边形中
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_type
和 area
:第一个是多边形边界内土地利用类型的名称,第二个是多边形边界内该土地利用类型的区域。因此,每个重复的几何图形都包含有关单一土地利用类型的信息,但我想消除重复项并在列中包含有关土地利用类型的信息,每个列代表有关特定土地利用类型的区域的信息,而不是不同的多边形。像这样:
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 )
我有一个 sf
class 对象,其中有一些多边形:
id use_type area
1 housing 100
1 farming 200
2 farming 150
2 forest 100
3 housing 250
具有相同 id
值的多边形具有相同的几何形状。还有字段 use_type
和 area
:第一个是多边形边界内土地利用类型的名称,第二个是多边形边界内该土地利用类型的区域。因此,每个重复的几何图形都包含有关单一土地利用类型的信息,但我想消除重复项并在列中包含有关土地利用类型的信息,每个列代表有关特定土地利用类型的区域的信息,而不是不同的多边形。像这样:
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 )