将一个加强的数据框转换回sf对象

5

fiftystater软件包提供了一个美国地图,其中夏威夷和阿拉斯加作为插入物显示在下方。fifty_states对象已经过加强以用于ggplot2。然而,我想使用geom_sf将其绘制为sf对象。

更一般的问题是,将加强的数据框转换回sf多边形的最佳方法是什么?

library(fiftystater)
fifty_states <– fifty_states

> head(fifty_states)
       long      lat order  hole piece      id     group
1 -85.07007 31.98070     1 FALSE     1 alabama Alabama.1
2 -85.11515 31.90742     2 FALSE     1 alabama Alabama.1
3 -85.13557 31.85488     3 FALSE     1 alabama Alabama.1
4 -85.13156 31.78381     4 FALSE     1 alabama Alabama.1
5 -85.13017 31.77885     5 FALSE     1 alabama Alabama.1
6 -85.11529 31.73157     6 FALSE     1 alabama Alabama.1

请注意,这个问题 从坐标生成多边形 有点类似,但并不能完全满足我的需求。


你能使用 dput() 分享你的数据吗? - Tung
数据来自fiftystater包,因此您只需安装该包,然后运行提供的代码中的下一行即可。 - sebdalgarno
1个回答

6

这样做是可行的:首先使用st_as_sf将数据集转换为点sf,然后从每个州/地块的点创建多边形。

sf_fifty <- sf::st_as_sf(fifty_states, coords = c("long", "lat")) %>% 
  group_by(id, piece) %>% 
  summarize(do_union=FALSE) %>%
  st_cast("POLYGON") %>% 
  ungroup()

plot(sf_fifty["id"])

(参见https://github.com/r-spatial/sf/issues/321


2
sfheaders::sf_polygon(x = fifty_states, polygon_id = "id", linestring_id = "piece", x = "long", y = "lat") 也可以使用。 - SymbolixAU

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接