在达到限制之前监控密钥用量
随时关注配额响应头,就能在请求真正被拒绝之前,提前知道何时即将达到限制。
一张满是地址的电子表格并不需要循环。每个 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 字段,将低于您自定阈值的项转入人工审核列表。
电子表格导出的文件末尾经常带有几行完全空白的行,这些行是格式设置遗留下来的,或者来自曾经包含空单元格的筛选。数组中的空字符串仍然计为一项,通常会返回空结果或置信度极低的结果,之后还需要在进入数据表之前将其过滤掉,因此请在导出时就删除空白行,而不是把它们放进批次中发送。
同一个地址发送两次,一次来自活跃客户列表,另一次来自从未清理过的旧导出文件,很容易在重复工作上耗掉相当一部分每日配额。请在构建数组之前对地址列去重,并且只重新处理自上次导出以来发生变化的行,而不是每次新增几行就重新地理编码整张电子表格。
非常大的文件按几百到几千行一块来处理会更容易管理。分块还便于在批次之间检查配额响应头,并在超出免费配额或预付额度之前停下来。
如果您的电子表格不止寥寥几行,这就是一个请求与数百次往返之间的区别。完整的请求和响应结构记载在正向地理编码页面上。