Как получить Places.GeoDataApi.getAutocompletePredictions ТОЛЬКО в заданных пределах?

Я использую Places.GeoDataApi для Android и получаю разные результаты поиска в зависимости от местоположения устройства, выполняющего запрос. Мне нужно, чтобы результаты постоянно находились внутри границ. Я не вижу, где это можно настроить в запросе getAutocompletePredictions. Что-то мне не хватает?

Я получаю предложения автозаполнения адреса / места с помощью API GoogleApiClient и Places через:

Places.GeoDataApi.getAutocompletePredictions()

Для этого метода требуется объект GoogleApiClient, строка для автозаполнения и объект LatLngBounds для ограничения диапазона поиска. Вот как выглядит мое использование:

LatLngBounds bounds = new LatLngBounds(new LatLng(38.46572222050097, -107.75668023304138),new LatLng(39.913037779499035, -105.88929176695862));


GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .addApi(Places.GEO_DATA_API)
            .build();


PendingResult<AutocompletePredictionBuffer> results =
Places.GeoDataApi.getAutocompletePredictions(googleApiClient, "Starbucks", bounds, null);

Используемая версия: com.google.android.gms: play-services-location: 8.3.0

Документация: https://developers.google.com/places/android/autocomplete.


person Romina Liuzzi    schedule 23.11.2016    source источник
comment
Дело открыто: code.google.com / p / gmaps-api-issues / issues /   -  person Romina Liuzzi    schedule 01.12.2016


Ответы (2)


Хорошие новости. С апреля 2018 года Google добавил возможность указывать, как обрабатывать границы в прогнозах автозаполнения. Теперь вы можете использовать метод getAutocompletePredictions() класса GeoDataClient с параметром boundsMode

public Task<AutocompletePredictionBufferResponse> getAutocompletePredictions (String query, LatLngBounds bounds, int boundsMode, AutocompleteFilter filter)

boundsMode - как обрабатывать параметр границ. Если установлено СТРОГО, прогнозы содержатся в предоставленных границах. Если установлено значение BIAS, прогнозы смещаются в сторону предоставленных границ. Если параметр bounds равен нулю, этот параметр не действует.

источник: https://developers.google.com/android/reference/com/google/android/gms/location/places/GeoDataClient

Вы можете изменить свой код примерно так:

LatLngBounds bounds = new LatLngBounds(new LatLng(38.46572222050097, -107.75668023304138),new LatLng(39.913037779499035, -105.88929176695862));
GeoDataClient mGeoDataClient = Places.getGeoDataClient(getBaseContext());;

Task<AutocompletePredictionBufferResponse> results =
        mGeoDataClient.getAutocompletePredictions("Starbucks", bounds, GeoDataClient.BoundsMode.STRICT, null);

try {
    Tasks.await(results, 60, TimeUnit.SECONDS);
} catch (ExecutionException | InterruptedException | TimeoutException e) {
    e.printStackTrace();
}

try {
    AutocompletePredictionBufferResponse autocompletePredictions = results.getResult();

    Log.i(TAG, "Query completed. Received " + autocompletePredictions.getCount()
            + " predictions.");

    // Freeze the results immutable representation that can be stored safely.
    ArrayList<AutocompletePrediction> al = DataBufferUtils.freezeAndClose(autocompletePredictions);

    for (AutocompletePrediction p : al) {
        CharSequence cs = p.getFullText(new CharacterStyle() {
            @Override
            public void updateDrawState(TextPaint tp) {

            }
        });
        Log.i(TAG, cs.toString());
    }

} catch (RuntimeExecutionException e) {
    // If the query did not complete successfully return null
    Log.e(TAG, "Error getting autocomplete prediction API call", e);
}

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

person xomena    schedule 02.05.2018

У меня та же проблема.

К сожалению, невозможно получить места в определенных границах с помощью Google Places API Android.

Однако вы по-прежнему можете использовать поиск мест поблизости с помощью веб-службы API Google Адресов.

Документация здесь: https://developers.google.com/places/web-service/search?hl=fr

Затем вы сможете установить границы в параметрах и получить места внутри границ из ответа JSON, как описано в этом ответе: https://stackoverflow.com/a/32404701/5446285

person Jack'    schedule 12.12.2016
comment
Спасибо, Джек, я рассмотрел этот подход, однако Google заранее предупреждает вас на своей странице документации о том, что: Веб-служба Places API и клиентские библиотеки предназначены для использования в серверных приложениях. И моя проблема коснулась клиента Android. Поскольку я задал этот вопрос, я попросил коллегу отправить отчет в Карты, и они ответили, что в настоящее время работают над поддержкой этой функции, хотя дата выпуска еще не указана. - person Romina Liuzzi; 13.12.2016
comment
Запрос функции для Places API для Android: Issuesetracker.google.com/issues/38188994 - person xomena; 10.05.2017