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

R语言使用Tigris做地图相交如何保留全部图层边界

tigris处理明尼苏达县与居民点边界及绘图方案

问题核心

原代码存在两个逻辑问题:

  1. 调用counties()、places()时未指定state参数,会先下载全美范围数据再过滤,运行效率极低
  2. 直接对两个图层做st_intersection()会返回两个图层几何重叠的裁切片段,不会保留完整县级边界,单独绘制该结果自然无法显示完整县界

原错误绘图效果如下:
相交后单独绘制居民点裁切片段的结果


完整实现步骤

1. 加载依赖包

library(tigris)
library(sf)
library(dplyr)
library(tmap)
# 开启本地缓存,避免重复下载数据
options(tigris_use_cache = TRUE)

2. 数据获取与正确相交/关联

直接在tigris接口中指定明尼苏达州(州缩写MN),仅下载目标州数据,无需额外过滤:

# 获取明尼苏达县级简化制图边界
mn_counties <- counties(cb = TRUE, state = "MN")
# 获取明尼苏达居民点简化制图边界
mn_places <- places(cb = TRUE, state = "MN")

如果需求是给居民点附加所属县的属性(如县名、县FIPS编码,这也是多数场景下做空间匹配的目标),无需裁切几何,使用空间连接即可,能完整保留两个图层的原始边界:

# 空间匹配:为每个居民点关联其所属县的属性
mn_places_with_county_attr <- st_join(
  x = mn_places,
  y = mn_counties %>% select(COUNTYFP, NAME, NAMELSAD),
  join = st_intersects
)

如果确实需要做几何相交(即得到被县界分割后的居民点几何片段,同时保留双方法定边界的属性匹配),原有相交逻辑可以保留,但要清楚该输出结果是裁切后的片段,不包含完整县界:

# 几何相交(按需使用)
mn_intersected <- st_intersection(mn_places, mn_counties)

3. 同时展示两层边界的绘图代码

tmap遵循先绘图层在下层、后绘图层在上层的叠加逻辑,分别加载两个图层,设置差异化的填充、边框样式即可同时显示两类边界:

tm_shape(mn_counties) +
  # 县界作为底图:浅灰填充、深灰细边框
  tm_polygons(
    fill = "#f0f0f0",
    col = "#636363",
    lwd = 0.7,
    alpha = 1
  ) +
  tm_shape(mn_places) +
  # 居民点边界叠在上层:透明填充、蓝色粗边框,避免遮盖底图县界
  tm_polygons(
    fill = NA,
    col = "#2171b5",
    lwd = 1
  ) +
  # 可选布局元素
  tm_layout(
    main.title = "明尼苏达州县级边界与居民点分布",
    main.title.size = 1.1,
    frame = FALSE
  ) +
  tm_scale_bar(position = c("left", "bottom")) +
  tm_compass(position = c("right", "top"))

4. 导出shapefile

使用st_write将处理好的图层导出为shapefile格式即可:

# 导出县级边界
st_write(mn_counties, "mn_county_boundary.shp", delete_layer = TRUE)
# 导出带县属性的居民点边界
st_write(mn_places_with_county_attr, "mn_places_with_county.shp", delete_layer = TRUE)

提示:cb = TRUE返回的是简化后的制图边界,适合快速出图;如果需要开展高精度空间分析,将参数设置为cb = FALSE即可下载TIGER/Line原始高精度边界数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:51:19