我可以按城镇限制谷歌地理编码器结果吗?

Posted

技术标签:

【中文标题】我可以按城镇限制谷歌地理编码器结果吗?【英文标题】:Can I restrict google geocoder results by cities and towns? 【发布时间】:2019-11-29 13:06:54 【问题描述】:

Google 地理编码 API 有 component restrictions。

行政区域、国家、地区、邮政编码、路线

我可以使用其中任何一个来按城市和城镇进行过滤吗? 这样我就不会回到国家或州?

有点像

this.geocoder = new google.maps.Geocoder();
this.geocoder.geocode(
      address: this.registerForm.get('city').value,
      componentRestrictions: 
        country: 'US',
        locality // not sure here
      
    ,
    (results, status) => 
      if (status === google.maps.GeocoderStatus.OK) 
    

我可以用谷歌地图自动补全!

this.autocomplete = new google.maps.places.Autocomplete(this.element, 
  types: ['(cities)']
);

【问题讨论】:

locality 过滤器是针对城镇的,但请注意,此过滤器并不严格,它只是偏向于在 locality 内搜索地址。实际结果可能在外面。此外,地理编码通常只返回一个结果(最佳匹配),它不像自动完成服务。如果您的意图是从地理编码服务中获取城市列表,它将无法正常工作。 我的意图是只获取一个结果,但将其限制在一个国家/地区,例如我正在做的一个城市和/或城镇。我不希望在输入中输入文本的用户能够获取州或国家/地区的结果。这是一个约会网站,我试图在不让用户输入确切地址的情况下获得最近的大致位置(城市/城镇)!! 如果我可以使用locality,你能提供一个例子吗? 不确定它是否适用于所有情况,但 https://maps.googleapis.com/maps/api/geocode/json?components=locality%3AHouston%7Ccountry%3AUS&key=YOUR_API_KEY 之类的东西似乎返回城市“美国德克萨斯州休斯顿”。 这是网址,我需要一个以编程方式使用 API 的示例 【参考方案1】:

Geocoding API 的 component filtering 实际上与 Places API 的行为不同 -- Place Types

组件过滤可让您返回仅限于特定区域的地址。例如,您搜索“High St Hasting”,组件限制为country: 'GB',请求将返回“英国”国家内最接近的地址匹配。返回的地址可以是街道地址、邻里、国家或其他类型。

Places API 地点类型另一方面,让您返回与给定类型匹配的地址。例如,您只想搜索“机构”类型的地址。

我了解此功能与您希望将结果限制为仅城市或城镇类型的用例相匹配。 Geocoding API 目前不支持此功能。

作为一种解决方法,您可以使用地点自动填充功能,并根据此documentation 中的说明将自动填充结果偏向于一个大概的位置或区域。然后,您的用户可以从自动完成建议中选择正确的位置。

var options = 
  types: ['(cities)'],
  componentRestrictions: country: 'us'
;

如果您搜索不明确(不完整)的地址,例如在响应用户输入时,也建议使用“自动完成”。更多详情here.

希望这会有所帮助!

【讨论】:

以上是关于我可以按城镇限制谷歌地理编码器结果吗?的主要内容,如果未能解决你的问题,请参考以下文章

从谷歌地图的地理位置获取邮政编码

iOS 6 中的本地化地理编码选项

谷歌地图地理编码器返回相同的结果

如何防止谷歌地理编码器从其他国家返回结果

地理编码在应用于数据框时返回错误的城镇 - 在应用于文本时返回正确的城镇

谷歌地图 SDK 地理编码