gpt4 book ai didi

javascript - 在 Google map 自动完成中排除某些位置

转载 作者:行者123 更新时间:2023-12-03 00:39:46 25 4
gpt4 key购买 nike

如何阻止某些国家/地区出现在 Google map 自动填充中?

我已经找到了几种将搜索范围缩小到某些区域的解决方案,但我正在寻找一种方法来进行全局搜索,而只丢失几个位置。

背景:

我在某些国家/地区开展业务是非法的,比如世界上有 10 个国家/地区。我们有一个带有谷歌地图自动完成功能的文本框,用于全局搜索,我从不希望这些国家/地区显示为选项。

我找到了将自动填充限制为最多 5 个国家/地区 (componentRestrictions) 的方法,但我希望在下拉列表中启用 240~ 个国家/地区,而只是不想看到这 10 个国家/地区。我发现的与此解决方案相关的唯一其他答案实际上是将 .pac-containers 的自动完成结果与不同的限制集 (240/5) 组合在一起,这会产生大量调用每个字符。

我研究过的其他 map 选项,例如bounds组件,都围绕将搜索范围限制在一个空格内,不排除全局空间中的某些位置。

代码设置:

API:

https://maps.googleapis.com/maps/api/js?key=${googlePlacesApiKey}&libraries=places

自动完成:

new google.maps.places.Autocomplete(input, options)

限制示例:

restrictions = { 'country': ['CU', 'AE', 'AF', 'AG', 'AI'] }
this.autocomplete.setComponentRestrictions(restrictions);
this.options.componentRestrictions = restrictions;

(对国家/地区的限制最多为 5 - 可以尝试限制,google hosts a nice js fiddle with documentation。)

最佳答案

这适用于包含方法(包含数百个国家/地区):就像 Chaussin 在https://codepen.io/fchaussin/pen/KgEApw?editors=0010

这会阻止某些国家/地区出现,仅呈现您想要的国家/地区。

本质上,将多个 service.getPlacePredictions 循环在一起,然后找出显示它们的方法。这需要很长时间(您将收到大量超出查询限制的请求,因为 Google 每分钟限制其 api),并且对于任何想要为数百个国家/地区提供扩展预测但适用于轻松超过 5 个。

countries = [...long string of country codes]

getAllPredictions(searchText) {
const service = new google.maps.places.AutocompleteService();
return Promise.all(
_.chunk(this.countries, 5).map(countries => {
return this.getPrediction(searchText, countries);
})
).then(predictions => {
return _.filter(_.flatten(predictions));
});
}

getPrediction(searchText, country) {
return new Promise( (resolve, reject) => {
service.getPlacePredictions({
input: searchText,
componentRestrictions: {
country: country,
},
types: ['(cities)']
}, async (data, status) => {
if( status === 'OVER_QUERY_LIMIT'){
resolve( await this.getPrediction(searchText, country) );
}else{
resolve(data);
}
});
});
}

关于javascript - 在 Google map 自动完成中排除某些位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53510010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com