从简单的要素几何转换为数据框

Convert from simple feature geometry to dataframe

我想绘制两个相邻的形状。这些形状是使用 transformR 包创建的。此代码将它们绘制在彼此之上。

library(transformr)
library(ggplot2)


star_1a <- poly_star(n = 5, st = TRUE)
circle_2a <- poly_circle(st = TRUE)

df1 <- data.frame(
  geo = sf::st_sfc(star_1a, circle_2a),
  col = c('steelblue', 'green'),
  id = c(1, 2)
)

ggplot(df1) +
  geom_sf(aes(geometry = geometry)) 

我可以从每个形状中删除 st = TRUE 选项以获得数据框,但假设我不想这样做。如何将 sfg 对象转换为具有 x、y 列的数据框,以便我可以将圆向右移动一点,然后将它们转换回 sfg 对象。

你已经有了一个data.frame,你可以对里面的st_sfc对象进行改造, 使用基本 affine transformations。例如

df1[1,1] = df1[1,1] + c(2,0) 

ggplot(df1) +
  geom_sf(aes(geometry = geometry)) 

注释: df1[1,1]选择第一列第一行,即星号。添加 c(2,0) 使其在 x 方向平移 +2。

您实际提出的问题的答案: 如果你真的需要x,y坐标作为data.frame中的列,你可以使用

df2 = data.frame(st_coordinates(df1[,1]))

但是,对于您描述的用例,上面的第一种方法会更好。不仅因为它更快更整洁,还因为操作 sf 对象本身会处理 crs 和范围之类的事情。