使用字段 "locality" 的地理编码组件过滤未按预期工作

geocode component filtering with field "locality" not working as expected

我正在使用 Google 地图的地理编码 API 获取曼哈顿此地址的纬度、经度值: 123 Dr Martin Luther King Jr Blvd, New York, NY 10035, USA

我的初始查询如下所示:https://maps.google.com/maps/api/geocode/json?address=123%20mlk%20blvd

此查询没有 return 我想要的地址,因此为了将结果过滤到仅位于曼哈顿的地址,我根据请求进行了修改以包含组件过滤参数 locality:Manhattan.

如此处文档中所定义:https://developers.google.com/maps/documentation/geocoding/intro#ComponentFiltering

所以我的问题是 - 为什么这个 url: https://maps.google.com/maps/api/geocode/json?address=123%20mlk%20blvd&components=locality:Manhattan 不是 return 我想要的地址?

然而 - 使用组件过滤器 postal_code:10035 return 我想要的地址:https://maps.google.com/maps/api/geocode/json?address=123%20mlk%20blvd&components=postal_code:10035

谢谢

我认为您应该注意的主要细节是 Google 最近更改了组件过滤器的行为。此更改于 2018 年 1 月 15 日进行。文档现在包含以下文本:

Filters on route, locality, and administrative_area influence the results but do not guarantee containment in the same way as an address query.

来源:https://developers.google.com/maps/documentation/geocoding/intro#ComponentFiltering

这意味着目前只有邮政编码和国家/地区继续严格执行组件过滤器。 Geocoding API 中的组件过滤不再像以前那样严格。此更改解释了您的示例请求的行为。具有局部性的组件过滤器不严格,所以你得到不同的结果,而具有邮政编码的组件过滤器是严格的,你得到预期的结果。

如果您需要地点,您应该将其包含在请求的 address 参数中,以减少歧义。

例如

https://maps.googleapis.com/maps/api/geocode/json?address=123%20mlk%20blvd%20Manhattan&key=YOUR_API_KEY

您应该遵循地理编码的最佳实践 API,可在以下位置找到:

https://developers.google.com/maps/faq#geocoder_queryformat https://developers.google.com/maps/documentation/geocoding/best-practices

希望我的回答能解开你的疑惑!