我正在尝试使用以下脚本来填充超过3000个单元格的邮政编码:
function geo2zip(a) {
var response=Maps.newGeocoder()
.reverseGeocode(lat(a),long(a));
return response.results[0].formatted_address.split(',')
[2].trim().split(' ')[1];
}
function lat(pointa) {
var response = Maps.newGeocoder()
.geocode(pointa);
return response.results[0].geometry.location.lat
}
function long(pointa) {
var response = Maps.newGeocoder()
.geocode(pointa);
return response.results[0].geometry.location.lng
}
显然,在大约5个单元格之后,我收到的错误是服务被调用了太多次
简单地说,我如何支付(或添加代码)才能运行我需要的单元格的脚本?
我不确定延迟。你可能必须玩它。而且我也不确定你是否会被允许在一天内完成3000次操作。但是暂时不考虑配额,我不建议,你可以做这样的事情。
看起来这个服务是基于付费的,所以我的猜测是它将花费你一些东西。阅读底部有关API使用和结算的链接。
function loopGeocode(start) {
var start=start || 0;
var ss=SpreadsheetApp.getActive();
var sh1=ss.getSheetByName('Points');
var sh2=ss.getSheetByName('Locations');
var pt=sh1.getRange(1, 1,sh.getLastRow(),1).getValues();
for(var i=start;i<pt.length;i++) {
sh2.appendRow([i+1,pt[i][0],geo2zip(pt[i][0])])
Utilities.sleep(8000);//I have no idea what this delay should be
}
return i+1;
}
function geo2zip(a) {
var response=Maps.newGeocoder().reverseGeocode(lat(a),long(a));
return response.results[0].formatted_address.split(',')[2].trim().split(' ')[1];
}
function lat(pointa) {
var response = Maps.newGeocoder().geocode(pointa);
return response.results[0].geometry.location.lat
}
function long(pointa) {
var response = Maps.newGeocoder().geocode(pointa);
return response.results[0].geometry.location.lng
}
我将它从JavaScript计时器运行,并尝试每6分钟运行一次。我不知道withSuccessHandler()是否会等待那么长时间,因此您可能需要存储返回值,该值告诉循环每次开始计数的位置。您可以存储在PropertiesService中。大约需要15个小时。
在阅读了一些链接之后,我认为每秒50个查询是可以接受的,因此解决方案可能与在样本之间添加时间无关。这可能是设置结算帐户并按需付费的问题。