我目前正在使用 Google Apps 脚本/javascript 创建距离矩阵。目前,我有 50 个地址,我想根据它们的州代码对它们进行分组。
我已过滤掉相关的州代码(工作表名称:“过滤的州”)。我已经过滤掉了与这些州代码匹配的地址(工作表名称:“过滤的地址”)。
现在,我的目标是生成一个脚本,将地址列表与州代码进行比较,并将地址排序到数组中,具体取决于州代码是否与过滤后的州代码匹配。
到目前为止,我已经编写了一个脚本,旨在根据过滤的状态代码交叉检查地址。但是,结果提供了未进行任何排序的地址列表。
function maps(origin, destination) {
var driving = Maps.DirectionFinder.Mode.DRIVING
var transit = Maps.DirectionFinder.Mode.TRANSIT
var modeSet = driving
var directions = Maps.newDirectionFinder()
.setOrigin(origin)
.setDestination(destination)
.setMode(modeSet)
.setOptimizeWaypoints(true)
.getDirections()
var result = directions
return result;
}
function sorting() {
//get distance
var outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Maps");
var relstatecodes = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Filtered States");
//relstatecodes are the filtered states that will form the clusters
var reladdresses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Relevant Addresses");
//reladdresses are the full addresses that match the filtered states
var lastrow = relstatecodes.getLastRow();
var lastrow2 = reladdresses.getLastRow()
var range = relstatecodes.getRange(3,1, lastrow-1,1); //list starts from row 3
var range2 = reladdresses.getRange(2,3, lastrow2-1,3); //list starts from row 2 col3
var statecodes = range.getValues();
var stateaddresses = range2.getValues()
var storage = []
for (var y = 0; y < statecodes.length; y++) //sorting addresses into clusters
{
var sort = []
for (var x = 0; x < stateaddresses.length; x++) //checking if addresses match the filtered state codes
{ if ( x[0] == y[0]) {
sort.push(x[0])
storage.push(sort)
}
}
}
console.log(storage);
}
我正在使用的电子表格的链接是: https://docs.google.com/spreadsheets/d/17Y1br0klimT8aAf74oJjo0VnROCt7iHTFP16wvDx1TI/edit?usp=sharing
我想要的是有一个“存储”数组来托管所有排序的地址。然后我可以用它来进行进一步的距离计算。如果其中任何内容令人困惑,我提前表示歉意。
编辑:结果应如下所示:
['1000 S Fremont Ave #5, Alhambra, CA 91803, United States',
'4021 Rosewood Ave, Los Angeles, CA 90004, United States' , '919 S Grand Ave, Los Angeles, CA 90015, United States',
'17335 N Palm Bluffs Ave, Fresno, CA 93711, United States',
'6363 Sunset Blvd, Los Angeles, CA 90028, United States'], ['1365 N Scottsdale Rd, Scottsdale, AZ 85257, United States',
'350 W Washington St, Tempe, AZ 85281, United States',
'501 E. Orange St., Tempe, AZ 85287, United States']...
最佳答案
根据我对您问题的理解,此代码可以帮助您按照您想要的方式对地址进行排序:
代码
function sorting() {
//get distance
var outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Maps");
var relstatecodes = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Filtered States");
var reladdresses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Relevant Addresses");
var lastrow = relstatecodes.getLastRow();
var lastrow2 = reladdresses.getLastRow()
var range = relstatecodes.getRange(3,1, lastrow-2,1);
var range2 = reladdresses.getRange(2,3, lastrow2-1,1);
var statecodes = range.getValues();
var stateaddresses = range2.getValues();
var reladdresses = [];
var clusterObj = {};
// Let´s iterate through the array with the state codes
statecodes.forEach(function(el){
clusterObj[el] = [];
// We take all the state addresses
for(var i in stateaddresses){
// We check if the state address includes the state code
if( stateaddresses[i].toString().indexOf(" " + el + " ") > - 1){
// If it is included then we build the JavaScript object
clusterObj[el].push(stateaddresses[i][0]);
}
}
});
// Logger.log(clusterObj);
// You can check in this way the addresses by state code
Logger.log(clusterObj["AZ"]);
Logger.log(clusterObj["CA"]);
}
输出
[1365 N Scottsdale Rd, Scottsdale, AZ 85257, United States, 350 W Washington St, Tempe, AZ 85281, United States, 501 E. Orange St., Tempe, AZ 85287, United States, 2323 W 14th St, Tempe, AZ 85281, United States, 1555 W University Dr #103, Tempe, AZ 85281, United States, 2844 West Deer Valley Road, Phoenix, AZ 85027, United States]
[19-11-06 15:55:56:760 CET] [1000 S Fremont Ave #5, Alhambra, CA 91803, United States, 4021 Rosewood Ave, Los Angeles, CA 90004, United States, 919 S Grand Ave, Los Angeles, CA 90015, United States, 7335 N Palm Bluffs Ave, Fresno, CA 93711, United States, 6363 Sunset Blvd, Los Angeles, CA 90028, United States, 9331 Mariposa Rd, Hesperia, CA 92344, United States, 2041 Business Center Dr, Irvine, CA 92612, United States, 5757 Plaza Dr #100, Cypress, CA 90630, United States, 257 Longford Dr #5, South San Francisco, CA 94080, United States, 151 Innovation Dr, Irvine, CA 92617, United States, 5 Hutton Centre Dr #500, Santa Ana, CA 92707, United States, 8620 Spectrum Center Boulevard Suite 600, San Diego, CA 92123, United States]
我所做的就是使用状态代码和这些值获取数组,检查该单词是否在您的 stateaddresses
中的地址内,如果状态代码在那里,则将地址添加到 clusterObj
.
作为一个优点,我会留下这个Best practices文档,以防万一您想查看它,因为它可能对您的项目开发有所帮助。
关于javascript - 使用 Google-Apps-Script 上预定义的组形成集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58728357/