随着谷歌在今年晚些时候弃用他们的 Geocoding v2 API,将会有很多人将他们的地理编码逻辑迁移到 v3,这个问题将会突然出现:如何将 'location_type' 字符串映射到等效的 '准确率?
这是一个不错的映射:
"ROOFTOP" -> 9
[Everything else] -> 4 to 8 (aka the text string might as well read "GARBAGE")
如果指定了 ROOFTOP 以外的其他内容,请使用“northeast”和“southwest”的区域来确定它是否对您来说足够准确。
现在,如果您没有得到“准确”的信息,会发生什么?对同一地址运行 Google 地方信息文本搜索查询。 Google Places 也进行地理编码,启用 Billing 后,您每天可以获得 10,000 个 Places 文本搜索查询(无速率限制),Google 声称他们不会从卡上收费(他们应该只是用它来验证帐户)。使用 Billing,您可以获得 100,000 个查询,但 Places 文本搜索查询的“成本”是常规 Places 查询量的 10 倍,因此上述 10,000 个限制。不过,地点可能很挑剔,您应该只考虑只有一个结果的响应。
有时 Places 查询不会返回邮政编码,尤其是在未发送邮政编码的情况下。如果您需要邮政编码,请获取 Places 查询的 lat/lng 结果并将其反馈给地理编码器,地理编码器通常会输出带有邮政编码的地址(并且经常与 ROOFTOP 匹配)。
需要注意的是,官方的 Geocoding API 礼貌限制是每天 2,500 个请求,每个 IP 地址的速率限制为每秒 1 个。因此,遵循上述公式可能会使您可用的地理编码数量减少甚至减半。
如果您需要超过 Google 地理编码限制(谁不需要?),请使用 OpenStreetMap 数据库之类的东西发明您自己的迷你地理编码服务。克隆您需要的 OpenStreetMap 部分并编写自己的地理编码器(或使用库)。然后,您可以根据自己的喜好进行地理编码,没有数量限制或速率限制。如果您仍在使用 Google 地图,您可以使用 Google 的地理编码器作为备用,以防 OSM 地理编码器在所有情况下都不够准确。
或者,如果您相信您的用户不会提交虚假数据(真的吗?)并且必须使用 Google 地理编码服务,您还可以通过为您提供浏览器地理编码信息来滥用用户的网络浏览器,然后将结果提供给你的服务器。您可能会烧毁用户的每日限额,并且冒着有人推送虚假数据的风险,但如果您遇到所有这些麻烦,您真的在乎吗?
无论如何,以上提示应该足以让大多数用户临时使用来设置有效的 v3 API。我自己遇到了这个问题,所以我想我会与社区分享一个不错的解决方案。我仍然认为 v2 是更好的 API - 整数准确度评级而不是丑陋的文本字符串总是胜出。