Google maps api 3 计算两个地址之间的距离时出错

Google maps api 3 计算两个地址之间的距离时出错,google-maps-api-3,google-apps-script,google-sheets,Google Maps Api 3,Google Apps Script,Google Sheets,我有下面的脚本,它被用在电子表格中,用来计算两个城市或一个城市之间的行驶距离和另一个城市的邮政编码。它正在同时运行大约25个位置。为了更好地解释,我有B3单元,每次我都会进入一个新的城市。然后在我的25个工厂位置附近的单元格中使用脚本,以计算我的每个工厂到可变城市的距离 它使用GoogleSheets内置的映射api,处理80%的计算,但返回“TypeError:Cannotreadproperty”legs(第16行)。它失败的工厂因每个新城市的不同而不同,因此它不像某些地方的工厂。这几乎就像

我有下面的脚本,它被用在电子表格中,用来计算两个城市或一个城市之间的行驶距离和另一个城市的邮政编码。它正在同时运行大约25个位置。为了更好地解释,我有B3单元,每次我都会进入一个新的城市。然后在我的25个工厂位置附近的单元格中使用脚本,以计算我的每个工厂到可变城市的距离

它使用GoogleSheets内置的映射api,处理80%的计算,但返回“TypeError:Cannotreadproperty”legs(第16行)。它失败的工厂因每个新城市的不同而不同,因此它不像某些地方的工厂。这几乎就像api在完成其中一些之前超时。我将它分成两个单独的脚本,使用不同的名称,运行了一天,但又有20%再次失败

更奇怪的是,我有另一个脚本,它根据与变量地址最近的距离对植物进行排序。当你对植物进行排序时,即使是有错误的植物也会根据距离到达正确的位置。因此,就像距离脚本获得正确的距离,但无论如何都会显示错误

像泥一样清晰?我希望能得到关于如何纠正问题的任何信息,或者一个可以解决我问题的替代映射api

function distancecalcone(origin,destination) {

  var directions = Maps.newDirectionFinder()

    //Set the Method of Transporation. The available "modes" are WALKING,    DRIVING, BICYCLING, TRANSIT.
    .setMode(Maps.DirectionFinder.Mode.DRIVING)

    //Set the Orgin
    .setOrigin(origin)

    //Set the Destination
    .setDestination(destination)

    //Retrieve the Distance
    .getDirections();
    return directions.routes[0].legs[0].distance.value/1609.34;
}

您是否尝试过在directions.routes[0]。legs[0]。distance.value周围使用try-catch块

try{
    return directions.routes[0].legs[0].distance.value/1609.34;
} 
catch (e){
 console.log("error",e)
}
或者你可以试试这样的

alert(directions);
alert(directions.routes[0]);
alert(directions.routes[0].legs[0]);
alert(directions.routes[0].legs[0].distance);
alert(directions.routes[0].legs[0].distance.value);

以此类推……找出哪一个是第一个未定义的。这可能有助于您调试该问题。

方向服务受配额和速率限制。在分析结果之前,请检查返回状态


对于很多距离(或至少超过10个距离),请查看距离矩阵。

我可以从脚本编辑器运行脚本,但不能从电子表格运行脚本。从电子表格调用函数时,错误为“无法读取属性腿”。但从脚本编辑器调用时,属性已就位,并且包含正确的值

您可能需要使用WEB API并具有API密钥: 启用方向Api

1) 转到“谷歌云平台” 2) 转到“Api和服务”
3) 搜索“方向api”“并启用它

我不相信它会达到配额或利率限制,因为我曾经有过一两次这样的情况,它通常会在错误中声明。你能进一步解释一下你的两个建议吗?我仍然无法解决这个问题。其他人有什么建议吗?我想知道它是否失败了,因为它每秒调用的次数太多(即使这不是我得到的错误)。有没有关于我如何分层通话的建议,这样他们就不会在同一时间全部通话,并有第二次延迟或其他什么?距离矩阵看起来也可能有用,但我不知道如何实现它。