2011-12-28 9 views
14

Sto usando Android Geocoding per ottenere la città corrente con il metodo Address.getLocality(). Ha funzionato bene, fino a poco fa sembra spesso restituire null per la località. Ecco un esempio:Geocodifica inversa Android getLocality restituisce spesso nullo

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

Questo ora registrato il seguente messaggio per il primo indirizzo restituito:

Località null (Indirizzo [addressLines = [0: "14-18 Park Vista", 1: "London Borough of Greenwich, London SE10", 2: "UK"], feature =, admin = null, sub-admin = null, località = null, thoroughfare = 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])

Alcune località restituiscono la città nella località, mentre una posizione accanto non lo fa.

Quindi ha funzionato bene prima, in realtà non avevo mai visto una località nulla prima. Quindi immagino che qualcosa debba essere cambiato nel servizio di geocodifica di Google. Qualche idea su cosa sta succedendo e questa situazione è permanente? Se sì, quale sarebbe il modo migliore per determinare la città da una posizione?

risposta

4

ora vivo in Canada, Ontario, Hamilton (Hamilton è la mia città, Ontario è la provincia)

ho notato che getLocality() restituisce NULL, e getAdminArea() ritorna Ontario, e getSubLocality() rendimenti Hamilton. ch

4

Ho notato che molto spesso getLocality() restituisce null per il primo indirizzo nell'elenco, restituito da Geocoder.
D'altra parte il nome corretto della città rimane in Località di un indirizzo successivo.
Così io sto usando questa soluzione e funziona bene per le grandi città:

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

Grazie per la snippet. È meglio che avere un valore nullo :) – Alex

Problemi correlati