Google apps script 使用google应用程序脚本中的地理代码从地址获取lat/long
我有一个工作代码,它从一个地址获取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
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
}