R语言调用here.com Isoline Routing生成等时线数据框失败问题
批量生成Here等时线失败的解决方案
针对使用hereR包批量处理点数据生成等时线时返回空数据框/仅含ID、报错行数不匹配的问题,可尝试以下解决方法:
清理输入点数据
确保输入的空间数据(sf对象)或坐标列无缺失值、无效几何:# 移除含缺失值的行 points_clean <- na.omit(points) # 保留几何有效的行 points_clean <- points_clean[sf::st_is_valid(points_clean), ]控制请求频率,避免触发限流
Here免费账号有请求频次限制,批量请求易因限流返回空结果。可添加延迟或分批次处理:# 分批次处理,每批5个点,间隔1秒 chunks <- split(points_clean, ceiling(seq_along(points_clean$id)/5)) results_list <- lapply(chunks, function(chunk) { Sys.sleep(1) hereR::isoline(chunk, range = 300, range_type = "time", transport_mode = "car") }) # 合并所有批次结果 final_isolines <- do.call(rbind, results_list)确保ID列正确映射
检查输入数据的ID列是否唯一、类型一致(推荐字符型),避免结果关联失败:# 将ID转为字符型,避免类型匹配问题 points_clean$id <- as.character(points_clean$id)捕获单请求错误,定位问题点
通过tryCatch捕获单个点的请求错误,排查具体失败的点:process_point <- function(row) { tryCatch({ hereR::isoline(row, range = 300, range_type = "time", transport_mode = "car") }, error = function(e) { message(paste("ID", row$id, "请求失败:", e$message)) return(NULL) }) } # 逐个处理点并过滤空结果 results_list <- lapply(seq(nrow(points_clean)), function(i) process_point(points_clean[i, ])) final_isolines <- do.call(rbind, Filter(Negate(is.null), results_list))
内容的提问来源于stack exchange,提问作者MelaniaCB
相关产品推荐
相关产品推荐

