2011-12-28 2 views
14

Я использую Android Geocoding, чтобы получить текущий город с помощью метода Address.getLocality(). Он работал нормально, и до недавнего времени он часто возвращал null для местоположения. Вот пример:Android обратное геокодирование 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); 
    } 

Теперь это входит следующее сообщение для первого возвращаемого адреса:

Местность нуль (Адрес [addressLines = [0: "14-18 Парк Виста", 1: "Лондон Город Гринвич, Лондон SE10", 2: "UK"], feature =, admin = null, sub-admin = null, locality = null, fullfare = Park Vista, postalCode = null, countryCode = GB, countryName = United Kingdom, hasLatitude = true, latitude = 51.4819069, hasLongitude = true, longitude = -6.327E-4, phone = null, url = null, extras = null])

Некоторые места возвращают город в населенном пункте, а рядом с ним нет.

Так что это действительно хорошо работало раньше, на самом деле я раньше не видел нулевой населенный пункт. Поэтому я предполагаю, что что-то должно измениться в службе геокодирования Google. Любая идея, что происходит, и является ли эта ситуация постоянной? Если да, то какой был бы лучший способ определить город из местоположения?

ответ

4

Сейчас я живу в Канаде, Онтарио, Гамильтон (Hamilton мой город, Онтарио является провинция)

Я заметил, что getLocality() возвращает нулевое значение, и getAdminArea() возвращается Онтарио, и getSubLocality() возвращается Гамильтон. ch

4

Я заметил, что очень часто 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; 
} 
+1

Спасибо за сниппета. Это лучше, чем нулевое значение :) – Alex

Смежные вопросы