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

如何在R中使用st_distance?解决‘Lon对象未找到’报错问题

解决st_distance报错"object 'Lon' not found"的问题

问题原因

  1. st_distance是sf包的函数,仅接受sf几何对象作为输入,不能直接传入普通数据框的经纬度列。
  2. 用管道%>%调用st_distance时,该函数不属于dplyr动词,无法自动识别数据框内的Lon/Lat列,导致找不到对象。

修正步骤及代码

1. 先将普通数据框转为sf空间对象

需要指定经纬度列和原始坐标系(通常是WGS84,EPSG:4326),再转换为米单位的坐标系(方便直接计算公里级距离):

library(sf)
library(dplyr)

# 清理缺失值并转为sf对象
An.TP <- An.TP %>%
  na.omit() %>%
  st_as_sf(coords = c("Lon", "Lat"), crs = 4326) %>% # 转换为WGS84空间对象
  st_transform(crs = 3857) # 转为Web墨卡托坐标系,单位为米(也可使用当地UTM坐标系更精准)

2. 计算点间距离并筛选

以计算每个点与下一个点的距离为例,筛选距离大于1公里(1000米)的记录:

# 计算相邻点距离
An.TP <- An.TP %>%
  mutate(distance = st_distance(., lead(.), by_element = TRUE))

# 筛选距离>1000米的记录
An.TP_filtered <- An.TP %>%
  filter(distance > 1000)

补充说明

  • 若要计算所有点对的距离,去掉lead(.)即可,但会得到距离矩阵,需根据需求调整后续处理逻辑。
  • 若不想转换坐标系,可直接在st_distance中指定单位:st_distance(., lead(.), by_element = TRUE, unit = "km"),后续筛选条件改为distance > 1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:55:18