Android反向地理编码getLocality通常返回null
Posted
技术标签:
【中文标题】Android反向地理编码getLocality通常返回null【英文标题】:Android reverse geocoding getLocality returns often null 【发布时间】:2012-01-29 12:24:39 【问题描述】:我正在使用 android 地理编码通过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);
这现在为第一个返回的地址记录以下消息:
Locality null (Address[addressLines=[0:"14-18 Park Vista",1:"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])
有些位置确实会返回当地的城市,而旁边的位置则不会。
所以它之前确实工作得很好,实际上我以前没有见过空位置。所以我想谷歌的地理编码服务一定发生了一些变化。知道发生了什么,这种情况是永久性的吗?如果是,从某个位置确定城市的最佳方法是什么?
【问题讨论】:
【参考方案1】:我注意到,getLocality() 通常会为列表中的第一个地址返回 null,由 Geocoder 返回。 另一方面,正确的城市名称保留在下一个地址的位置。 所以我正在使用这种解决方法,它适用于大城市:
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;
【讨论】:
感谢 sn-p。这比空值要好:) 感谢您的更新! @Leo Droidcoder 你有没有见过这也失败了?我的意思是所有地址都失败了? 可能会失败...发生在我身上 我的代码停在List<Address> addresses = mGeocoder.getFromLocation(lat, lon, 10);
。有什么问题?【参考方案2】:
现在我住在加拿大安大略省汉密尔顿(汉密尔顿是我的城市,安大略是省)
我注意到getLocality()
返回 null,getAdminArea()
返回安大略,getSubLocality()
返回 Hamilton。 ch
【讨论】:
【参考方案3】:在 Kotlin 中我做了类似的事情,给定地址 a
var place = a.locality
if (place == null) place = a.subLocality
if (place == null) place = a.subAdminArea
if (place == null) place = a.adminArea
它甚至适用于偏远地区
【讨论】:
【参考方案4】:使用 getSubAdminArea()
对我来说效果很好。
【讨论】:
以上是关于Android反向地理编码getLocality通常返回null的主要内容,如果未能解决你的问题,请参考以下文章