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

如何统计R数据框中每个经纬度点位250米半径范围内的其他点位数量

R实现统计经纬度点位250米范围内其他点位数量

实现思路

  • 基于经纬度计算两点间球面距离,默认适配WGS84坐标系,距离单位统一为米
  • 生成所有点位两两之间的距离矩阵
  • 对每个点位,排除自身后统计距离≤250米的点位总数

实现代码

首先安装必要依赖包(已安装可跳过):
install.packages(c("tidyverse", "geosphere"))

完整运行代码:

# 加载依赖包
library(tidyverse)
library(geosphere)

# 构造示例数据框
df <- tribble(~ id,       ~ lon,              ~ lat,
              1, -56.2112038,         -34.8358207,
              2, -55.96403429999999,  -34.7260945,
              3, -56.155449,          -34.9030824,
              4, -55.2711453,         -34.8665964,
              5, -56.210083,          -34.865306,
              6, -56.0575984,         -34.8775368,
              7, -54.9485448,         -34.9260087,
              8, -56.146228,          -34.907991,
              9, -56.1953583,         -34.8643363,
              10, -56.1821508,        -34.8697975,
              11, -56.1498662,        -34.8849854,
              12, -56.1469807,        -34.9119864,
              13, -56.155763,         -34.9154153,
              14, -56.09861610000001, -34.8896448,
              15, -56.15526680000001, -34.9189892,
              16, -56.0582918,        -34.8873091,
              17, -54.9529404,        -34.9221666,
              19, -106.6971588,       -35.1366719,
              20, -56.1616095,        -34.8937622)

# 提取经纬度矩阵(注意输入顺序必须是经度在前,纬度在后)
coords <- as.matrix(df[, c("lon", "lat")])

# 计算所有点位两两之间的距离(输出单位为米)
dist_matrix <- distVincentySphere(coords)

# 统计每个点位250米范围内除自身外的其他点位数量,写入新列
df$neighbor_count <- apply(dist_matrix, 1, function(x) sum(x <= 250) - 1)

说明

  • distVincentySphere是高精度球面距离计算函数,适配短距离场景的精度需求
  • 距离矩阵对角线元素为点位与自身的距离(值为0),因此统计后减1排除自身
  • 若处理点位量级超过1万,建议改用空间索引方法提升计算效率,避免生成大尺寸距离矩阵

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 03:36:00