studio longitude latitude google geocoder from address android reverse-geocoding

longitude - Android devuelve la geocodificación getLocality a menudo nula



google maps get address from coordinates android (2)

Estoy usando la geocodificación de Android para obtener la ciudad actual con el método Address.getLocality (). Ha funcionado bien, hasta hace poco parece que a menudo vuelve nulo para la localidad. Aquí hay un ejemplo:

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 para la primera dirección devuelta:

Localidad nula (Dirección [addressLines = [0: "14-18 Park Vista", 1: "London Borough of Greenwich, London SE10", 2: "UK"], feature =, admin = null, sub-admin = null, locality = nulo, vía = 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 = nulo])

Algunas ubicaciones devuelven la ciudad en la localidad, mientras que una ubicación cercana no lo hace.

Así que funcionó 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?


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

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


Noté que, con mucha frecuencia, getLocality () devuelve un valor nulo 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 la siguiente 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; }