使用字段“locality”无法按预期工作的地理编码组件过滤

时间:2018-01-19 16:59:35

标签: google-maps google-geocoder google-geocoding-api

我正在使用Google Map的Geocode API来获取曼哈顿地址的lat,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

所以我的问题是 - 为什么这个网址: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

由于

1 个答案:

答案 0 :(得分:1)

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

  

过滤路线,位置和administrative_area 影响 结果,但 不保证遏制 与地址查询的方式相同。

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

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

如果您需要某个地区,则应将其包含在请求的address参数中,以使其不那么模糊。

E.g。

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

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