2012-06-18 19 views
14

Come ottenere il nome del paese in Android, Se si conoscono le coordinate geografiche? Come renderlo il modo più semplice?Ottieni paese dalle coordinate?

+0

Ci sono diversi modi per farlo: http://stackoverflow.com/questions/6922312/get-location-name-from-fetched-coordinates – gunar

risposta

13

Usa sotto funzione per questo.

public void getAddress(double lat, double lng) { 
    Geocoder geocoder = new Geocoder(HomeActivity.mContext, Locale.getDefault()); 
    try { 
     List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); 
     Address obj = addresses.get(0); 
     String add = obj.getAddressLine(0); 
     GUIStatics.currentAddress = obj.getSubAdminArea() + "," 
       + obj.getAdminArea(); 
     GUIStatics.latitude = obj.getLatitude(); 
     GUIStatics.longitude = obj.getLongitude(); 
     GUIStatics.currentCity= obj.getSubAdminArea(); 
     GUIStatics.currentState= obj.getAdminArea(); 
     add = add + "\n" + obj.getCountryName(); 
     add = add + "\n" + obj.getCountryCode(); 
     add = add + "\n" + obj.getAdminArea(); 
     add = add + "\n" + obj.getPostalCode(); 
     add = add + "\n" + obj.getSubAdminArea(); 
     add = add + "\n" + obj.getLocality(); 
     add = add + "\n" + obj.getSubThoroughfare(); 

     Log.v("IGA", "Address" + add); 
     // Toast.makeText(this, "Address=>" + add, 
     // Toast.LENGTH_SHORT).show(); 

     // TennisAppActivity.showDialog(add); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); 
    } 
} 

Aggiungere seguito permesso alla manifesta

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
+0

Il tuo codice ha un bug. A volte, da 'lat' e' lng', non hai un indirizzo. Il che significa che 'address.get (0)' solleva l'eccezione 'IndexOutOfBound'. – allenlsy

24

Qui si va

Geocoder gcd = new Geocoder(context, Locale.getDefault()); 
List<Address> addresses = gcd.getFromLocation(lat, lng, 1); 

    if (addresses.size() > 0) 
    { 
     String countryName=addresses.get(0).getCountryName(); 
    } 
3

uso questo

try { 
     Geocoder geo = new Geocoder(this.getApplicationContext(), Locale.getDefault()); 
     List<Address> addresses = geo.getFromLocation(location.getLatitude(), location.getLongitude(), 1); 
     if (addresses.isEmpty()) { 
      placeName.setText("Waiting for Location"); 
     } 
     else { 
      if (addresses.size() > 0) { 
       placeName.setText(addresses.get(0).getFeatureName() + ", " + addresses.get(0).getLocality() +", " + addresses.get(0).getAdminArea() + ", " + addresses.get(0).getCountryName()); 
      } 
     } 
    } 
    catch(Exception e){ 
     Toast.makeText(this, "No Location Name Found", 600).show(); 
    } 

uso questo file manifesto

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
2

come ho fatto di recente è stato quello di leggere il dati dall'URL dell'API Web e analisi il JSON.

Un esempio di URL per il punto (40,714,224 mila, -73,961452) è:

http://maps.google.com/maps/geo?q=40.714224,-73.961452&output=json&oe=utf8&sensor=true_or_false&key=your_api_key 

che produce il seguente output:

{ 
    "name": "40.714224,-73.961452", 
    "Status": { 
    "code": 200, 
    "request": "geocode" 
    }, 
    "Placemark": [ { 
    "id": "p1", 
    "address": "285 Bedford Ave, Brooklyn, NY 11211, USA", 
    "AddressDetails": { 
    "Accuracy" : 8, 
    "Country" : { 
     "AdministrativeArea" : { 
     "AdministrativeAreaName" : "NY", 
     "SubAdministrativeArea" : { 
      "Locality" : { 
       "DependentLocality" : { 
        "DependentLocalityName" : "Williamsburg", 
        "PostalCode" : { 
        "PostalCodeNumber" : "11211" 
        }, 
        "Thoroughfare" : { 
        "ThoroughfareName" : "285 Bedford Ave" 
        } 
       }, 
       "LocalityName" : "Brooklyn" 
      }, 
      "SubAdministrativeAreaName" : "Kings" 
     } 
     }, 
     "CountryName" : "USA", 
     "CountryNameCode" : "US" 
    } 
}, 
    "ExtendedData": { 
     "LatLonBox": { 
     "north": 40.7154779, 
     "south": 40.7127799, 
     "east": -73.9600584, 
     "west": -73.9627564 
     } 
    }, 
    "Point": { 
     "coordinates": [ -73.9614074, 40.7141289, 0 ] 
    } 
    } ] 
} 

trovo GSON di essere abbastanza buono per il parsing di JSON in Android .

Problemi correlati