指南

在一次批量请求中对电子表格中的地址进行地理编码

一张满是地址的电子表格并不需要循环。每个 My Geocode 端点都接受以 JSON 数组代替查询参数的 POST 请求,正向地理编码端点可以一次接收一整列地址,并按您发送的顺序为每一行返回一个地理编码结果。

构建请求

将电子表格中的地址列导出为一个普通的字符串数组,然后 POST 到 /v1/forward。数组中的每一项都被视为一次独立查询,并返回各自的结果,顺序与您发送时相同。

POST /v1/forward
Content-Type: application/json

["221B Baker Street, London", "1600 Pennsylvania Avenue, Washington"]
{
  "status": "ok",
  "results": [
    {"formatted": "221B Baker Street, London, UK", "lat": 51.5237, "lon": -0.1585, "type": "address", "precision": "house", "confidence": 0.95, "place_id": "abc123", "components": {}},
    {"formatted": "1600 Pennsylvania Avenue, Washington, DC", "lat": 38.8977, "lon": -77.0365, "type": "address", "precision": "house", "confidence": 0.97, "place_id": "def456", "components": {}}
  ]
}

处理包含多个国家的列表时缩小结果范围

如果您的电子表格涵盖多个国家,普通字符串数组仍然可用,但不同国家中含糊的街道名称可能会被解析到错误的国家。如果电子表格中有单独的国家列,请将每个国家的行作为单独的批次发送,并将 countries 参数设为对应的 ISO 代码,而不是把多个国家混在一次调用中,寄希望于仅凭地址文本就能区分它们。

成本是多少

批量请求按项计费,而不是按调用计费。一个 POST 中包含两个地址,就会从您的每日配额中使用两个请求,与您分别发送两个 GET 请求完全相同。一张 500 行的电子表格消耗 500 个请求,完全在每个密钥(甚至不使用密钥)附带的每天 2,500 次免费请求之内。

将结果对应回各行

结果按您发送的数组顺序返回,因此在发送请求之前,请在每个地址旁保留其原始行号。收到响应后,按位置将结果匹配回电子表格的各行,而不是比较文本,因为响应中的格式化地址很少会与您输入的内容完全一致。

处理部分失败

缺少结果、置信度分数较低或精度低于您要求的行,应当被标记出来,而不是自动接受。检查每一项的 confidence 字段,将低于您自定阈值的项转入人工审核列表。

一个边缘情况:空白行

电子表格导出的文件末尾经常带有几行完全空白的行,这些行是格式设置遗留下来的,或者来自曾经包含空单元格的筛选。数组中的空字符串仍然计为一项,通常会返回空结果或置信度极低的结果,之后还需要在进入数据表之前将其过滤掉,因此请在导出时就删除空白行,而不是把它们放进批次中发送。

值得避免的错误

同一个地址发送两次,一次来自活跃客户列表,另一次来自从未清理过的旧导出文件,很容易在重复工作上耗掉相当一部分每日配额。请在构建数组之前对地址列去重,并且只重新处理自上次导出以来发生变化的行,而不是每次新增几行就重新地理编码整张电子表格。

拆分大文件

非常大的文件按几百到几千行一块来处理会更容易管理。分块还便于在批次之间检查配额响应头,并在超出免费配额或预付额度之前停下来。

如果您的电子表格不止寥寥几行,这就是一个请求与数百次往返之间的区别。完整的请求和响应结构记载在正向地理编码页面上。