2011-12-28 29 views
14

Tôi đang sử dụng Mã hóa địa lý trên Android để lấy thành phố hiện tại bằng phương thức Address.getLocality(). Nó đã làm việc tốt, cho đến gần đây nó dường như thường trả về null cho địa phương. Dưới đây là một ví dụ:Mã hóa địa lý đảo ngược của Android getLocality trả về thường là 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); 
    } 

này bây giờ đăng nhập được thông báo sau cho địa chỉ trở lại đầu tiên:

Địa phương null (Địa chỉ [addressLines = [0: "14-18 Vườn Vista", 1: "London Borough of Greenwich, London SE10", 2: "UK"], feature =, admin = null, sub-admin = null, locality = 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])

Một số địa điểm trả lại thành phố ở địa phương, trong khi vị trí bên cạnh thành phố thì không.

Vì vậy, nó đã làm việc tốt trước đây, thực sự tôi đã không nhìn thấy một địa phương không có trước đây. Vì vậy, tôi đoán điều gì đó phải thay đổi trong dịch vụ mã hóa địa lý của Google. Bất kỳ ý tưởng gì đang xảy ra, và tình trạng này có ổn định không? Nếu có, cách tốt nhất để xác định thành phố từ một địa điểm là gì?

Trả lời

4

Bây giờ tôi sống ở Canada, Ontario, Hamilton (Hamilton là thành phố của tôi, Ontario là tỉnh)

tôi nhận thấy rằng getLocality() trả về null, và getAdminArea() lợi nhuận Ontario, và getSubLocality() lợi nhuận Hamilton. ch

4

Tôi nhận thấy, thường getLocality() trả về null cho địa chỉ đầu tiên trong danh sách, được trả về bởi Geocoder.
Mặt khác, tên thành phố chính xác vẫn ở tại Địa phương của Địa chỉ tiếp theo.
Vì vậy, tôi đang sử dụng workaround này và nó hoạt động tốt cho các thành phố lớn:

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

Cảm ơn các đoạn. Điều này là tốt hơn so với có giá trị null :) – Alex

Các vấn đề liên quan