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

R中使用geosphere计算距离及骑行非直线实际距离求解问题

计算结果确认

你所使用的geosphere包distHaversine函数计算的确实是两点之间的最短大圆距离:该算法将地球近似为标准球体,输出的是球面上两点间的最短弧长,和实际道路的通行距离没有关联。

骑行场景实际通行距离的实现方法

目前在R环境下有两种成熟的本地化实现方案:

  • 方案1:基于OSM路网的轻量计算
    适合小范围、中小批量的距离计算需求,无需额外部署服务,直接通过R包完成全流程计算,示例代码如下:
    library(osmdata)
    library(dodgr)
    
    # 定义研究区域边界,替换为你所需计算的区域经纬度范围
    bbox <- c(min_lon, min_lat, max_lon, max_lat)
    # 拉取区域内的道路路网数据
    osm_road_net <- opq(bbox) %>%
      add_osm_feature(key = "highway") %>%
      osmdata_sf()
    # 构建适配骑行规则的路网权重,自动过滤机动车专用道等骑行禁行路段
    bike_weight_net <- weight_streetnet(osm_road_net$osm_lines, wt_profile = "bicycle")
    # 计算两点间骑行的实际通行距离,单位为米
    ride_distance <- dodgr_dists(bike_weight_net, 
                                 from = c(lon1, lat1), 
                                 to = c(lon2, lat2))
    
  • 方案2:基于离线路由引擎的高精度计算
    适合大规模批量计算、需要适配更复杂骑行规则(如坡度避让、非机动车道优先)的场景,可本地部署OSRM、Valhalla等开源路由引擎,再通过osrm等R接口包直接调用计算,输出的距离精度和路径匹配度更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:06:03