2012-12-21 158 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!"); 
     } 

只要將這個代碼你得到經度和緯度值後。