Получение названия улицы из объекта Address/Location в Android

Я пытаюсь получить название улицы моего текущего местоположения, но я не могу ее получить.

Я использую этот метод для извлечения адреса:

public Address getAddressForLocation(Context context, Location location) throws IOException {

        if (location == null) {
            return null;
        }
        double latitude = location.getLatitude();
        double longitude = location.getLongitude();
        int maxResults = 1;

        Geocoder gc = new Geocoder(context, Locale.getDefault());
        List<Address> addresses = gc.getFromLocation(latitude, longitude, maxResults);

        if (addresses.size() == 1) {
            return addresses.get(0);
        } else {
            return null;
        }
    }

И тогда я могу делать такие вещи. address.getLocality() и address.getPostalCode()

Но я хочу это название улицы. Как в "Поттерстрите 12". Когда я печатаю AddressLine (0) и AddressLine (1), я получаю только почтовый индекс, город и страну.

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

Ответы

Ответ 1

Пробовали ли вы использовать getAddressLine? См. здесь для получения дополнительной информации об этом методе

Что-то вроде этого должно делать (непроверено):

for (int i = 0; i < addresses.getMaxAddressLineIndex(); i++) {
 Log.d("=Adress=",addresses.getAddressLine(i));
}

Ответ 2

Попробуйте что-то подобное в вашем коде

String cityName=null;              
Geocoder gcd = new Geocoder(getBaseContext(),Locale.getDefault());               
List<Address>  addresses;    
try {    
   addresses = gcd.getFromLocation(location.getLatitude(), location  
                   .getLongitude(), 1);    
   if (addresses.size() > 0) 
        StreetName=addresses.get(0).getThoroughfare();
        String s = longitude+"\n"+latitude +  
        "\n\nMy Currrent Street is: "+StreetName; 
         Toast.makeText(getApplicationContext(), s, Toast.LENGTH_LONG).show();

он работает для меня:-) Удачи, -)

Ответ 3

Если у вас есть полный адрес (город + улица),

address.getAddressLine(0)

вы найдете название и номер улицы.

Ответ 4

getFromLocation тоже не работал. Есть несколько шагов, которые вы можете предпринять.

1. Сначала перейдите в gradle и убедитесь, что вы используете последнюю версию игровых сервисов.

2. Не уточняйте, причина, по которой я не получил результатов, заключается в том, что мне пришлось много информации в моем адресе. Когда я удалял почтовый индекс, я получал результаты каждый раз.

3. Попробуйте онлайн-api:  http://maps.google.com/maps/api/geocode/json?address=192%20McEwan%20Dr%20E,%20Caledon,%20ON&sensor=false Просто замените адрес там своим.

Удачи.

Ответ 5

У меня была очень похожая проблема, но с именем страны, это функция, в которой я закончил:

function getCountry(results) {
    var geocoderAddressComponent,addressComponentTypes,address;
    for (var i in results) {
      geocoderAddressComponent = results[i].address_components;
      for (var j in geocoderAddressComponent) {
        address = geocoderAddressComponent[j];
        addressComponentTypes = geocoderAddressComponent[j].types;
        for (var k in addressComponentTypes) {
          if (addressComponentTypes[k] == 'country') {
            return address.long_name;
          }
        }
      }
    }
   return 'Unknown';
 }

Вы должны уметь адаптировать это, чтобы получить название улицы без особых проблем.

Вдохновленный этим ответом

Ответ 6

Geocoder gcd = new Geocoder(this, Locale.getDefault());
List<Address> addresses = 
                gcd.getFromLocation(currentLatitude, currentLongitude,100);
if (addresses.size() > 0 && addresses != null) {
                StringBuilder result = new StringBuilder();
                myaddress.setText(addresses.get(0).getFeatureName()+"-"+addresses.get(0).getLocality()+"-"+addresses.get(0).getAdminArea()+"-"+addresses.get(0).getCountryName());
}
  • getfeaturename() return Streetname
  • getlocality() return city
  • getadminarea() return State

Что все..!