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

Google Sheets基于经纬度/地址计算里程报错排查求助

问题分析与解决

你遇到的 TypeError: Cannot read properties of undefined (reading 'legs') 错误,本质是当使用经纬度作为起点/终点时,Google Maps Directions API 返回的响应里没有有效路线(routes 数组为空),或是经纬度格式不符合API要求,导致直接访问 routes[0].legs[0] 时触发 undefined 报错。

核心问题点

  1. 经纬度格式问题:API要求经纬度必须是 纬度,经度 格式的纯字符串(不能带空格,数值需在有效范围:纬度-9090,经度-180180),若拼接时出现格式错误,API无法解析坐标,会返回无路线结果。
  2. 无错误处理:原代码直接嵌套访问 routes[0].legs[0],未考虑API返回失败、无路线的情况,一旦 routes 为空就会报错。

修复后的代码

function getDistance(origin, destination) {
  // 调用Google Maps路线API
  var directions = Maps.newDirectionFinder()
    .setOrigin(origin)
    .setDestination(destination)
    .getDirections();

  // 先检查API返回状态是否正常
  if (directions.status !== "OK" || !directions.routes || directions.routes.length === 0) {
    return "路线获取失败:" + directions.status;
  }

  // 检查路线是否包含有效路段
  var firstRoute = directions.routes[0];
  if (!firstRoute.legs || firstRoute.legs.length === 0) {
    return "该路线无有效行驶路段";
  }

  // 返回距离文本
  return firstRoute.legs[0].distance.text;
}

// 调用示例:
// 地址→经纬度:getDistance("北京市天安门", "31.2304,121.4737")
// 经纬度→经纬度:getDistance("39.9042,116.4074", "31.2304,121.4737")
// 地址→地址:getDistance("北京市天安门", "上海市东方明珠")

修复说明

  • 格式兼容:合并了原有的两个函数,getDistance 可以直接接收地址字符串或经纬度字符串作为参数,无需单独拼接经纬度。
  • 错误防护:逐层检查API返回的状态、routes 数组、legs 数组是否有效,避免直接访问undefined属性,同时返回明确的错误提示。
  • 状态判断:通过 directions.status 可以快速定位问题(比如 INVALID_REQUEST 表示坐标格式错误,ZERO_RESULTS 表示两地无可行路线)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:42:44