Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用google应用程序脚本中的地理代码从地址获取lat/long_Google Apps Script_Google Sheets_Geocoding_Google Geocoder - Fatal编程技术网

Google apps script 使用google应用程序脚本中的地理代码从地址获取lat/long

Google apps script 使用google应用程序脚本中的地理代码从地址获取lat/long,google-apps-script,google-sheets,geocoding,google-geocoder,Google Apps Script,Google Sheets,Geocoding,Google Geocoder,我有一个工作代码,它从一个地址获取lat/long组合 function testgeocode(){ var responses = SpreadsheetApp.openById('###').getSheetByName('Form Responses'); var range = responses.getRange('AD2:AD'); var addresses = range.getValues(); var row = range.getRow

我有一个工作代码,它从一个地址获取lat/long组合

function testgeocode(){ 
    var responses = SpreadsheetApp.openById('###').getSheetByName('Form Responses');
    var range = responses.getRange('AD2:AD');
    var addresses = range.getValues();

    var row = range.getRow();
    var column = range.getColumn();

    var destination = new Array();
    destination[0] = 31; // column + 1;
    destination[1] = 32; // column + 2;

    var geocoder = Maps.newGeocoder();
    var count = range.getHeight();
  
    for(i in addresses) {
        var location = geocoder.geocode(addresses[i]).results[0].geometry.location;
        responses.getRange(row, destination[0]).setValue(location.lat);
        responses.getRange(row++, destination[1]).setValue(location.lng);
        Utilities.sleep(200);
    }
}

我很难修改它,使lat/long组合以
'lat,long'

格式输出到一列中。据我所知,目前您正在获取纬度和经度值并将它们写入不同的单元格,但您希望将它们都放在一个单元格中,用逗号分隔。 如果是这样,那么您可以进行以下更改

发件人:

致:

如果要将其写入其他单元格,可以调整的参数。

说明/问题:
  • 首先,您的代码效率很低。原因是您在
    for
    循环中使用
    getRange
    setValue
    ,但每次迭代也使用两次。如中所述,实现目标的正确方法是将值存储到一个空数组中,然后在
    for
    循环之外使用
    setValues
    将它们设置到工作表中

  • 另一个答案中已经提到了另一个修改。您想将
    location.lat
    location.lng
    用逗号分隔

解决方案:
var location = geocoder.geocode(addresses[i]).results[0].geometry.location;
responses.getRange(row, destination[0]).setValue(location.lat);
responses.getRange(row++, destination[1]).setValue(location.lng);
var location = geocoder.geocode(addresses[i]).results[0].geometry.location;
responses.getRange(row, destination[0]).setValue(location.lat + ',' + location.lng);
function testgeocode(){ 
    var responses = SpreadsheetApp.openById('###').getSheetByName('Form Responses');
    var range = responses.getRange('AD2:AD');
    var addresses = range.getValues();

    var row = range.getRow();
    var column = range.getColumn();

    var destination = new Array();
    destination[0] = 31; // column + 1;
    destination[1] = 32; // column + 2;

    var geocoder = Maps.newGeocoder();
    var count = range.getHeight();
    
    var data = [];
  
    for(i in addresses) {
        var location = geocoder.geocode(addresses[i]).results[0].geometry.location;
        data.push([location.lat + ',' + location.lng]) // new code
        Utilities.sleep(200);
    }
    
    responses.getRange(2,destination[0],data.length,1).setValues(data); // new code
    
}