2012-06-18 18 views
14

Cómo obtener el nombre del país en Android, si se conocen las coordenadas geográficas? ¿Cómo hacerlo de la manera más simple?Obtener el país desde las coordenadas?

+0

Hay varias maneras de hacerlo: http://stackoverflow.com/questions/6922312/get-location-name-from-fetched-coordinates – gunar

Respuesta

13

Uso continuación Función para eso.

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

Añadir continuación permiso a su manifiesta uso

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

Su código tiene un error. Algunas veces, del 'lat' y' lng', no tienes dirección. Lo que significa que 'address.get (0)' genera la excepción 'IndexOutOfBound'. – allenlsy

24

Aquí tiene

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

este uso

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

esto en el archivo de manifiesto

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

cómo lo hice hace poco era leer el datos de la URL de la API web y análisis el JSON.

Un ejemplo de URL para el punto (40.714224, -73.961452) es:

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

que produce el siguiente resultado:

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

encuentro GSON a ser bastante buena para analizar JSON en Android .

Cuestiones relacionadas