使用R的ggmap提取两点行程信息时遇unsupported SEXPTYPE:19错误求助
解决ggmap调用Google距离矩阵API的错误问题
我来帮你搞定这个报错,主要有两个核心问题需要修正:
1. 先修正地址拼写错误
你代码里把安大略省的英文Ontario拼成了ontraio,这个低级错误会让Google无法识别你的起点地址,直接导致API返回无效数据,这是触发后续报错的第一个原因。
2. ggmap现在需要Google Maps API密钥
旧版本的ggmap可以无密钥调用Google的服务,但现在Google的Distance Matrix API已经强制要求使用API密钥了,没有密钥的请求会被拒绝,这就是你看到subscript out of bounds错误的核心原因。
修正后的完整步骤:
- 先去Google Cloud平台创建账号,新建项目,启用Distance Matrix API,然后生成你的API密钥(跟着平台引导操作就行)。
- 在R中加载ggmap并注册密钥,然后修正地址拼写重新调用:
library(ggmap) # 替换成你自己的API密钥 register_google(key = "你的Google API密钥") # 修正地址拼写,确保地名正确 route_details <- mapdist("Hamilton, Ontario, Canada", "Toronto, Ontario, Canada", mode = "driving") # 提取行程小时数 travel_time_hours <- route_details$hour print(travel_time_hours)
替代方案:不用Google API的免费选项
如果你不想折腾Google的API密钥,可以试试osrm包,它基于OpenStreetMap的免费数据,不需要密钥就能获取驾车路线信息:
# 第一次使用需要先安装包 install.packages("osrm") library(osrm) # 获取行程数据 route_data <- osrmRoute(src = "Hamilton, Ontario, Canada", dst = "Toronto, Ontario, Canada", overview = "false") # 转换单位:距离转公里,时间转小时 travel_dist_km <- route_data$distance / 1000 travel_time_hours <- route_data$duration / 3600 # 打印结果 cat("驾车行程时间:", round(travel_time_hours, 2), "小时\n") cat("驾车行程距离:", round(travel_dist_km, 2), "公里\n")
内容的提问来源于stack exchange,提问作者Gamal Eldeeb
相关产品推荐
相关产品推荐

