【发布时间】:2012-12-21 18:48:48
【问题描述】:
我最近开始使用 Android 编程。在我的应用中,我想用文字告诉用户他们的位置,例如:“华盛顿”或“纽约”。我已经看到我可以得到纬度和经度,但我想用文字(可能是字符串)告诉位置。
我可以吗?如果可以,怎么做?
它的准确度是多少?它可以给我城市的名称还是只给我州的名称?
感谢您的帮助!
【问题讨论】:
标签: android location geocoding
我最近开始使用 Android 编程。在我的应用中,我想用文字告诉用户他们的位置,例如:“华盛顿”或“纽约”。我已经看到我可以得到纬度和经度,但我想用文字(可能是字符串)告诉位置。
我可以吗?如果可以,怎么做?
它的准确度是多少?它可以给我城市的名称还是只给我州的名称?
感谢您的帮助!
【问题讨论】:
标签: android location geocoding
这是一个完整的示例代码,它使用 Thread 和 Handler 在不阻塞 UI 的情况下获取 Geocoder 答案。
Geocoder调用过程,可以位于Helper类中
public static String getAddressFromLocation(final Location location, final Context context, final Handler handler)
{
Thread thread = new Thread() {
@Override public void run()
{
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
String result = null;
try {
List<Address> list = geocoder.getFromLocation(
location.getLatitude(), location.getLongitude(), 1);
if (list != null && list.size() > 0)
{
Address address = list.get(0);
// sending back first address line and locality
result = address.getAddressLine(0) + ", " + address.getLocality()+","+address.getCountryName();
}
}
catch (IOException e)
{
Log.e(TAG, "Impossible to connect to Geocoder", e);
}
}
};
thread.start();
return result;
}
【讨论】:
您可以使用反向geocoder 来实现它。一个示例代码:
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocation(latValue,
longValue, 1);
if (addresses != null) {
Address returnedAddress = addresses.get(0);
StringBuilder strReturnedAddress = new StringBuilder(
"Address:\n");
for (int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) {
strReturnedAddress
.append(returnedAddress.getAddressLine(i)).append(
"\n");
}
myAddress.setText(strReturnedAddress.toString());
} else {
myAddress.setText("No Address returned!");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
myAddress.setText("Canont get Address!");
}
只需在获得纬度和经度值后放置此代码即可。
【讨论】:
只要看看这个,你就会得到你想要的一切,
http://developer.android.com/training/basics/location/geocoding.html
【讨论】: