我有这个工作代码,可以从地址获取纬度/经度组合。
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'
的一列中。
首先,你的代码效率很低。原因是因为您在
getRange
循环中使用 setValue
和 for
,而且每次迭代使用两次。正如最佳实践中所述,实现目标的正确方法是将值存储到空数组中,然后在 setValues
循环之外使用 for
将它们设置到工作表中。
其他修改已经在其他答案中提到了。您想要连接
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
}
据我了解,目前您正在获取纬度和经度值并将它们写入不同的单元格,但您希望将它们都放在一个单元格中,并用逗号分隔。 如果是这种情况,那么您可以进行以下更改。
来自:
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);
如果你想将其写入不同的单元格,可以调整getRange()的参数。
另一种方法是创建自定义函数:
function a2c(address){
var geo = Maps.newGeocoder().geocode(address);
var loc = geo.results[0].geometry.location;
return ([[loc.lat,loc.lng]]);
}
此函数将返回一对 lat lng 作为两列