Android反向地理编码getLocality通常返回null

ket*_*rin 18 android reverse-geocoding

我使用Android Geocoding通过Address.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);
    }
Run Code Online (Sandbox Code Playgroud)

现在,它会为第一个返回的地址记录以下消息:

地点null(地址[addressLines = [0:"14-18 Park Vista",1:"London Green 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,经度= -6.327E-4,phone = null,url = null,额外=空])

有些地方确实返回了当地的城市,而旁边的地点却没有.

所以之前它确实工作得很好,实际上我以前没有看到过null的局部性.所以我想Google的地理编码服务肯定会发生一些变化.知道发生了什么,这种情况是永久性的吗?如果是的话,从一个位置确定城市的最佳方法是什么?

Leo*_*der 9

我注意到,通常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;
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的摘要。这比拥有null值要好:) (2认同)

小智 7

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

我注意到getLocality()返回null,并getAdminArea()返回Ontario,并getSubLocality()返回Hamilton.CH