Android geocoder ubicación inversa – forma fiable para obtener la ciudad?

He buscado bastante sin suerte hasta ahora.

El Android Geocoder devuelve el objeto android.location.Address . La ciudad, por lo que he entendido, debe ser devuelto en getLocality() . Parece que en Estados Unidos esto funciona bien, fuera no.

Estoy escribiendo una aplicación internacional y luchar para encontrar una solución para averiguar la ciudad de una geolocalización.

Aquí la producción de República Checa / Praga:

 Address[addressLines= [0:"Psohlavců 1764/2", 1:"147 00 Prague-Prague 4", 2:"Czech Republic"], feature=2, admin=Hlavní město Praha, sub-admin=Prague, locality=null, thoroughfare=Psohlavců, postalCode=147 00, countryCode=CZ, countryName=Czech Republic, hasLatitude=true, latitude=50.0276543, hasLongitude=true, longitude=14.4183926, phone=null, url=null, extras=null] 

locality es nula, la ciudad está dentro de sub-admin ! La dirección en sí está bien, por lo que el servidor de geocoder parece conocer la ciudad.

Aquí algunos ejemplos al azar de la UE pero la localidad funciona en parte:

 Address[addressLines=[0:"Nad lesem 440/34",1:"147 00 Prague-Prague 4",2:"Czech Republic"],feature=34,admin=Hlavní město Praha,sub-admin=Prague,locality=null,thoroughfare=Nad lesem,postalCode=147 00,countryCode=CZ,countryName=Czech Republic,hasLatitude=true,latitude=50.02424,hasLongitude=true,longitude=14.4117568,phone=null,url=null,extras=null] Address[addressLines=[0:"Hauner Straße 4",1:"84431 Heldenstein",2:"Germany"],feature=4,admin=null,sub-admin=null,locality=Heldenstein,thoroughfare=Hauner Straße,postalCode=84431,countryCode=DE,countryName=Germany,hasLatitude=true,latitude=48.2540274,hasLongitude=true,longitude=12.3413535,phone=null,url=null,extras=null] Address[addressLines=[0:"Igler Straße",1:"6020 Innsbruck",2:"Austria"],feature=Igler Straße,admin=Tyrol,sub-admin=Innsbruck,locality=Innsbruck,thoroughfare=Igler Straße,postalCode=6020,countryCode=AT,countryName=Austria,hasLatitude=true,latitude=47.2465698,hasLongitude=true,longitude=11.4054237,phone=null,url=null,extras=null] Address[addressLines=[0:"Durnberg 24",1:"5724 Stuhlfelden",2:"Austria"],feature=24,admin=Salzburg,sub-admin=Zell am See District,locality=null,thoroughfare=Durnberg,postalCode=5724,countryCode=AT,countryName=Austria,hasLatitude=true,latitude=47.3233373,hasLongitude=true,longitude=12.4960482,phone=null,url=null,extras=null] Address[addressLines=[0:"U Roháčových kasáren 14",1:"100 00 Prague 10",2:"Czech Republic"],feature=14,admin=Hlavní město Praha,sub-admin=Prague,locality=Prague 10,thoroughfare=U Roháčových kasáren,postalCode=null,countryCode=CZ,countryName=Czech Republic,hasLatitude=true,latitude=50.0704092,hasLongitude=true,longitude=14.4673473,phone=null,url=null,extras=null] 

Tal vez la culpa está en mí, pero para mí parece que dependiendo del país y el área de la ciudad se encuentra en diferentes campos. Sin embargo, la dirección en sí misma parece ser lo suficientemente buena como para enviar una carta postal.

¿Ha escrito alguien una función inteligente que intenta hacer más sentido de los resultados de Geocoder? Es una lástima ver que Google tiene la información almacenada pero no la proporciona correctamente.

Para cerrar mi pregunta, lo solucioné con una solución. Utilizando la sugerencia de dannyroa

 String city="unknown"; if (address.getLocality() != null) city=address.getLocality(); else if (address.getSubAdminArea() != null) city=address.getSubAdminArea(); 

Esto podría ampliarse aún más al extraer la información de la ciudad de la segunda línea de dirección. Quitar el código postal y tomar el resto, pero esta información no es única dentro de una ciudad y podría cambiar dependiendo del distrito / zona.

  • Fragmento dinámico de Android Google Maps en el soporte de RecyclerView
  • Cómo utilizar el API AutocompleteFilter de Android Places
  • NullPointerException cuando se utiliza RelativeLayout como InfoWindow personalizado
  • ¿Cómo descargar servicios antiguos de google play?
  • Phonegap Android Internet no funciona
  • Creación de OnDragListener para Google Map v2 Fragment
  • Administración de las claves API de Google Maps
  • Etiqueta dentro de Polyline Google Maps V3
  • Registro de errores googlemaps: clave api no encontrada
  • Comportamiento extraño de una actividad en diferentes versiones de Android: el mapa parpadea
  • Añadir Marcador en Android Google Map mediante toque o toque
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.