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的地理编码服务肯定会发生一些变化.知道发生了什么,这种情况是永久性的吗?如果是的话,从一个位置确定城市的最佳方法是什么?
我注意到,通常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)
小智 7
现在我住在加拿大,安大略省,汉密尔顿(汉密尔顿是我的城市,安大略省是省)
我注意到getLocality()返回null,并getAdminArea()返回Ontario,并getSubLocality()返回Hamilton.CH
| 归档时间: |
|
| 查看次数: |
7280 次 |
| 最近记录: |