web-dev-qa-db-fra.com

Limiter la recherche de saisie semi-automatique à un pays particulier dans Google Adresses Android API

Mon objectif est de limiter les résultats de la saisie semi-automatique de Google Places Android API à un pays particulier (États-Unis) uniquement.

J'utilise l'API suivante:

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

On dirait que LatLngBounds est censé faire ce travail.

  1. Si oui, quelles sont les valeurs de LatLngBounds pour les États-Unis?

  2. Quelle source avez-vous utilisée pour obtenir LatLngBounds pour un pays?

  3. LatLngBounds est un rectangle - il peut donc également inclure d'autres pays dans le résultat. Que dire de cela?

  4. Y a-t-il une meilleure façon de le faire?

20
K.K

À partir de Google Play Services v9.6, vous pouvez désormais définir un filtre de pays pour vos suggestions de saisie semi-automatique. Veuillez vous assurer que votre version de Play Services est au moins 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);  

Vous pouvez changer les codes de pays en utilisant leurs ISO 'Aplha 2' Codes

21
Yankee

Si vous utilisez PlaceAutocompleteFragment vous pouvez le définir comme ceci:

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

mAutocompleteFragment.setFilter(autocompleteFilter);
10
Malek Hijazi

La définition de la méthode du constructeur LatLngBounds ressemble à ci-dessous:

LatLngBounds (LatLng southwest, LatLng northeast)   

c'est-à-dire qu'il faut deux valeurs LatLng l'une pour l'emplacement sud-ouest de la frontière et l'autre est l'emplacement nord-est de la frontière et les deux autres points du rectangle sont calculés trivialement.

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

mon approximation si je ne me trompe pas, les valeurs LatLng sud-ouest seraient 32.6393, -117.004304 et les valeurs LatLng nord-est seraient 44.901184, -67.32254 pour les États-Unis.

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

J'utilise généralement http://www.findlatitudeandlongitude.com/ pour vérifier ces valeurs LatLng en plaçant le marqueur aux emplacements requis.

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

Oui, vous avez raison, les limites ci-dessus seraient purement rectangulaires et il n'est pas possible de restreindre les résultats aux seuls États-Unis utilisant ces limites.
C'est parce que le rectangle [bornes] serait calculé en utilisant deux points de Latlng [SE NW] que nous fournissons au constructeur et les deux autres points seraient calculés trivialement.

Is there a better way to do it?

Oui, vous pouvez utiliser l'API du service Web Google Adresses à la place. Le didacticiel ci-dessous explique comment utiliser l'API.
http://codetheory.in/google-place-api-autocomplete-service-in-Android-application/

Vous pouvez utiliser des types d'adresse et des composants d'adresse pour restreindre les résultats en utilisant cette API de la manière que vous souhaitez: https://developers.google.com/maps/documentation/geocoding/intro#Types

Vous pouvez restreindre par pays, région et divers autres types en utilisant les types mentionnés dans le lien.

J'espère que cela aide!!

P.S: Si quelqu'un pouvait expliquer comment restreindre l'utilisation de l'API Bounds in Play Services à un pays particulier, ce serait vraiment génial !!

7
PunitD

Pour la nouvelle Place api 2019, vous devez le faire

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