从数据帧创建 sf 多边形

can*_*156 6 r r-sf

我有一个包含一组多边形坐标的数据框。这就是我将它转换为spatialPolygons(包sp)的方式

my.df <- data.frame(
  Plot = c("A", "A", "A", "A", "A", "B", "B", "B", "B", "B"),
  Corner = c("SW", "NW", "NE", "SE", "SW2", "SW", "NW", "NE", "SE", "SW2"),
  Easting = c(511830, 512230, 512230, 511830, 511830, 511730, 512130, 512130, 511730, 511730),
  Northing = c(7550903, 7550903, 7550503, 7550503, 7550903, 7550803, 7550803, 7550403, 7550403, 7550803))


utm18 <- CRS("+init=EPSG:26918")

my.sp <- df_to_SpatialPolygons(my.df, keys = "Plot", coords = c("Easting", "Northing"), utm18)

plot(my.sp)

Run Code Online (Sandbox Code Playgroud)

如何直接从 my.df 创建包含这两个多边形的 sf 对象(包 sf)?


编辑:我的问题在这个问题中得到了部分回答,但他们的回答仅说明了如何创建单个多边形。如何创建多个多边形?

通过R中的sf将经纬度序列转换为多边形

Sym*_*xAU 6

library(sfheaders) 让你直接从 data.frame 构造一个 sf 对象

library(sf)
library(sfheaders)

sf <- sfheaders::sf_polygon(
  obj = my.df
  , x = "Easting"
  , y = "Northing"
  , polygon_id = "Plot"
)
sf::st_crs( sf ) <- 26918

sf

# Simple feature collection with 2 features and 1 field
# geometry type:  POLYGON
# dimension:      XY
# bbox:           xmin: 511730 ymin: 7550403 xmax: 512230 ymax: 7550903
# z_range:        zmin: NA zmax: NA
# m_range:        mmin: NA mmax: NA
# CRS:            EPSG:26918
# id                       geometry
# 1  1 POLYGON ((511830 7550903, 5...
# 2  2 POLYGON ((511730 7550803, 5...


plot( sf )

Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


can*_*156 5

我根据 paqmo 的建议找到了一个答案,看看通过 R 中的 sf 将经度和纬度序列转换为多边形

该问题中提供的答案将数据框中的所有点分组为单个多边形。我添加了一个步骤,通过标识多边形的变量对数据框进行分组。

polygon <- my.df %>%
  st_as_sf(coords = c("Easting", "Northing"), crs = utm18) %>%
  group_by(Plot) %>%
  summarise(geometry = st_combine(geometry)) %>%
  st_cast("POLYGON")
Run Code Online (Sandbox Code Playgroud)