web-dev-qa-db-fra.com

Obtenez le nom de la ville et le code postal de l'API Google Place sur Android

J'utilise Google Place API pour Android avec saisie semi-automatique

Tout fonctionne bien, mais lorsque j'obtiens le résultat comme indiqué ici , je n'ai pas les informations sur la ville et le code postal.

    private ResultCallback<PlaceBuffer> mUpdatePlaceDetailsCallback
        = new ResultCallback<PlaceBuffer>() {
    @Override
    public void onResult(PlaceBuffer places) {
        if (!places.getStatus().isSuccess()) {
            // Request did not complete successfully
            Log.e(TAG, "Place query did not complete. Error: " + places.getStatus().toString());

            return;
        }
        // Get the Place object from the buffer.
        final Place place = places.get(0);

        // Format details of the place for display and show it in a TextView.
        mPlaceDetailsText.setText(formatPlaceDetails(getResources(), place.getName(),
                place.getId(), place.getAddress(), place.getPhoneNumber(),
                place.getWebsiteUri()));

        Log.i(TAG, "Place details received: " + place.getName());
    }
};

La classe Place ne contient pas ces informations. Je peux obtenir l'adresse complète lisible par l'homme, les lat et long, etc.

Comment puis-je obtenir la ville et le code postal du résultat de la saisie semi-automatique?

17
Plumillon Forge

Vous ne pouvez pas normalement récupérer le nom de la ville à partir du lieu,
mais vous pouvez facilement l'obtenir de cette façon:
1) Obtenez les coordonnées de votre lieu (ou comment vous les obtenez);
2) Utilisez Geocoder pour récupérer la ville par coordonnées.
Cela peut être fait comme ceci:

private Geocoder mGeocoder = new Geocoder(getActivity(), Locale.getDefault());

// ... 

 private String getCityNameByCoordinates(double lat, double lon) throws IOException {

     List<Address> addresses = mGeocoder.getFromLocation(lat, lon, 1);
     if (addresses != null && addresses.size() > 0) {
         return addresses.get(0).getLocality();
     }
     return null;
 }
26
Leo Droidcoder

Le nom de la ville et le code postal peuvent être récupérés en 2 étapes

1) Faire un appel de service Web à https://maps.googleapis.com/maps/api/place/autocomplete/json?key=API_KEY&input=your_inpur_char . Le JSON contient le place_id champ qui peut être utilisé à l'étape 2.

2) Appelez à nouveau le service Web https://maps.googleapis.com/maps/api/place/details/json?key=API_KEY&placeid=place_id_retrieved_in_step_1 . Cela renverra un JSON qui contient address_components. Faire une boucle dans types pour trouver locality et postal_code peut vous donner le nom de la ville et le code postal.

Code pour y parvenir

JSONArray addressComponents = jsonObj.getJSONObject("result").getJSONArray("address_components");
        for(int i = 0; i < addressComponents.length(); i++) {
            JSONArray typesArray = addressComponents.getJSONObject(i).getJSONArray("types");
            for (int j = 0; j < typesArray.length(); j++) {
                if (typesArray.get(j).toString().equalsIgnoreCase("postal_code")) {
                    postalCode = addressComponents.getJSONObject(i).getString("long_name");
                }
                if (typesArray.get(j).toString().equalsIgnoreCase("locality")) {
                    city = addressComponents.getJSONObject(i).getString("long_name")
                }
            }
        }
15
AbhishekB

Malheureusement, ces informations ne sont pas disponibles via l'API Android pour le moment.

Il est disponible à l'aide du service Web de l'API Places ( https://developers.google.com/places/webservice/ ).

9
plexer