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

如何在R中基于sf多边形对象计算最近邻?

在R的sf对象中计算邮政编码多边形的最近邻指标

要在sf对象上实现最近邻计算,推荐结合spdep包(空间依赖分析工具,与sf兼容良好),以下是两种常用方法:

方法1:基于质心的k近邻计算(高效推荐)

多边形的最近邻计算通常以质心作为要素的代表位置,这种方法计算效率高,适合大数据量:

# 加载空间依赖分析包
library(spdep)

# 计算邮政编码多边形的质心
GER_centroids <- st_centroid(GER_postcode_subsample)

# 计算k=4的最近邻(返回每个要素的近邻索引与对应距离)
knn_result <- knearneigh(st_coordinates(GER_centroids), k = 4)

# 查看每个要素的4个最近邻索引
knn_result$nn

# 查看每个要素到最近邻的距离
knn_result$dist

# 可选:转换为邻接列表/空间权重矩阵,用于后续空间分析(如Moran's I)
knn_nb <- knn2nb(knn_result)
knn_weights <- nb2listw(knn_nb)

方法2:基于多边形边界的精确最近邻计算(精度优先)

如果需要基于多边形实际边界的最短距离计算(而非质心),可以使用sf的st_distance函数,但这种方法计算量较大,适合小样本数据:

# 计算所有多边形两两之间的边界距离矩阵
dist_matrix <- st_distance(GER_postcode_subsample)

# 定义需要的近邻数量
k <- 4

# 对每个多边形,筛选出除自身外距离最小的k个要素的索引
knn_indices <- apply(dist_matrix, 1, function(x) order(x)[2:(k+1)])

# 查看结果:每列对应一个多边形的k个最近邻索引
knn_indices

说明

  • spdep的knearneigh函数与sp包中的用法逻辑一致,但支持直接传入sf对象的坐标矩阵(通过st_coordinates提取);
  • 质心计算是空间分析中处理面要素的常规操作,平衡了精度与计算效率;
  • 若需进一步分析空间关联,knn2nb和nb2listw可以将近邻结果转换为空间权重矩阵,支持后续的空间自相关分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:16:24