【问题标题】:Convert lat and long dataframe to multiple spatial polygons in R将 lat 和 long 数据帧转换为 R 中的多个空间多边形
【发布时间】:2025-11-23 01:45:01
【问题描述】:

我要解决两个问题,第一个问题是主要问题。希望我已经体面地解释了第二个。

1) 我最初的问题是尝试从 tibble 创建空间多边形数据框。例如,我有一个概述美国各州的小标题,来自 urbnmapr 库,我希望能够为所有 50 个州绘制空间多边形。 (注意:我已经在 ggplot 中根据这些数据制作了地图,但我特别希望空间多边形在传单中绘制和动画):

> states <- urbnmapr::states
> states

# A tibble: 83,933 x 10
    long   lat order hole  piece group state_fips state_abbv state_name fips 
   <dbl> <dbl> <int> <lgl> <fct> <fct> <chr>      <chr>      <chr>      <chr>
 1 -88.5  31.9     1 FALSE 1     01.1  01         AL         Alabama    01   
 2 -88.5  31.9     2 FALSE 1     01.1  01         AL         Alabama    01   
 3 -88.5  31.9     3 FALSE 1     01.1  01         AL         Alabama    01  
...

2) 完成此操作后,我将希望通过州名称将来自单独 tibble 的附加数据连接到空间多边形。如果我每年都有不同的数据,那么最好的方法是什么?即对于 50 个州,我有三年的数据,所以我会为这些州创建 150 个不同的多边形,或者有 50 个州的多边形,但每个州都有所有信息,以便能够为不同的州制作 3 个不同的所有州图年?

【问题讨论】:

  • 您也可以使用albersusa 包中的多边形数据。由于多边形数据是一个sf对象,所以用leaflet绘制地图更容易。

标签: r maps polygon spatial


【解决方案1】:

我可以向您推荐以下内容(未选中,因为我无法使用我的 R 版本访问 urbnmapr 包)。

问题 1

如果您特别想要多边形,我认为最好的方法是将数据框连接到来自 shapefile 的对象。

如果你还想自己做,你需要做两件事:

  1. 将您的tibble 转换为具有点几何的空间对象
  2. 按州聚合点

sf 包可以两者兼得。对于第一步(简单的),使用sf_as_sf 函数。

library(sf)
states
states_spat <- states %>% st_as_sf(., coords = c("lon","lat"))

第二步,您需要聚合几何。我可以向您推荐一些可以为您提供MULTIPOINT 几何形状的东西,而不是多边形。要转换成多边形,你可以找到这个thread 来帮助

states_spat <- states_spat %>% group_by(state_name) %>% 
  dplyr::summarise(x = n())

问题 2

这是基于数据和空间对象(例如状态代码)之间的公共属性的标准连接。来自dplyrmerge*_join 函数处理sf 数据,就像处理tibbles 一样。你有元素there

顺便说一句,我认为这样做比从一系列点创建自己的多边形更好。

【讨论】:

  • 感谢您的帮助!我尚未正式检查这是否能解决问题,但我非常感谢您的建议,并会尽快进行调查