2011-12-28 2 views
14

Android의 지오 코딩을 사용하여 현재 도시를 Address.getLocality() 메소드로 가져옵니다. 최근에는 지역에 대해 null을 반환하는 것처럼 보일 때까지 정상적으로 작동했습니다.Android 역 지오 코딩 getLocality가 종종 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); 
    } 

이 이제 먼저 반환 주소에 대해 다음과 같은 메시지를 기록합니다 : 다음은 그 예이다

소재지 널 (주소 [addressLines = [0 : "14-18 공원 비스타", 1 : "London 런던 그리니치 자치구 SE10", 2 : "UK"], 기능 =, admin = null, sub-admin = null, 지역 = null, 도로 안내 = Park Vista, postalCode = null, countryCode = GB, countryName = United 왕국, hasLatitude = true, 위도 = 51.4819069, hasLongitude = true, 경도 = -6.327E-4, 전화 = null, url = null, 추가 = null]

일부 지역은 해당 지역의 도시를 반환하지만 옆의 위치는 그렇지 않습니다.

그래서 전에는 잘 작동하지 않았습니다. 실제로 이전에는 null이 발견되지 않았습니다. 그래서 Google의 지오 코딩 서비스가 변경되었을 것입니다. 어떤 일이 벌어지고 있는지, 그리고이 상황은 영구적입니까? 그렇다면 어떤 위치에서 도시를 결정하는 가장 좋은 방법은 무엇입니까?

답변

4

가 지금은 캐나다 온타리오 주 해밀턴에 살고

나는 온타리오, 그리고 getSubLocality() 반환 해밀턴을 getLocality() 반환 널 (null) 것으로 나타났습니다 및 getAdminArea() 반환 (해밀턴 나의 도시, 온타리오 지방입니다). ch

4

매우 자주 getLocality()는 목록의 첫 번째 주소에 대해 Geocoder에서 반환 한 null을 반환합니다.
한편 올바른 도시명은 다음 주소의 지역성에 있습니다.
그래서 나는이 해결 방법을 사용하고 있으며 대도시 잘 작동 : 코드 조각에 대한

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

감사합니다. 이것은 null 값을 갖는 것보다 낫습니다. :) – Alex