2015-04-21 5 views
14

Я использую Google Place API for Android с автозаполненияПолучить название города и почтовый индекс от Google Место API на Android

Все отлично работает, но когда я получаю результат, как показано here, я не город и почтовый индекс Информация.

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()); 
    } 
}; 

Класс Place не содержит эту информацию. Я могу получить полный человеческий читаемый адрес, lat и long и т. Д.

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

ответ

8

К сожалению, эта информация в настоящее время недоступна через API Android.

Доступен с использованием веб-службы API-интерфейсов Places (https://developers.google.com/places/webservice/).

+1

Да, я в конечном итоге делает, что в 2 этапа (2-ой является призыв к Веб-сервис). Это так странно, что нет такой информации и нет способа ее получить! –

8

название города и почтовый код может быть получен в 2 этапа

1) Посылка вызова веб-службы для https://maps.googleapis.com/maps/api/place/autocomplete/json?key=API_KEY&input=your_inpur_char. JSON содержит поле place_id, которое может быть использовано на этапе 2.

2) Сделайте еще один звонок для веб-службы https://maps.googleapis.com/maps/api/place/details/json?key=API_KEY&placeid=place_id_retrieved_in_step_1. Это вернет JSON, который содержит address_components. Просеивание через types, чтобы найти locality и postal_code, может дать вам название и почтовый индекс города.

код для его достижения

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") 
       } 
      } 
     } 
21

Обычно вы не можете получить название города от площади,
, но вы можете легко получить его таким образом:
1) Получить координаты с места (или однако вы их получите);
2) Используйте Geocoder для извлечения города по координатам.
Это можно сделать так:

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; 
} 
+1

Это сработало для меня. Спасибо! – rundavidrun

+0

добро пожаловать! –

+0

... должен добавить блок try и catch для обработки IOException, иначе он не будет компилироваться. –

0

Не самый лучший способ, но может быть полезно следующее:

Log.i(TAG, "Place city and postal code: " + place.getAddress().subSequence(place.getName().length(),place.getAddress().length())); 
+0

Не работает ..... –