如何在R语言中计算两点间的公交行驶距离?
在R中计算公交行驶距离的可行方案
方案1:使用openrouteservice包
这个包支持公共交通路线规划,需要先注册获取免费API密钥(官网注册即可,免费额度足够日常使用)。步骤如下:
- 安装并加载包:
install.packages("openrouteservice") library(openrouteservice)
- 设置API密钥(替换成你自己的):
ors_api_key("你的API密钥")
- 计算公交路线及距离:
# 起点和终点经纬度(格式:lon, lat) src <- c(13.412, 52.502) dst <- c(13.454, 52.592) # 查询公交路线 bus_route <- ors_directions( start = src, end = dst, profile = "public_transport" ) # 提取行驶距离(单位:米,转公里除以1000) bus_distance_km <- bus_route$features[[1]]$properties$summary$distance / 1000 print(bus_distance_km)
方案2:利用GTFS数据 + tidytransit包
如果针对特定城市,可下载该城市的GTFS公共交通数据(很多城市交通部门会公开),用tidytransit包分析路线:
- 安装加载包:
install.packages(c("tidytransit", "sf")) library(tidytransit) library(sf)
- 读取GTFS数据(替换成你下载的GTFS文件路径):
gtfs <- read_gtfs("your_city_gtfs.zip")
- 查找公交路线并计算距离(示例,需根据实际数据调整):
# 转换站点数据为空间格式 gtfs <- gtfs %>% gtfs_as_sf() # 匹配经纬度到最近的公交站点 start_point <- st_sfc(st_point(src), crs = 4326) end_point <- st_sfc(st_point(dst), crs = 4326) start_stop_idx <- st_nearest_feature(start_point, gtfs$stops) end_stop_idx <- st_nearest_feature(end_point, gtfs$stops) # 假设找到连接两站点的线路ID,提取对应线路的shape数据计算距离 target_route <- filter(gtfs$routes, route_id == "目标线路ID") route_shape <- filter(gtfs$shapes, shape_id == target_route$shape_id[1]) total_distance <- st_length(st_combine(route_shape$geometry)) # 转换为公里单位 distance_km <- units::set_units(total_distance, "km") print(distance_km)
方案3:使用googleway包调用谷歌地图API
如果可以使用谷歌地图API,googleway包支持公交路线查询,需要API密钥:
- 安装加载包:
install.packages("googleway") library(googleway)
- 设置API密钥:
set_key("你的谷歌地图API密钥")
- 查询公交路线:
# 注意谷歌地图API使用lat, lon格式 bus_route <- google_directions( origin = c(52.502, 13.412), destination = c(52.592, 13.454), mode = "transit" ) # 提取距离(转公里) bus_distance_km <- bus_route$routes$legs[[1]]$distance$value / 1000 print(bus_distance_km)
注意:
openrouteservice和谷歌API都需要API密钥,免费额度足够小批量查询;- GTFS数据方案适合本地化分析,无需联网,但需对应城市的GTFS文件,数据处理相对复杂。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

