You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R获取美国各州及郡县质心经纬度的数据框?

获取美国各州郡县质心数据框的解决方案

过去10-15年,不少人问过如何获取包含美国各州、郡县名称及对应质心经纬度的数据框,但很多旧方案依赖的R包或函数已经失效(比如废弃的GISTools包)。之前尝试的单个州示例(如北卡罗来纳州)存在两个问题:一是替换州名会报错(比如尝试弗吉尼亚州时,sf包自带数据中没有对应shape文件,会提示dsn为空);二是无法覆盖美国全部50个州。

以下是可直接获取全美国郡县质心数据的完整方案:

核心思路

放弃sf包自带的单个州测试数据,改用tigris包直接获取美国普查局官方的全国郡县边界数据,再通过sf包计算质心并提取经纬度,最终整理成目标格式的数据框。

完整代码实现

# 安装所需包(首次运行时执行)
install.packages(c("sf", "tigris", "dplyr"))

# 加载包
library(sf)
library(tigris)
library(dplyr)

# 获取美国全部郡县的空间数据(返回sf格式对象)
us_counties <- counties(class = "sf")

# 转换为等面积投影(避免经纬度球面坐标系下质心计算的偏差)
us_counties_proj <- st_transform(us_counties, crs = "ESRI:102003")

# 计算每个郡县的质心
us_centroids <- st_centroid(us_counties_proj)

# 转换回WGS84经纬度坐标系,并提取纬度、经度值
us_centroids_latlon <- st_transform(us_centroids, crs = 4326) %>%
  mutate(
    纬度 = st_coordinates(.)[, 2],
    经度 = st_coordinates(.)[, 1]
  )

# 整理成目标数据框:州名、郡县名、纬度、经度,移除空间属性转为普通数据框
result_df <- us_centroids_latlon %>%
  select(州名 = NAME, 郡县名 = COUNTY, 纬度, 经度) %>%
  st_drop_geometry()

# 查看前6行结果
head(result_df)

关键说明

  1. 数据来源:tigris包直接调用美国普查局的公开数据,包含全部50个州的郡县边界,无需手动下载shape文件。
  2. 投影转换:先转成等面积投影(ESRI:102003)计算质心,避免经纬度坐标系下的计算偏差,最后再转回常用的WGS84(EPSG:4326)经纬度格式。
  3. 错误原因:之前尝试调用system.file('shape/va.shp', package = "sf")报错,是因为sf包仅自带北卡罗来纳州的测试数据,没有其他州的shape文件。

内容的提问来源于stack exchange,提问作者tassones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:03:13