我正在尝试使用以下脚本填充超过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个单元格之后,我收到错误消息,表明该服务已被调用太多次
简而言之,我如何支付(或添加到代码中)以能够为所需的单元格运行脚本?
答案 0 :(得分:0)
我不确定延迟。您可能必须使用它。而且我也不确定是否会允许您在一天之内进行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个查询是可以接受的,因此该解决方案可能与增加两次采样之间的时间无关。设置计费帐户并随用随付,可能是一个问题。