2011-12-28 11 views
14

Estoy usando Android Geocoding para obtener la ciudad actual con el método Address.getLocality(). Ha funcionado bien, hasta hace poco, parece que a menudo devuelve nulo para la localidad. He aquí un ejemplo:Geocodificación inversa de Android getLocality devuelve a menudo nulo

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

Esto ahora registra el siguiente mensaje por primera dirección devuelta:

Localidad null (Dirección [addressLines = [0: "14-18 Park Vista", 1: "London Municipio de Greenwich, Londres SE10", 2: "UK"], función =, admin = null, subadministrador = null, localidad = null, vía = Parque 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])

Algunas ubicaciones devuelven la ciudad en la localidad, mientras que una ubicación junto a ella no.

Así que funcionó muy bien antes, en realidad no había visto una localidad nula antes. Así que supongo que algo debe haber cambiado en el servicio de geocodificación de Google. ¿Alguna idea de lo que está pasando, y esta situación es permanente? En caso afirmativo, ¿cuál sería la mejor manera de determinar la ciudad desde una ubicación?

Respuesta

4

ahora vivo en Canadá, Ontario, Hamilton (Hamilton es mi ciudad, Ontario es la provincia)

Noté que getLocality() vuelve nulo, y getAdminArea() vuelve Ontario, y getSubLocality() vuelve a Hamilton. ch

4

Me di cuenta de que muy a menudo getLocality() devuelve null para la primera dirección en la lista, devuelta por Geocoder.
Por otro lado, el nombre correcto de la ciudad permanece en la localidad de una próxima dirección.
Así que estoy usando esta solución y funciona bien para las grandes ciudades:

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

Gracias por el fragmento. Esto es mejor que tener valor nulo :) – Alex

Cuestiones relacionadas