1

我最近开始在 Android 上编程。在我的应用程序中,我想用文字告诉用户他们的位置,例如:“华盛顿”或“纽约”。我已经看到我可以得到纬度和经度,但我想用文字(可能是一个字符串)来告诉位置。

我可以做吗?如果可以,怎么做?

准确到多少?它可以给我城市的名称还是只给我州的名称?

谢谢您的帮助!

4

3 回答 3

1

这是一个完整的示例代码,使用 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;
}
于 2013-01-08T11:06:02.963 回答
1

您可以使用反向地理编码器来实现它。一个示例代码:

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!");
        }

只需在获得纬度和经度值后放置此代码。

于 2013-01-08T11:07:03.777 回答
-3

只要看看这个你会得到你想要的一切,

http://developer.android.com/training/basics/location/geocoding.html

于 2013-01-08T11:00:10.600 回答