Ответ 1
Сейчас я живу в Канаде, Онтарио, Гамильтон (Гамильтон - мой город, Онтарио - провинция)
Я заметил, что getLocality()
возвращает null, а getAdminArea()
возвращает Ontario, а getSubLocality()
возвращает Hamilton. ч
Я использую Android Geocoding, чтобы получить текущий город с помощью метода Address.getLocality(). Он работал нормально, и до недавнего времени он часто возвращал null для местоположения. Вот пример:
try {
Geocoder c = new Geocoder(this, Locale.getDefault());
double lat = 51.481;
double lon = 0.0;
List<Address> l = c.getFromLocation(lat, lon, 5);
for (Address a: l) {
Log.i("GeocoderTest", "Locality " + a.getLocality() + " (" + a + ")");
}
} catch (IOException e) {
Log.e("GeocoderTest", "", e);
}
Теперь для журнала будет отправлено следующее сообщение:
Локальность null (Адрес [адресLines = [0: "14-18 Park Vista", 1: "Лондон Город Гринвич, Лондон SE10", 2: "UK" ], функция =, админ = NULL, суб-админ = NULL, местонахождение = нуль, проездом = Park Виста, PostalCode = нуль, COUNTRYCODE = GB, COUNTRYNAME = United Великобритания, hasLatitude = верно, широта = 51.4819069, hasLongitude = истина, долгота = -6.327E-4, телефон = нуль, URL = нуль, дополнительные = NULL])
Некоторые местоположения возвращают город в местности, а рядом с ним нет.
Таким образом, он работал очень хорошо раньше, на самом деле я раньше не видел нулевой локали. Поэтому, я думаю, что-то должно измениться в службе геокодирования Google. Любая идея, что происходит, и является ли эта ситуация постоянной? Если да, то каким будет лучший способ определить город из местоположения?
Сейчас я живу в Канаде, Онтарио, Гамильтон (Гамильтон - мой город, Онтарио - провинция)
Я заметил, что getLocality()
возвращает null, а getAdminArea()
возвращает Ontario, а getSubLocality()
возвращает Hamilton. ч
Я заметил, что очень часто getLocality() возвращает null для первого адреса в списке, возвращаемого Geocoder.
С другой стороны, правильное название города остается в Местности следующего адреса.
Поэтому я использую этот способ обхода и хорошо работает для больших городов:
private String getCityNameByCoordinates(double lat, double lon) throws IOException {
List<Address> addresses = mGeocoder.getFromLocation(lat, lon, 10);
if (addresses != null && addresses.size() > 0) {
for (Address adr : addresses) {
if (adr.getLocality() != null && adr.getLocality().length() > 0) {
return adr.getLocality();
}
}
}
return null;
}