【问题标题】:Convert from simple feature geometry to dataframe从简单的特征几何转换为数据框
【发布时间】:2019-07-10 19:37:18
【问题描述】:

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

【问题讨论】:

    标签: r sf


    【解决方案1】:

    你已经有了一个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 和 extent 之类的事情。

    【讨论】:

    • 谢谢。很有帮助的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 2019-09-24
    • 1970-01-01
    • 2018-08-17
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多