获取最长路线距离的Map Function结果不一致问题排查
修复获取最长路线距离的不稳定问题
你的函数结果不稳定的核心原因是:默认情况下谷歌地图Directions API仅返回1条最优(通常是最短)路线,只有当你主动要求返回备选路线时,directions.routes数组才会包含多条路线。如果数组里只有1条路线,你的排序操作根本起不到筛选最长路线的作用,自然会返回这条唯一的路线(可能是最短的)。
具体修复方案:
- 启用备选路线获取:调用
setAlternatives(true)方法,告知API返回多条可能的路线 - 完善边界处理:增加对无路线、路线无legs的异常情况处理,避免运行报错
- 简化排序逻辑:用更直观的数值差实现降序排序
修复后的完整代码:
function getDistance(a, b) { var mapObj = Maps.newDirectionFinder(); mapObj.setOrigin(a); mapObj.setDestination(b); // 关键:开启备选路线,让API返回多条路线供筛选 mapObj.setAlternatives(true); var directions = mapObj.getDirections(); // 处理无路线返回的异常情况 if (!directions.routes || directions.routes.length === 0) { return 0; // 可根据需求改为抛出错误或返回其他默认值 } // 按路线距离降序排序,取第一条即为最长路线 var longestRoute = directions.routes.sort((routeA, routeB) => { const distanceA = routeA.legs?.[0]?.distance?.value || 0; const distanceB = routeB.legs?.[0]?.distance?.value || 0; return distanceB - distanceA; })[0]; return longestRoute.legs[0].distance.value; }
额外说明:
即使开启了备选路线,API也可能因道路条件、交通规则等因素返回的路线数量有限,但至少能保证当存在多条可行路线时,你能筛选出最长的那条,解决结果不稳定的问题。
内容的提问来源于stack exchange,提问作者Borgher
相关产品推荐
相关产品推荐

