Подтвердить что ты не робот

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

Im работает над Android-приложением, в котором я хочу, чтобы пользователь искал данные (которые предоставляет мое приложение) в определенном городе. Для этого у меня есть поле поиска, в котором пользователь может ввести название города. Я использую API Google Адресов для получения результатов автозаполнения следующим образом:


    PendingResult results =
 Places.GeoDataApi
.getAutocompletePredictions(mGoogleApiClient, searchQuery,
 mBounds, mPlaceFilter);

В моем случае mBounds представляет границы Германии, потому что Im интересуется только городами в Германии, и я не хочу, чтобы города в других странах отображались в предсказаниях автозаполнения. Теперь, очевидно, Германия не идеальная площадь, поэтому mBounds содержит всю Германию, а также части окружающих стран, таких как Швейцария. Итак, вопросы: как я могу удалить все предсказания автозаполнения для мест, которые не в Германии?

Моя первая мысль заключалась в том, чтобы использовать фильтр места, чтобы получить прогнозы только для одной страны. Согласно документации, это действительно можно использовать для фильтрации по регионам (например, по странам), но, к сожалению, эта специальная фильтрация не поддерживается в Google Адресах API для Android (согласно документации).

Коллекция типов (регионов) не поддерживается в API Google Адресов для Android.

Там также нет никакой возможности получить страну Place либо из AutocompletePrediction или Place. Поэтому я даже не могу сделать фильтрацию.

Единственные решения, о которых я могу думать, следующие:

  • Получите Place из прогноза и используйте API Geocoder API для извлечения Address, и из этого вы получите страну и выполните фильтрацию. Однако это дополнительный сетевой вызов (и другой против моей квоты), который кажется совершенно ненужным, поскольку мне кажется, что объект AutocompletePrediction или, по крайней мере, Place объекты должны знать, в какой стране это место. В конце концов, его часть результатов описания /toString этих объектов. Тем не менее, это просто строка типа "Мюнхен, Германия".

  • Используйте строку описания, указанную в 1., чтобы определить страну. Однако это похоже на еще худшее решение, чем 1, поскольку описание локализовано в зависимости от локали пользователей, которая может быть всем. Так что просто поиск "Германии" не будет выполнять эту работу.

Я был бы признателен за решение, которое лучше, чем я предложил до сих пор. Я не могу представить, что нет лучшего способа сделать это. Любые идеи?

4b9b3361

Ответ 1

У меня была такая же проблема, что нам не удавалось найти способ фильтрации в конкретной стране, поэтому то, что я делал как глупое обходное решение, - это фильтр результата, если он содержит название страны в моем случае "Объединенные Арабские Эмираты"

while (iterator.hasNext()) {
    AutocompletePrediction prediction = iterator.next();
    // Get the details of this prediction and copy it into a new PlaceAutocomplete object.

   if(prediction.getDescription().contains("United Arab Emirates"))
    resultList.add(new PlaceAutocomplete(prediction.getPlaceId(),
            prediction.getDescription()));
}

Ответ 2

AutocompleteFilter typeFilter = new AutocompleteFilter.Builder().
                setTypeFilter(Place.TYPE_COUNTRY).setCountry("you country code").build();

Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
                        .setFilter(typeFilter)
                        .build(this);