【发布时间】:2018-12-10 05:14:46
【问题描述】:
我有一个如下的数据框:
long lat group
1.0 1.0 1
1.0 2.0 1
2.0 2.0 1
5.0 5.0 2
5.0 6.0 2
6.0 6.0 2
如何将其转换为多边形对象列表?
谢谢!
【问题讨论】:
-
“多边形对象”是什么意思?
标签: r
我有一个如下的数据框:
long lat group
1.0 1.0 1
1.0 2.0 1
2.0 2.0 1
5.0 5.0 2
5.0 6.0 2
6.0 6.0 2
如何将其转换为多边形对象列表?
谢谢!
【问题讨论】:
标签: r
您的点序列不是封闭的,因此在 sf 中,您需要稍微调整一下才能将它们变成多边形。一种选择是制作多点对象并转换为多边形:
library(tidyverse)
library(sf)
df <- data.frame(long = c(1, 1, 2, 5, 5, 6),
lat = c(1, 2, 2, 5, 6, 6),
group = c(1L, 1L, 1L, 2L, 2L, 2L))
df_sf <- df %>%
group_by(group) %>%
summarise(geometry = st_sfc(st_cast(st_multipoint(cbind(long, lat)), 'POLYGON'))) %>%
st_sf()
df_sf
#> Simple feature collection with 2 features and 1 field
#> geometry type: POLYGON
#> dimension: XY
#> bbox: xmin: 1 ymin: 1 xmax: 2 ymax: 2
#> epsg (SRID): NA
#> proj4string: NA
#> # A tibble: 2 x 2
#> group geometry
#> <int> <POLYGON>
#> 1 1 ((1 1, 1 2, 2 2, 1 1))
#> 2 2 ((5 5, 5 6, 6 6, 5 5))
ggplot(df_sf) + geom_sf()
【讨论】: