2012-08-24 12 views
7

Programuję aplikację na system Android, aby przekonwertować dynamicznie dostępne współrzędne szerokości i szerokości geograficznej do czytelnej dla człowieka lokalizacji.Konwersja współrzędnych GPS na miejscowość

Na przykład 12,2, 4,5 znajduje się w centrum Londynu, w Wielkiej Brytanii. Jeśli chodzi o szczegółowość, to chciałbym móc przynajmniej zlokalizować miasto-> miasto. Lub jeśli nie, przynajmniej miasto,

Czy ktoś może doradzić, jakie rozwiązania są dostępne dla tego problemu.

+0

Masz dwie poprawne odpowiedzi. Zaznacz odpowiedź jako poprawną, która ci pomogła. –

Odpowiedz

9

Spróbuj:

//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

myślę, że to da lepszy wynik:

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; 

} 
Powiązane problemy