Ограничить поиск автозаполнения в определенной стране в Google Адресах Android API

Моя цель - ограничить результаты Autocomplete из API Google Адресов Google в той или иной стране (США).

Я использую следующий API:

        PendingResult<AutocompletePredictionBuffer> results =
                Places.GeoDataApi
                        .getAutocompletePredictions(mGoogleApiClient, constraint.toString(),
                                mBounds, mPlaceFilter);

Похоже, LatLngBounds должен выполнять эту работу.

  • Если да, то каковы значения LatLngBounds для Соединенных Штатов?

  • Какой источник вы использовали для получения LatLngBounds для страны?

  • LatLngBounds - это исправление, поэтому оно может включать и другие страны в результат. Что об этом?

  • Есть ли лучший способ сделать это?

Ответы

Ответ 1

Начиная с Google Play Services v9.6, вы можете установить фильтр страны для своих предложений автозаполнения. Убедитесь, что версия Play Services не менее v9.6.

AutocompleteFilter autocompleteFilter = new AutocompleteFilter.Builder()
                            .setTypeFilter(Place.TYPE_COUNTRY)
                            .setCountry("US")
                            .build();
Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
                                    .setFilter(autocompleteFilter)
                                    .build(this);  

Вы можете изменить коды стран, используя их ISO 'Aplha 2' Codes

Ответ 2

Если вы используете PlaceAutocompleteFragment, вы можете установить его так:

AutocompleteFilter autocompleteFilter = new AutocompleteFilter.Builder()
                        .setTypeFilter(Place.TYPE_COUNTRY)
                        .setCountry("US")
                        .build();

mAutocompleteFragment.setFilter(autocompleteFilter);

Ответ 3

Определение метода конструктора LatLngBounds выглядит следующим образом:

LatLngBounds (LatLng southwest, LatLng northeast)   

то есть. он берет два значения LatLng один для юго-западного расположения границы, а другой - северо-восточное расположение границы, а две другие точки прямоугольника вычисляются тривиально.

If yes, then what are the values of LatLngBounds for United States?

мое грубое предположение, если я не ошибаюсь, значения SouthLaw LatLng будут 32.6393, -117.004304 и северо-восточные значения LatLng были бы 44.901184, -67.32254 для США.

Which source did you use to get LatLngBounds for a country?

Я обычно использую http://www.findlatitudeandlongitude.com/, чтобы проверить эти значения LatLng, поместив маркер в нужные места.

LatLngBounds is a rectange - so it can include other countries in the result as well. What about that?

Да, вы правы, приведенные выше оценки будут чисто прямоугольными, и невозможно ограничить результаты только США, используя эти границы.
Это связано с тем, что прямоугольник [границы] будет вычисляться с использованием двух точек latlng [SE и NW], которые мы предоставляем конструктору, и другие две точки будут вычисляться тривиально.

Is there a better way to do it?

Да, вы могли бы использовать API веб-сервисов Google Places. В руководстве по обучению объясняется, как использовать API.
http://codetheory.in/google-place-api-autocomplete-service-in-android-application/

Вы можете использовать типы адресов и компоненты адреса, чтобы ограничить результаты с помощью этого API так, как вы пожелаете: https://developers.google.com/maps/documentation/geocoding/intro#Types

Вы можете ограничить по странам, регионам и другим типам типы, указанные в ссылке.

Надеюсь, что это поможет!

P.S: Если кто-то может ответить, как ограничить использование Bounds в API Служб Службы в конкретной стране, это было бы действительно здорово!!

Ответ 4

Для нового Place api 2019, Вы должны сделать это

    FindAutocompletePredictionsRequest request = 
    FindAutocompletePredictionsRequest.builder()
   .setLocationBias(bounds)
   .setCountry("au")   //to set country only for e.g australia
   .setTypeFilter(TypeFilter.ADDRESS) 
   .setSessionToken(token)
   .setQuery(query)
   .build();