Получение названия улицы из объекта 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
Что все..!