2012-06-18 11 views
14

Jak uzyskać nazwę kraju w systemie Android, jeśli znane są współrzędne geograficzne? Jak zrobić to najprostszym sposobem?Uzyskaj kraj ze współrzędnych?

+0

Istnieje kilka sposobów na zrobienie tego: http://stackoverflow.com/questions/6922312/get-location-name- from-fetched-coordinates – gunar

Odpowiedz

13

skorzystać z poniższego funkcji dla tego.

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(); 
    } 
} 

Dodaj Poniżej Permission do oczywistego

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

Twój kod ma błąd. Czasami z 'lat' i' lng', nie masz adresu. Co oznacza, że ​​'address.get (0)' powoduje wyjątek 'IndexOutOfBound'. – allenlsy

24

Tu idziesz

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

stosowania tej

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(); 
    } 

użyć w pliku manifestu

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

Jak zrobiłem to niedawno było przeczytać dane z adresu URL interfejsu API sieci Web i parsowanie JSON.

Przykładem URL punktu (40.714224, -73,961452) wynosi:

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

która produkuje następujące dane wyjściowe:

{ 
    "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 ] 
    } 
    } ] 
} 

znajdę GSON się być całkiem dobry dla analizowania JSON w Androidzie .

Powiązane problemy