2011-12-28 49 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园Vista的”,1: “伦敦 格林威治自治市镇,伦敦 SE10”,2:“UK”],feature =,admin = null,sub-admin = null,locality = null,通票= ParkVista,postalCode = null,countryCode = GB, countryName = United Kingdom,hasLatitude = true,latitude = 51.4819069,hasLongitude = true,longitude = -6.327E-4,phone = null,url = null,extras = null])

某些地点确实会在当地返回城市,而其旁边的位置不会。

所以它以前工作得很好,实际上我之前没有看到过一个空位置。所以我猜想Google的地理编码服务必须改变。任何想法正在发生,这种情况是永久的吗?如果是的话,从一个地点确定城市的最佳方式是什么?

回答

4

现在我住在加拿大,安大略省,汉密尔顿(汉密尔顿是我的城市,安大略省是省)

我注意到,getLocality()返回null,并getAdminArea()回报安大略和getSubLocality()回报汉密尔顿。 ch

4

我注意到,经常getLocality()返回由地址解析器返回的列表中的第一个地址。
另一方面,正确的城市名称留在下一个地址的地点。
所以我用这个解决方法,它可以很好地用于大城市:

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 2017-01-12 04:04:50