目标
您经常需要验证地点的位置。Google Maps Platform 中提供了几种不同的服务,可帮助您实现此用例。 本文档可帮助您在两项主要位置验证服务(Address Validation API 和 Geocoding API)之间进行选择。
Address Validation API 是 Google Maps Platform 的一项产品,可帮助客户验证地址是否准确。
使用 Geocoding API 进行地理编码是将地址转换为地理坐标的过程,可用于在地图上或地图上的位置放置标记。
如需简要了解地址验证 API 和地理编码 API 之间的差异,请点击此处。
何时选择 Address Validation API 和 Geocoding API
关于上方流程图的说明:
- 用户互动用例是指用户在场并与结果互动的情况。
- 地点自动补全是一个 JavaScript API,因此适合与界面集成。
- 您可能知道现有地址存在数据质量问题。因此,虽然您可能只需要地理编码,但建议您通过 Address Validation API 运行这些位置,以更正数据集。
在很多情况下,您可以根据上面的决策树,选择使用某种产品而不是另一种产品。但在其他情况下,您可能需要同时使用这两款产品来实现目标。
在以下情况下,您可以选择使用 Address Validation API 而非 Geocoding API:
- 数据很可能有问题,或者获取错误的地址会产生负面影响。这是因为 Address Validation API 会针对输入为何未获得高精确率结果提供更多反馈。
- 您需要更正用户输入(例如拼写错误或缺少字段),这样可以提高输出结果准确的可能性。
- 与 Geocoding API 相比,目标区域通过 Address Validation API 返回的元数据更多,例如将建筑物类型分类为住宅还是商业建筑。
在以下情况下,您可以选择使用 Geocoding API 而非 Address Validation API:
- 您的主要目标是检索地址的位置,因此单个地址的准确性可能并不重要。
- 例如,根据大量数据生成热图。
- 您需要全球解决方案,而 Address Validation API 并未在所有目标区域提供。
以下示例展示了与 Geocoding API 相比,Address Validation API 的功能。
无效地址示例
1 Fake St, Mountain View, CA 94043, USA
Address Validation API 会将此输入拆分为各个地址组成部分(街道、城市、州等)。它还可以提供精细的反馈,说明地址无效的原因,直至 PREMISE
级别。
Fake St 不存在于加利福尼亚州山景市,Address Validation API 会在返回的组件级详细信息中反映这一点:
{
"componentName": {
"text": "Fake St",
"languageCode": "en"
},
"componentType": "route",
"confirmationLevel":"UNCONFIRMED_BUT_PLAUSIBLE"
}
在本例中,需要检查的重要属性是 confirmationLevel
。针对 Fake St 返回 UNCONFIRMED_BUT_PLAUSIBLE
表示该 API 已确定某条街道可以使用该名称,但无法与支持的地址数据匹配。
使用 API 结果作为反馈,可以推断出此输入的街道组件 (Fake St) 有误。
使用 Geocoding API 与同一地址搭配使用时,它能够匹配“加利福尼亚”,如地理编码工具的屏幕截图所示(您可以点击此处试用该工具):
然而,结果是整个状态的地理编码,并且几乎没有关于输入上的哪些组件可能存在故障的反馈。
拼写错误示例
76 Buckingamm Palace Road, Londn, SW1W 9TQ, GB
上述地址包含几个拼写错误,一个在街道名称中,另一个在地区中。
Address Validation API 和 Geocoding API 都可以更正这些错误,并得到 76 Buckingham Palace Road, London, SW1W 9TQ 这一结果。不过,Address Validation API 可以提供有关该流程的更多信息。
我们来看一下输入时拼写错误的地址组成部分之一:
{
"componentName": {
"text": "Buckingham Palace Road",
"languageCode": "en"
},
"componentType": "route",
"confirmationLevel": "CONFIRMED",
"spellCorrected": true
}
}
Address Validation API 会返回一个标志,用于指明该字段已更正。您可以针对此标志实现业务逻辑,以便与数据提供方(例如电子商务结账中的客户)仔细检查更正内容。
缺少数据和拼写错误示例
Bollschestraße 86, 12587, DE
上述地址的街道名称拼写有误,并且缺少城市(地理区域)“柏林”。
Address Validation API 能够修正这两种错误,并返回 PREMISE
级别的地理编码以及经过 PREMISE
级别验证的地址:
Bölschestraße 86, 12587 Berlin, DE
在这种情况下,Geocoding API 无法成功克服输入错误,并返回 ZERO_RESULTS
的结果。
其他地址元数据示例
111 8th Avenue Ste 123, New York, NY 10011-5201, US
此地址正确无误,但单元号(123 号单元)不存在于该建筑物内。
Address Validation API 能够验证PREMISE
(111 8th Ave)的地址,并提供关于该房源的一些元数据,包括其用于商业用途
premises:
"business": true
此外,作为响应中 uspsData
的一部分返回的 dpvConfirmation
值是 S
:
"dpvConfirmation": "S"
dpvConfirmation
值为 S
表示地址已通过 PREMISE
级别验证,但输入中提供的单元号与该地址没有关联。
Geocoding API 无法提供此信息。
了解 Geocoding API 响应
概览
如果您使用 Geocoding API,地理编码结果的响应中会包含各种线索,可用于了解所提供地址的详细信息。
Geocoding API 的工作方式是解析层次结构中的地址组成部分。
例如,123 Example Street, Chicago, 60007, USA
按以下顺序解析:
/ Example Street/ Chicago/ 60007/ USA
将按此顺序进行评估。在本例中,第一个匹配项是芝加哥,更具体地说,是 60007
邮政编码。因此,它会针对该邮政编码返回以下地点 ID:
ChIJwRKzf8ixD4gRHiXqucwr_HQ
Geocode API 的响应中包含以下信息:
"partial_match": true,
"place_id": "ChIJwRKzf8ixD4gRHiXqucwr_HQ",
"types": [
"postal_code"
]
Geocoding API 可以确认此地址属于哪种地点。如需查看 Geocoding API 返回的地址 types
列表,请点击此处。
如果输入的任何组成部分都未解析,API 会返回:
{
"results": [],
"status": "ZERO_RESULTS"
}
如果只请求街道地址但没有门牌号,则会传回以下形式的结果:
"types": [
"route"
]
这意味着,Geocoding API 找不到或匹配不到街道号。
注意:如需了解某个地址是否存在,请检查 Geocoding API 响应中是否设置了任何参数(例如 types
、partial_match, results, status)
)。这会逐渐提高地址可能存在的置信度,但不会使其达到 100% 的准确性。因此,我们需要 Address Validation API。
您可以使用上述方法,仅通过 Geocoding API 响应来提高对地址准确性的信心。不过,与 Address Validation API 结果不同,Geocoding API 不会返回确切的反馈来确定结果准确性。
位置类型
为了正确理解此部分,您需要了解从 Geocoding API 响应中可能返回的不同位置类型:
- ROOFTOP 表示返回的结果是一个精确的地理编码,我们使其位置信息精确到街道地址的精度。
- RANGE_INTERPOLATED,用于表示返回的结果是一个近似值(通常为道路上的地址),该地址处于两个精确点(例如交叉路口)之间。当某个街道地址的 rooftop 地理编码不可用时,通常会返回内插值结果。
- GEOMETRIC_CENTER 表示返回的结果是某个位置(如多段线 [例如街道]或多边形 [地区])的几何中心。
- APPROXIMATE 表示返回的结果不属于上述任何情况。
如果 Geocoding API 返回 ROOFTOP
或 RANGE_INTERPOLATED
的 location_type
,并不一定意味着相应地址存在。同样,如果 Geocoding API 返回的 partial_match
标志设置为 true
,它可能仍然是适合您的结果。
这种类型的假匹配问题很难通过 Geocoding API 解决。至少,您可以考虑针对请求/响应的国家/地区实现一些基本后处理验证。更好的方法是,比较实际街道地址,看看是否有拼写错误和/或地址不完整的情况。
注意:如果您决定使用 Geocoding API,建议您定期在初始请求和 Geocoding API 响应之间执行数据质量检查。
部分匹配和假匹配
如果地址是部分匹配项,即地理编码 API 无法准确识别地址,则响应中包含:
"partial_match": true,
"types": [
"locality",
"political"
]
与上述位置类型相比,更重要的是考虑响应中何时 出现 partial_match = true
。partial_match
表示虽然 Geocoding API 能够匹配所请求的地址的一部分,但它未能返回原始请求的精确匹配项。
建议您检查一下原始请求中是否存在地址不完整的情况。对于请求中所指定的行政区划内不存在的街道地址,最常发生部分匹配的情况。当请求与同一行政区划中的两个或更多位置相匹配时,也可能会返回部分匹配。
例如,“21 Henr St, Bristol, UK
”会针对 Henry Street 和 Henrietta Street 返回部分匹配结果。请注意,如果请求中包含拼写错误的地址组成部分,Geocoding API 可能会建议一个备选地址。以这种方式触发的建议不会被标记为部分匹配。
合成地址
Geocoding API 可能会返回“合成”地址的位置信息,但这些地址在 Google 数据库中不存在精确的位置信息。
在这种情况下,响应对象通常包含一个长地点 ID 和以下属性:geometry.location_type=APPROXIMATE
。
如果您在响应中看到上述指示符,请考虑将输入的地址标记为无效,并尝试通过其他方式重新验证该地址。
注意:这是另一个示例,展示了使用 Address Validation API 时,如果地址不存在,您会收到直接反馈。
了解 Address Validation API 响应
关于如何理解 Address Validation API 的响应,已经有非常详尽的文档,因此我们在此不做进一步详述。
最佳做法
指定地理位置
在调用 Address Validation API 或 Geocoding API 时,最佳实践是尽量限制在哪些地理位置搜索相应地址。这两个 API 以两种不同的方式实现这一点:
Geocoding API - 地区偏向
如果您知道地理编码将位于某个国家/地区内,则可以使用区域自定义调整来获得更理想的结果。例如,如果您要对加拿大进行地理编码,建议您在请求中添加
®ion=ca
,以偏向加拿大。请注意,“地区偏向”只是优先显示该地区内的结果。在该地区以外,您仍然可以获得搜索结果。Address Validation API - 地区代码
同样,如果在请求中使用
regionCode
字段传递 ISO2 代码,Address Validation API 会生成更准确的结果。
存储地点 ID
若要存储 Google Maps Platform 中的营业地点相关信息以用于将来的请求,您可以在数据库中无限期存储地点 ID,将其作为营业地点的一种属性。您只需对每个地点 ID 发出一次查找地点请求。您也可以在每次用户请求交易详情时搜索地点 ID。
为确保您始终获得最新的信息,请使用包含 place_id
参数的地点详情请求,每 12 个月刷新一次地点 ID。
注意:请务必参阅地理编码的最佳实践指南。
总结
本文档介绍了 Address Validation API 和 Geocoding API 之间的核心区别。总而言之,在以下情况下,不妨考虑使用 Address Validation API:
- 必须提供准确的邮寄地址,尤其是出于递送目的。
- 输入数据已知质量较差。Address Validation API 对输入错误的容错性更高,会突出显示无法验证的地址组成部分,并更正输入数据。
- 需要提供更多信息来提供一个地址,例如住宅或商用(适用于部分地区)。
后续步骤
下载利用可靠的地址改进结账、配送和运营 白皮书,并观看利用地址验证功能改进结账、配送和运营 在线讲座。
建议的进一步阅读材料:
贡献者
本文由 Google 维护。以下贡献者最初撰写了这篇文章。
主要作者:
Henrik Valve | 解决方案工程师
Thomas Anglaret | 解决方案工程师
Sarthak Ganguly | 解决方案工程师