R中使用sf包基于初始坐标、航向与行驶距离计算新点坐标
基于sf包实现已知起点、航向、距离计算新坐标的方法
你不需要通过生成缓冲区再匹配点的方式实现,sf包内置的st_destination()函数原生支持该需求,该函数基于大地测量学公式计算球面/椭球面上沿指定方位角移动固定距离后的点位坐标,完全匹配你的使用场景。
完整可运行代码
# 加载依赖包 library(data.table) library(dplyr) library(sf) # 构造测试数据 dat <- data.table( lon = c(10,10.1,10.4), lat = c(58.4,57.4,57.8), heading = c(45,10,235), distance_km = c(1,5.3,3) ) # 转为sf点对象,设置坐标系为WGS84(EPSG:4326) pts <- dat %>% st_as_sf(coords = c("lon","lat")) %>% st_set_crs(4326) # 核心计算:生成移动后的新坐标 pts_new <- pts %>% mutate( # 计算目标点几何,距离单位转成米,航向参数直接传入即可 new_geom = st_destination( geometry, dist = distance_km * 1000, direction = heading ), # 拆分新坐标为经纬度列方便后续使用 new_lon = st_coordinates(new_geom)[,1], new_lat = st_coordinates(new_geom)[,2] ) # 查看计算结果 print(pts_new[, c("heading", "distance_km", "new_lon", "new_lat")], drop = TRUE)
补充说明
- 函数默认使用WGS84椭球参数进行大地测量计算,精度远高于平面投影换算的结果,适配全球任意位置的计算需求
- 若运行提示函数不存在,执行
install.packages("sf")升级到最新版本的sf包即可 - 若需要使用平面坐标系计算,只需先通过
st_transform()将点转为对应平面投影坐标系,再调用该函数即可,参数逻辑完全一致
内容的提问来源于stack exchange,提问作者Jeppe Olsen
相关产品推荐
相关产品推荐

