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

时间:2019-02-17 04:05:45

标签: r sf

我希望绘制两个彼此相邻的形状。形状是使用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对象。

1 个答案:

答案 0 :(得分:1)

您已经有一个data.frame,并且可以在其中对st_sfc对象执行转换, 使用基本的affine transformations。例如

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

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

enter image description here

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

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

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

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