2012-08-24 42 views
7

我正在编程一个Android应用程序,将动态可用的纬度和经度坐标转换为人类可读的位置。如何将GPS坐标转换为地方

例如,12.2,4.5位于英国伦敦市中心。关于我希望能够找到的城市 - >城镇的粒度。或者,如果没有,至少该城市,

有人可以请告知什么解决方案可用于这个问题。

+0

你有两个正确的答案。将答案标记为对您有帮助的正确答案。 –

回答

9

尝试这种情况:

//listenner location changed 
private class MyLocListener implements LocationListener { 
    public void onLocationChanged(Location location) { 
     if (location != null) { 
     Log.d("LOCATION CHANGED", location.getLatitude() + ""); 
     Log.d("LOCATION CHANGED", location.getLongitude() + ""); 
     } 
    } 
} 

//Get address base on location 
try{ 
Geocoder geo = new Geocoder(youractivityclassname.this.getApplicationContext(), Locale.getDefault()); 
List<Address> addresses = geo.getFromLocation(latitude, longitude, 1); 
    if (addresses.isEmpty()) { 
     yourtextfieldname.setText("Waiting for Location"); 
    } 
    else { 
    if (addresses.size() > 0) {  
     Log.d(TAG,addresses.get(0).getFeatureName() + ", 
     " + addresses.get(0).getLocality() +", 
     " + addresses.get(0).getAdminArea() + ", 
     " + addresses.get(0).getCountryName()); 

    } 
    } 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 
0

我认为这会给出一个更好的结果:

private String convertLocationToAddress(Location location) { 
    String addressText; 
    String errorMessage = ""; 

    Geocoder geocoder = new Geocoder(getContext(), Locale.getDefault()); 

    List<Address> addresses = null; 

    try { 
     addresses = geocoder.getFromLocation(
       location.getLatitude(), 
       location.getLongitude(), 
       1 
     ); 
    } catch (IOException ioException) { 
     // Network or other I/O issues 
     errorMessage = getString(R.string.network_service_error); 
     Log.e(TAG, errorMessage, ioException); 
    } catch (IllegalArgumentException illegalArgumentException) { 
     // Invalid long/lat 
     errorMessage = getString(R.string.invalid_long_lat); 
     Log.e(TAG, errorMessage + ". " + 
       "Latitude = " + location.getLatitude() + 
       ", Longitude = " + 
       location.getLongitude(), illegalArgumentException); 
    } 

    // No address was found 
    if (addresses == null || addresses.size() == 0) { 
     if (errorMessage.isEmpty()) { 
      errorMessage = getString(R.string.no_address_found); 
      Log.e(TAG, errorMessage); 
     } 
     addressText = errorMessage; 

    } else { 
     Address address = addresses.get(0); 
     ArrayList<String> addressFragments = new ArrayList<>(); 

     // Fetch the address lines, join them, and return to thread 
     for (int i = 0; i <= address.getMaxAddressLineIndex(); i++) { 
      addressFragments.add(address.getAddressLine(i)); 
     } 
     Log.i(TAG, getString(R.string.address_found)); 
     addressText = 
       TextUtils.join(System.getProperty("line.separator"), 
         addressFragments); 
    } 

    return addressText; 

}