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



我正在使用谷歌地图的地理编码API来获取曼哈顿这个地址的纬度,lng值:123 Dr Martin Luther King Jr Blvd, New York, NY 10035, USA

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

此查询不会返回我想要的地址,因此为了将结果过滤到仅曼哈顿的结果,我通过请求修改了包括组件过滤参数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 不返回我想要的地址?

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

谢谢

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

对路由、位置和administrative_area的筛选器会影响结果,但不能像地址查询那样保证包含

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

这意味着目前只有邮政编码和国家/地区继续严格强制使用组件筛选器。地理编码 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

我希望我的回答能解释你的疑问!

最新更新