如何在 Google Sheets 中地理编码地址:4 种有效方法
如何在 Google Sheets 中地理编码:CSV、=GEOCODE() 公式、Apps Script 批量处理和反向地理编码。每天 100 行免费。
如果您的 Google Sheets 中有一堆地址,并且需要获取经纬度坐标,那么您来对地方了。无论您是在绘制客户位置地图、规划配送路线还是构建门店定位器,在 Google Sheets 中进行地理编码都是最常见的数据任务之一,但没人教您如何正确操作。
问题在哪里?Google Sheets 没有内置的地理编码功能。没有 =GEOCODE() 公式在等着您。但有四种实用方法可以实现,从零代码到全自动批量处理。
在本指南中,我将向您介绍每种在 Google Sheets 中地理编码地址的方法——从简单的复制粘贴流程到自定义 Apps Script 函数。所有代码示例都是真实可用的,可直接配合 CSV2GEO 平台使用。
让我们开始吧。
谁需要在 Google Sheets 中地理编码地址?
在深入了解各种方法之前,先看看通常哪些人需要这个功能:
营销团队
绘制客户位置地图,用于区域定向营销活动。
配送运营
将配送地址转换为坐标,用于路线规划。
房地产机构
对房源列表进行地理编码,用于交互式房产搜索地图。
研究人员
分析来自调查或公共记录的地理数据。
电子商务
构建门店定位器和计算配送区域。
医疗健康
绘制患者位置地图,用于可达性分析和设施规划。
共同点?您有一个电子表格中的地址。您需要坐标。而且您不想为 1,000 次查询花费 5 美元。
方法 1:零代码——导出 CSV,上传到 CSV2GEO,粘贴
适用于:任何想要获取坐标而不写一行代码的人。
这是地理编码电子表格最简单的方法。无需 API 密钥,无需脚本,无需技术配置。
步骤 1:将 Google Sheets 导出为 CSV
打开包含地址的 Google Sheets。前往 文件 > 下载 > 逗号分隔值 (.csv)。
确保您的地址数据是干净的。您需要街道、城市、省份、邮政编码和国家等列——或者至少一列包含完整地址。
步骤 2:上传到 CSV2GEO
前往 CSV2GEO,将您的 CSV 文件拖放到上传区域。平台会自动检测您的列:
- 街道——您的地址列
- 城市——城市或城镇
- 省份——省份或地区
- 邮政编码
- 国家——国家名称或 ISO 代码
点击处理,CSV2GEO 将使用其包含 200 多个国家的 4.61 亿多个地址的数据库对每行进行地理编码。
步骤 3:下载结果
处理完成后,下载您的地理编码文件。它将包含所有原始列以及:纬度、经度、格式化地址和精度分数。
步骤 4:粘贴到 Google Sheets
在 Google Sheets 中打开下载的 CSV(文件 > 导入),或者直接将纬度和经度列复制到您的原始工作表中。
就这样。无需代码,无需 API 密钥,无需配置。免费地理编码提供每天 100 行免费额度。
方法 2:自定义 Apps Script 函数——=GEOCODE(A2)
适用于:希望直接在工作表中获得公式体验的用户。
此方法使用 Google Apps Script 和 CSV2GEO 地理编码 API 创建自定义 =GEOCODE() 函数。
步骤 1:获取您的 API 密钥
前往 CSV2GEO API Keys 生成一个免费密钥。免费套餐包含每天 1,000 次 API 请求。
步骤 2:打开 Apps Script 编辑器
在您的 Google Sheets 中,前往 扩展程序 > Apps Script。
步骤 3:添加地理编码函数
删除现有代码并粘贴以下内容:
/**
* 地理编码一个地址并返回纬度、经度
* @param {string} address 要地理编码的地址
* @param {string} country ISO 国家代码(可选,例如:"CN")
* @return {string} "latitude, longitude"
* @customfunction
*/
function GEOCODE(address, country) {
if (!address) return "";
const API_KEY = "在此输入API密钥";
const url = "https://api.csv2geo.com/v1/geocode"
+ "?q=" + encodeURIComponent(address)
+ (country ? "&country=" + country : "")
+ "&api_key=" + API_KEY;
const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
const data = JSON.parse(response.getContentText());
if (data.results && data.results.length > 0) {
const loc = data.results[0].location;
return loc.lat + ", " + loc.lng;
}
return "未找到";
}步骤 4:在工作表中使用
保存脚本(Ctrl+S),然后返回您的工作表:
=GEOCODE("北京市朝阳区建国门外大街1号", "CN")返回结果:39.9042, 116.4074
您也可以引用单元格:
=GEOCODE(A2, B2)其中 A 列包含地址,B 列包含国家代码。
重要提示:自定义函数逐个执行。对于 500 行,每行都会发起一次单独的 API 调用。对于大量数据,请使用方法 3。
方法 3:使用 Apps Script 菜单进行批量地理编码
适用于:高效处理数百或数千个地址。
此方法在您的工作表中添加一个"地理编码"菜单,一键即可对整列进行地理编码。
步骤 1:添加脚本
打开 扩展程序 > Apps Script 并粘贴:
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('地理编码')
.addItem('地理编码所有地址', 'geocodeAll')
.addItem('反向地理编码(选中区域)', 'reverseGeocodeSelected')
.addToUi();
}
function geocodeAll() {
const API_KEY = "在此输入API密钥";
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
for (let row = 2; row <= lastRow; row++) {
if (sheet.getRange(row, 6).getValue()) continue;
const address = sheet.getRange(row, 1).getValue();
const country = sheet.getRange(row, 5).getValue();
if (!address) continue;
const url = "https://api.csv2geo.com/v1/geocode"
+ "?q=" + encodeURIComponent(address)
+ (country ? "&country=" + country : "")
+ "&api_key=" + API_KEY;
try {
const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
const data = JSON.parse(response.getContentText());
if (data.results && data.results.length > 0) {
const r = data.results[0];
sheet.getRange(row, 6).setValue(r.location.lat);
sheet.getRange(row, 7).setValue(r.location.lng);
sheet.getRange(row, 8).setValue(r.accuracy_score);
}
} catch (e) {
sheet.getRange(row, 6).setValue("错误: " + e.message);
}
Utilities.sleep(200);
if (row % 50 === 0) {
SpreadsheetApp.getActiveSpreadsheet().toast(
"已处理 " + row + " / " + lastRow, "地理编码", 3);
}
}
SpreadsheetApp.getActiveSpreadsheet().toast("完成!", "地理编码");
}步骤 2:整理您的工作表
| A (地址) | B (城市) | C (省份) | D (邮编) | E (国家) | F (纬度) | G (经度) | H (置信度) |
|---|---|---|---|---|---|---|---|
| 建国门外大街1号 | 北京 | 北京市 | 100004 | CN | 自动 | 自动 | 自动 |
步骤 3:运行地理编码器
刷新您的工作表。一个"地理编码"菜单会出现。点击 地理编码 > 地理编码所有地址。
脚本以 200ms 的间隔处理各行。500 个地址大约需要 2 分钟。
提示:超过 1,000 个地址时,可以分多天处理,或导出为 CSV 使用批量地理编码。
方法 4:在 Google Sheets 中进行反向地理编码
适用于:当您已有经纬度坐标并需要获取地址时。
这是正向地理编码的反向操作。您有 GPS 坐标,需要对应的地址。这就是反向地理编码。
反向地理编码函数
function REVERSE_GEOCODE(lat, lng) {
if (!lat || !lng) return "";
const API_KEY = "在此输入API密钥";
const url = "https://api.csv2geo.com/v1/reverse"
+ "?lat=" + lat + "&lng=" + lng + "&api_key=" + API_KEY;
const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
const data = JSON.parse(response.getContentText());
if (data.results && data.results.length > 0) return data.results[0].formatted_address;
return "未找到";
}用法:
=REVERSE_GEOCODE(39.9042, 116.4074)返回结果:北京市朝阳区建国门外大街1号, 100004 北京, CN
理解 API 响应
当您调用 CSV2GEO API 时,返回内容如下:
{
"results": [{
"formatted_address": "北京市朝阳区建国门外大街1号, 100004 北京, CN",
"location": { "lat": 39.9042, "lng": 116.4074 },
"accuracy": "rooftop",
"accuracy_score": 0.98,
"components": {
"house_number": "1",
"street": "建国门外大街",
"city": "北京",
"state": "北京市",
"postcode": "100004",
"country": "CN"
}
}]
}accuracy_score 字段是关键。0.95+ = 建筑物级精度。0.7-0.95 = 街道级精度。低于 0.7 = 仅城市或邮编级精度。
对比:选择哪种方法?
| 方法 | 难度 | 速度 | 适用场景 | 免费额度 |
|---|---|---|---|---|
| 1. CSV + CSV2GEO | 无 | ⭐⭐⭐⭐⭐ | 一次性任务 | 100 行/天 |
| 2. =GEOCODE() | 基础 | ⭐⭐ | 10-50 行 | 1,000 次/天 |
| 3. 批量菜单 | 基础 | ⭐⭐⭐⭐ | 100-5,000 行 | 1,000 次/天 |
| 4. 反向地理编码 | 基础 | ⭐⭐⭐ | 坐标 → 地址 | 1,000 次/天 |
我的建议:方法 1 适合一次性需求。方法 3 适合经常使用。超过 10,000 行时,直接使用批量地理编码。
技巧和最佳实践
1. 清理您的地址
垃圾进,垃圾出。在地理编码之前:
- 去除空格:=TRIM(A2)
- 统一缩写:"路" vs "路"、"大街" vs "大道"
- 包含国家代码:CN、JP、KR 以获得更好的结果
- 合并各部分:=A2 & ", " & B2 & ", " & C2 & " " & D2
2. 始终包含国家
提高精度的最佳方法是提供国家信息。"建国门外大街1号"可能存在于多个城市。添加"CN"可以立即消除歧义。
3. 大批量使用批处理
=GEOCODE() 适合 10-50 行。超过这个数量,请使用批量菜单(方法 3)或导出 CSV 到 CSV2GEO 进行批量地理编码。文件导入对于大批量数据快 10 倍。
4. 利用缓存
对同一地址进行两次地理编码是浪费。先检查坐标是否已存在:
if (sheet.getRange(row, 6).getValue()) continue;5. 处理错误
某些地址无法地理编码——拼写错误、数据不完整。脚本会返回"未找到"或"错误",方便您识别问题。
6. 监控 API 使用量
免费套餐提供每天 1,000 次请求。5,000 行可以分 5 天处理,或升级到更高套餐。
7. 使用 API 实现自动化
对于定期地理编码,使用完整的地理编码 API 构建自动化工作流。CSV2GEO 提供 19 个端点,涵盖正向地理编码、反向地理编码、批量处理、地点搜索和行政边界。
常见问题
在 Google Sheets 中地理编码免费吗?
是的。零代码 CSV 方式提供每天 100 行免费。API 方式提供每天 1,000 次请求。
我可以地理编码多少个地址?
免费每天 1,000 个。超过 50,000 个时,导出 CSV 使用批量地理编码。
需要 API 密钥吗?
仅方法 2、3 和 4 需要。方法 1 不需要任何东西——只需上传到 CSV2GEO。
支持国际地址吗?
是的。CSV2GEO 覆盖 200 多个国家,拥有 4.61 亿多个地址。包含 ISO 代码(CN、DE、JP)。查看我们关于澳大利亚或巴西的指南。
精度如何?
对于格式良好的地址,90% 以上的结果达到建筑物级精度。accuracy_score(0 到 1)表示置信度。更多详情请参阅我们的地址转经纬度指南。
可以反向地理编码吗?
可以。参见上面的方法 4。也可以通过反向地理编码工具零代码使用。
数据会自动更新吗?
不会。坐标是静态值。如果您修改了地址,需要重新运行函数或脚本。
Google Sheets 和 Excel 有什么区别?
Google Sheets 使用 Apps Script(JavaScript),Excel 使用 VBA。基本逻辑相同。Google Sheets 是云原生的。Excel 更适合超大文件(100 万行以上)。专题指南:在 Excel 中地理编码。
开始地理编码
将您的地址上传到免费批量地理编码工具,或在 Google Sheets 中使用上述脚本。每天 100 行免费,无需注册。
I.A. / CSV2GEO Creator
相关文章
Use our batch geocoding tool to convert thousands of addresses to coordinates in minutes. Start with 100 free addresses.
Try Batch Geocoding Free →