2012-12-21 128 views
1

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

我可以做到吗?如果可以的话,怎么样?

它有多少准确?它可以给我的城市名称还是只有国家?

谢谢你的帮助!

回答

1

下面是一个使用线程和处理程序来获取地理编码的答案,而不阻塞UI一个完整的示例代码。

地理编码调用程序,可以位于一个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; 
} 
1

可以使用反向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!"); 
     } 

只要将这个代码你得到经度和纬度值后。