求适用于Google Sheets的反向地理编码API脚本(超5000坐标)
在Google Sheets中批量获取GPS坐标对应的格式化地址(适配5000+数据)
直接批量调用地理编码服务容易触发速率限制,所以脚本里加入了分批处理和延迟机制,避免查询失败。以下是可直接使用的方案:
1. 准备表格数据
确保Sheet结构如下:
- A列:纬度(示例值:
39.9042) - B列:经度(示例值:
116.4074) - C列:预留为格式化地址(脚本自动填充)
2. 打开脚本编辑器
在Google Sheets顶部菜单点击 工具 > 脚本编辑器,清空默认代码,粘贴以下脚本:
function getFormattedAddresses() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const data = sheet.getDataRange().getValues(); const startRow = 2; // 假设第一行是表头,从第二行开始处理 const batchSize = 50; // 每批处理50条,规避速率限制 const delayBetweenBatches = 2000; // 每批间隔2秒,单位毫秒 for (let i = startRow - 1; i < data.length; i += batchSize) { const batch = data.slice(i, i + batchSize); batch.forEach((row, index) => { const lat = row[0]; const lng = row[1]; if (lat && lng && !row[2]) { // 仅处理有坐标且未填充地址的行 try { const geocoder = Maps.newGeocoder().reverseGeocode(lat, lng); const results = geocoder.results; if (results.length > 0) { const formattedAddress = results[0].formatted_address; sheet.getRange(i + index + 1, 3).setValue(formattedAddress); } else { sheet.getRange(i + index + 1, 3).setValue("无匹配地址"); } } catch (e) { sheet.getRange(i + index + 1, 3).setValue(`查询错误: ${e.message}`); } } }); // 每批处理完后等待,避免触发API限制 if (i + batchSize < data.length) { Utilities.sleep(delayBetweenBatches); } } SpreadsheetApp.getUi().alert("地址批量获取完成!"); }
3. 运行脚本
- 点击脚本编辑器顶部的运行按钮(▶️),首次运行会提示授权,按指引完成权限验证(需允许脚本访问表格和地理编码服务)。
- 等待脚本执行,完成后会弹出提示框。
关键注意事项
- API配额限制:免费版地理编码服务每天仅支持2500次请求,若数据超量,需升级到付费Google Cloud Geocoding API并修改脚本接入密钥。
- 速率调整:如果使用付费API,可适当调高
batchSize、缩短delayBetweenBatches提升处理速度。 - 容错处理:脚本会自动跳过已填充地址的行,对查询失败的行标注错误信息,方便后续排查。
内容的提问来源于stack exchange,提问作者Micas35
相关产品推荐
相关产品推荐

