谷歌放置自动完成限制类型和隐藏键

Posted

技术标签:

【中文标题】谷歌放置自动完成限制类型和隐藏键【英文标题】:Google places AutoComplete limit types & hide key 【发布时间】:2017-01-30 20:26:48 【问题描述】:

我有一个简单的 grails 应用程序,它有一个使用 google places api 的自动完成输入字段。代码如下

<label for="city">
   <input id="city" name="city">
</label>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places&key=myKey"></script>
<script>
    var input = document.getElementById('city');
    var searchBox = new google.maps.places.SearchBox(input);
</script>

这很好用,但它提供了城市、州、国家等信息。我只需要城市和州/只有州,我不想要国家。

Boston, MA, United States - Is the results that I get and i Need it to look like

Boston, MA Or MA

有没有办法在我收到的回复中添加模板? (我需要来自世界各地的城市和州,但响应中没有国家)

我是这个 API 的新手,提前致谢

【问题讨论】:

您有 2 个问题。请在单独的问题中询问有关保护密钥的问题,以便单独回答。 完成,修改了我的问题。另一个问题在这个link 【参考方案1】:

很遗憾,这还不能通过 API 获得。您只能手动执行此操作或创建一个函数来过滤 API 对您的自定义文本的响应。

参考资料:

Google Places Autocomplete Remove State and Country from Result Google Places: Limit Autocomplete Results to Cities Only, Hints Google Places javascript Autocomplete: can I remove the country from the place name?

您还可以检查Places API Feature request 以查看是否已经有对此的待处理功能请求。如果没有,您可以提交Feature request。

希望这会有所帮助!

【讨论】:

【参考方案2】:

您可以很容易地将您的google-map search 结果过滤到特定国家/地区。

只需将option 传递给您的自动完成功能,如下所示

 //options for restricting the search result to "US"
 var options = 
  types: ['(cities)'],
  componentRestrictions: country: "us"
 ;

 //Search box code
 var input = document.getElementById('city');
 var searchBox = new google.maps.places.Autocomplete(input, options);

官方国家代码参考: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#AM

正如 Vishal 提到的,他希望搜索只产生全世界的城市,但 谷歌地图没有这样的设施,只能在搜索结果中给出所有国家/地区的城市名称 .

我们可以做的一件事是在之后更改输入值(从中删除国家/地区) 用户选择地址。

添加以下代码:

 //Search box code
 var input = document.getElementById('city');
 var searchBox = new google.maps.places.Autocomplete(input);

 //adding event listener over the input box
 google.maps.event.addListener(searchBox, 'place_changed', function() 
        var place = searchBox.getPlace();

        //remove the country part from search result
        var rquiredAddress = place.formatted_address.slice(0, place.formatted_address.lastIndexOf(","));;
       $("#city").val(rquiredAddress);
 );

只是一个意见,你应该在搜索中保留国家部分 可能是不同国家/地区相似的城市名称数量 会迷惑用户。

【讨论】:

我的要求不限于一个国家。当我做一些研究时,我确实找到了这个解决方案。我需要获得世界各地国家的城市和州。只是我不希望结果中出现国家名称。最初我使用 gd.geobytes.com/AutoCompleteCity api,它有一个模板参数,我们可以在其中设置城市和州作为所需的响应。但它有一个混合上下文加载问题,所以我正在查看 google places api。目前我正在尝试为请求找到一个类似于 geobytes 的参数,如果有的话。 我已经更新了我的答案。它不完全是您正在寻找的东西,而是周围的东西。

以上是关于谷歌放置自动完成限制类型和隐藏键的主要内容,如果未能解决你的问题,请参考以下文章

在自动完成输入上写入时显示/隐藏按钮

限制谷歌自动完成查询?

AngularJS - 在谷歌自动完成中限制国家

谷歌地图自动完成:只输出地址,没有国家和城市

Angular Material:当用户点击输入键时隐藏自动完成面板

谷歌放置特定城市和国家的地点