Как получить Places.GeoDataApi.getAutocompletePredictions ТОЛЬКО внутри границ?
Я использую Places.GeoDataApi для Android и получаю разные результаты поиска в зависимости от местоположения устройства, выполняющего запрос. Мне нужно, чтобы результаты были последовательно расположены внутри границ. Я не вижу, где это может быть установлено в запросе getAutocompletePredictions. Есть что-то, что я пропускаю
Я получаю предложения по автозаполнению адресов / мест размещения с помощью GoogleApiClient и Places API через:
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
2 ответа
Хорошие новости. По состоянию на апрель 2018 года Google добавил возможность указывать, как обрабатывать границы в автозаполнении прогнозов. Теперь вы можете использовать getAutocompletePredictions()
метод GeoDataClient
класс с boundsMode
параметр
public Task<AutocompletePredictionBufferResponse> getAutocompletePredictions (String query, LatLngBounds bounds, int boundsMode, AutocompleteFilter filter)
boundsMode - Как обработать параметр границ. Если задано значение STRICT, прогнозы содержатся в предоставленных границах. Если установлено значение 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);
}
Надеюсь, это поможет!
У меня та же проблема.
К сожалению, нет возможности получить места в определенных границах с помощью Google Places API Android.
Тем не менее, вы все равно можете использовать Поиск поблизости, используя Google Places API Web Service.
Документация здесь: https://developers.google.com/places/web-service/search?hl=fr
Затем вы сможете установить границы в параметрах и получить места внутри границ из ответа JSON, как описано в этом ответе: /questions/47208198/poluchenie-rezultatov-blizlezhaschih-mest-iz-mestopolozheniya-polzovatelya-s-pomoschyu-google-maps-api-v-android/47208219#47208219