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

如何合并相同地理空间下属性不同的两个shapefile文件?

问题解决方法

你需要的是空间连接操作,而非普通的属性合并、行/列拼接:之前使用的merge是按两个表共有的属性字段做匹配,你手头的两份shapefile没有可匹配的公共属性字段,因此会出现大量NA;bind/combine是直接拼接两个表的行或列,完全不关联两者的空间位置关系,不符合你的需求。

调整后代码

library(sf)
library(dplyr)

# 读取数据并统一坐标系,这部分原有逻辑正确
nycc21 <- sf::read_sf('nycc.shp') %>%
  sf::st_transform('+proj=longlat +datum=WGS84')
nycb20 <- sf::read_sf('nycb2020.shp') %>%
  sf::st_transform('+proj=longlat +datum=WGS84')    

# 空间连接:以人口普查区块为左表,匹配每个区块所属的市议会选区
# st_within 逻辑为匹配完全落在选区内的区块,符合人口普查区块的划分规则
merged <- st_join(
  x = nycb20, 
  y = nycc21, 
  join = st_within
)

# 整理为你需要的属性表格式(请替换下方字段名为你数据内的实际字段名)
result <- merged %>%
  # 计算区块质心坐标
  mutate(centroid = st_coordinates(st_centroid(geometry)) %>%
           as.data.frame() %>%
           {paste0(round(.$X, 4), ", ", round(.$Y,4))}) %>%
  # 筛选需要的列,示例字段名对应NYC公开数据的默认字段
  select(
    市议会选区 = CounDist,
    区块质心坐标 = centroid,
    普查区块编号 = GEOID
  ) %>%
  # 可选:移除空间几何列,只保留属性表
  st_drop_geometry()

View(result)

补充说明

  • 如果你需要的输出是按市议会选区排序,只需要在生成result的步骤末尾加%>% arrange(市议会选区)即可
  • 如果存在少量跨选区的边界区块,把join = st_within改为join = st_intersects即可匹配所有和选区有重叠的区块,再按需去重即可

内容的提问来源于stack exchange,提问作者eric andre the gian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:06:05