Javascript 如何使用Google脚本为大型数据集生成距离矩阵?
我目前正在制作一个脚本,将大约90个地址的列表相互比较。脚本的结果应该是一个列表,其中包含从彼此到每个地址所花费的时间 我在试图解决这个问题时遇到了一系列问题。主要问题是生成的距离矩阵将包含8100个元素。Google脚本的最大执行时间为30分钟,因此脚本会一直超时 有什么方法可以改进脚本以使其运行更快 这个脚本的目的是生成一个包含StartID、EndID和Time的列表。然后我就可以过滤列表,在一个小时内找到彼此的地址 谢谢Javascript 如何使用Google脚本为大型数据集生成距离矩阵?,javascript,node.js,google-maps,google-apps-script,google-sheets,Javascript,Node.js,Google Maps,Google Apps Script,Google Sheets,我目前正在制作一个脚本,将大约90个地址的列表相互比较。脚本的结果应该是一个列表,其中包含从彼此到每个地址所花费的时间 我在试图解决这个问题时遇到了一系列问题。主要问题是生成的距离矩阵将包含8100个元素。Google脚本的最大执行时间为30分钟,因此脚本会一直超时 有什么方法可以改进脚本以使其运行更快 这个脚本的目的是生成一个包含StartID、EndID和Time的列表。然后我就可以过滤列表,在一个小时内找到彼此的地址 谢谢 功能映射(起点、终点){ var driving=Maps.Di
功能映射(起点、终点){
var driving=Maps.DirectionFinder.Mode.driving
var transit=Maps.DirectionFinder.Mode.transit
var模式集=驱动
var directions=Maps.newDirectionFinder()
.setOrigin(origin)
.setDestination(目的地)
.setMode(modeSet)
.设定点(真)
.getDirections()
var结果=方向
返回结果;
}
函数GoogleMaps(){
//获得距离
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“ABC”);
var outputSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“EFG”);
var lastrow=sheet.getLastRow();
var lastcolumn=sheet.getLastColumn();
var范围=sheet.getRange(2,3,lastrow-1,3);
//var范围=sheet.getRange(2,3,3,3);
//原点位于第2行第3列
var values=range.getValues();
变量输出=[]
对于(变量i=0;i }
这可能并不比您的性能好多少,但请尝试将其分解为一个更模块化的解决方案,然后您可以通过一次在某个子集中进行优化来决定要优化的部分
函数getValuesArray(值){
设valueArray=[];
for(设i=0;iitems.map(item=>Array.isArray(item)?clone(item):{…item
});
//可能只需要列表1,但为了清晰起见,这里使用两个
const list2=克隆(list1);
常量列表=[];
对于(var a=0;a }
您要做的第一件事是减少在for
循环中执行的操作数。因此,让我们先从算法角度分析这一点
在当前的实现中,您基本上是在一组90个值上计算值,以生成一个由8100个值组成的新集
但是,该结果集中存在许多冗余值,因此: