Исключить определенные местоположения в Google Maps Автозаполнение - PullRequest
0 голосов
/ 28 ноября 2018

Как вы не позволяете определенным странам появляться в Автозаполнении Карт Google?

Я нашел несколько решений для сужения поиска в определенных областях, но я ищу способ глобального поиска.пропущено всего несколько мест.

Справочная информация:

У меня есть страны, в которых мне запрещено работать, скажем, 10 ~ в мире.У нас есть текстовое поле с автозаполнением карт Google для глобальных поисков, и я никогда не хочу, чтобы эти страны отображались в качестве параметров.

Я нашел способы ограничить автозаполнение макс. 5 странами (componentRestrictions), ноЯ хочу, чтобы в раскрывающемся списке было включено 240 стран, и просто не хочу видеть 10 стран.Единственные другие ответы, которые я нашел, относящиеся к этому решению, касались фактического объединения результатов автозаполнения .pac-containers с различными наборами ограничений (240/5), которые генерировали бы много вызовов для каждого персонажа.

Другие карты options Я рассмотрел, как bounds и components, все они вращаются вокруг ограничения границ поиска одним пространством, не исключая определенные места из глобального пространства.

Настройка кода:

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 размещает симпатичную скрипку js с документацией .)

1 Ответ

0 голосов
/ 29 ноября 2018

Это работало с методом включения (include сотни стран): как тот, который был разработан 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);
        }
      });
    });
  }
...