首页 > 解决方案 > 按县限制谷歌地图地理编码请求?

问题描述

我正在使用 JavaScript API,但似乎也无法让它与 CURL API 一起运行。

问题:我想按县 + 州限制我的地理编码结果。Google Maps geocoding API 组件过滤不再识别administrativeArea格式"San Mateo County, CA"(以前工作过),并且"San Mateo County"即使它绝对是administrative_area_level_2根据结果对象也无法识别。

例如,"https://maps.googleapis.com/maps/api/geocode/json?address=oakland&components=country:US|administrative_area:San+Mateo+County&key=YOUR_KEY_HERE"返回奥克兰的结果,即使它位于阿拉米达县,而不是圣马特奥县。使用“加利福尼亚州圣马特奥县”也完全被忽略。做components=country:US|administrative_area:San+Mateo+County|adminstrative_area:CA类似的事情是行不通的(据我所知,无论如何使用 JS API 是不可能的)。

(最终的用例是在地理编码的地址实际上不是位置时处理结果,例如“无家可归”,它曾经返回错误代码但最近开始返回“美国”,部分原因是组件过滤似乎已经改变.)

如果你想使用 API,这里有一个 JS fiddle 允许这样做:https ://jsfiddle.net/Lzj1uvfd/

标签: google-mapsgoogle-maps-api-3geocodinggoogle-geocodergoogle-geocoding-api

解决方案


早在 2018 年 1 月,Geocoding API 的组件过滤就发生了变化。在此更改之后,只有邮政编码和国家/地区过滤器作为严格过滤器起作用,路线、地区和管理区域不是严格过滤器,只会影响结果。

Google 向高级计划客户发送了有关此更改的通知。我在这里分享这封电子邮件的副本

您好 Maps APIs 高级计划客户,

谷歌地图地理编码服务即将进行的质量改进将要求地理编码 API 的组件过滤功能限制较少。这将于 2018 年 1 月 16 日生效。

同时,我们在 Geocoding API Web 服务上公开了一个测试参数,以便您可以查看此更改是否会影响您使用组件过滤功能的地理编码请求。要使用该参数,请将relax_components=true 添加到您的请求中。

此测试参数将在 2018 年 1 月 16 日之前可用。在该日期之后,该参数将被忽略,但仍会接受使用该参数的请求。没有等效的 JavaScript。

质量改进将为寻求找到有效地址的请求提供更高质量的结果。但是,以下语句将不再适用于组件过滤功能: 包含组件过滤器的查询仅返回与过滤器匹配的地理编码结果。如果未找到匹配项,则地理编码器将返回与过滤器本身匹配的结果。仅当您提供相互排除的过滤器时,组件过滤才会返回 ZERO_RESULTS 响应。

邮政编码和国家代码过滤器将继续严格执行所有查询。

例子

位置过滤器(内华达州斯普林谷)未严格包含但靠近(内华达州帕拉代斯)的地址将被找到,而不是与位置过滤器完全匹配的不太具体的结果:

示例请求 #1:address=4755+W+Flamingo+Rd&components=locality:Spring+Valley|country:US 当前结果:“W Flamingo Rd, Spring Valley, NV, USA”(路线,partial_match) 未来结果:“4755 W Flamingo Rd, Las Vegas, NV 89103, USA”(前提)

当位置过滤器将形成不存在的地址时,可能会返回不同位置的结果,而不是 ZERO_RESULTS:

示例请求 #2:components=locality:Montreal+Lake+Reserve|administrative_area:Saskatchewan|country:CA 当前结果:ZERO_RESULTS 未来结果:“Montreal Lake, SK S0J 1Y0, Canada”(建立)

示例请求 #3:components=country:US|locality:friends+creek+conservation+area+cisco|administrative_area:IL 当前结果:ZERO_RESULTS 未来结果:“Friends Creek Conservation Area, 13734 Friends Creek Park Rd, Cisco, IL 61830,美国”(公园)

互斥过滤器不再保证 ZERO_RESULTS。自从旧的正向地理编码器于 2017 年 4 月 3 日永久停用以来,情况就已经如此。即将发生的变化将使这种情况更频繁地发生,例如,当行政区域过滤器优于位置过滤器时:

示例请求 #4:address=Müslistrasse+16&components=locality:Spreitenbach|administrative_area:ZH|country:CH 当前结果:ZERO_RESULTS 未来结果:“Muslistrasse 16, 8820 Wädenswil, Switzerland”(street_address)

从未找到的无效地址将不再产生与过滤器本身匹配的结果。这可能会导致 ZERO_RESULTS 或一个或多个与某些过滤器匹配的有效地址。

示例请求 #5:address=13+Rue+del+Percebe&components=locality:Sydney|country:AU 当前结果:“Sydney NSW 2000, Australia”(地点) 未来结果:ZERO_RESULTS

示例请求 #6:address=Sesame+St&components=locality:Sydney|country:AU 当前结果:“Sydney NSW 2000, Australia”(地点) 未来结果:“Sesame St, Mount Waverley VIC 3149, Australia”(路线)和 2更多的

在极少数情况下,对于给定的过滤器值,可能不再找到有效地址。

示例请求 #7:address=Fuerteventura&components=locality:Almeria|administrative_area:AL|country:ES 当前结果:“Calle Isla de Fuerteventura, 04007 Almería, Spain”(路线) 未来结果:ZERO_RESULTS

此致 Google Maps API 团队

我希望这个信息帮助!


推荐阅读