web-dev-qa-db-fra.com

Comment obtenir le nom de la ville par Latitude et Longitude dans Android?

Je veux le nom de la ville par emplacement actuel mais j'ai la latitude et la longitude. Comment l'obtenir? J'ai utilisé le bouton, puis j'ai obtenu une latitude et une longitude à double valeur. mon code ci-dessous.S'il vous plaît aidez-moi.

Merci!!

Button btnShowLocation;

    GPSTracker gps;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btnShowLocation = (Button) findViewById(R.id.btnShowLocation);

        // show location button click event
        btnShowLocation.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {       
                // create class object
                gps = new GPSTracker(AndroidGPSTrackingActivity.this);

                // check if GPS enabled     
                if(gps.canGetLocation()){

                    double latitude = gps.getLatitude();
                    double longitude = gps.getLongitude();

                    // \n is for new line
                    Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();    
                }else{

                    gps.showSettingsAlert();
                }

            }
        });

J'ai édité le code ci-dessous mais je ne reçois pas le nom de la ville, aidez-moi !!!

Button btnShowLocation;

    GPSTracker gps;
    String CityName;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btnShowLocation = (Button) findViewById(R.id.btnShowLocation);

        // show location button click event
        btnShowLocation.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // create class object
                gps = new GPSTracker(AndroidGPSTrackingActivity.this);

                // check if GPS enabled
                if (gps.canGetLocation()) {

                    double latitude = gps.getLatitude();
                    double longitude = gps.getLongitude();

                    Geocoder geocoder = new Geocoder(
                            AndroidGPSTrackingActivity.this, Locale
                                    .getDefault());
                    List<Address> addresses;
                    try {
                        Log.v("log_tag", "latitude" + latitude);
                        Log.v("log_tag", "longitude" + longitude);
                        addresses = geocoder.getFromLocation(latitude,
                                longitude, 1);
                        Log.v("log_tag", "addresses+)_+++" + addresses);
                        CityName = addresses.get(0).getAddressLine(0);
                        Log.v("log_tag", "CityName" + CityName);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    // \n is for new line
                    Toast.makeText(
                            getApplicationContext(),
                            "Your Location is - \nLat: " + latitude
                                    + "\nLong: " + longitude, Toast.LENGTH_LONG)
                            .show();
                } else {

                    gps.showSettingsAlert();
                }

            }
        });

Mais je reçois une erreur ci-dessous ::::

03-11 17:01:46.465: W/System.err(27587): Java.io.IOException: Service not Available
03-11 17:01:46.465: W/System.err(27587):    at Android.location.Geocoder.getFromLocation(Geocoder.Java:136)
03-11 17:01:46.465: W/System.err(27587):    at com.example.gpstracking.AndroidGPSTrackingActivity$1.onClick(AndroidGPSTrackingActivity.Java:81)
03-11 17:01:46.465: W/System.err(27587):    at Android.view.View.performClick(View.Java:4191)
03-11 17:01:46.475: W/System.err(27587):    at Android.view.View$PerformClick.run(View.Java:17229)
03-11 17:01:46.475: W/System.err(27587):    at Android.os.Handler.handleCallback(Handler.Java:615)
03-11 17:01:46.475: W/System.err(27587):    at Android.os.Handler.dispatchMessage(Handler.Java:92)
03-11 17:01:46.475: W/System.err(27587):    at Android.os.Looper.loop(Looper.Java:137)
03-11 17:01:46.475: W/System.err(27587):    at Android.app.ActivityThread.main(ActivityThread.Java:4960)
03-11 17:01:46.475: W/System.err(27587):    at Java.lang.reflect.Method.invokeNative(Native Method)
03-11 17:01:46.475: W/System.err(27587):    at Java.lang.reflect.Method.invoke(Method.Java:511)
03-11 17:01:46.475: W/System.err(27587):    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1038)
03-11 17:01:46.475: W/System.err(27587):    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:805)
03-11 17:01:46.475: W/System.err(27587):    at dalvik.system.NativeStart.main(Native Method)
03-11 17:02:21.335: W/IInputConnectionWrapper(27587): getSelectedText on inactive InputConnection
03-11 17:02:21.335: W/IInputConnectionWrapper(27587): setComposingText on inactive InputConnection
03-11 17:02:21.425: W/IInputConnectionWrapper(27587): getExtractedText on inactive InputConnection
30
crickpatel0024

Utilisez ceci:

 Geocoder geocoder = new Geocoder(this, Locale.getDefault());
 List<Address> addresses = geocoder.getFromLocation(MyLat, MyLong, 1);
 String cityName = addresses.get(0).getAddressLine(0);
 String stateName = addresses.get(0).getAddressLine(1);
 String countryName = addresses.get(0).getAddressLine(2);

Pour plus d'exemples détaillés sur Google Maps, vous pouvez consulter les liens ci-dessous: http://www.demoadda.com/demo/Android/load-googlemap_107

Et pour les mises à jour de l'emplacement en arrière-plan: http://www.demoadda.com/demo/Android/download-Android-background-location-update-service-demo_21

65
Kishan

Sur votre onClick, ajoutez ceci:

Geocoder gcd = new Geocoder(AndroidGPSTrackingActivity.this, Locale.getDefault());
List<Address> addresses = gcd.getFromLocation(latitude, longitude, 1);
if (addresses.size() > 0) 
    System.out.println(addresses.get(0).getLocality());
23
Mayank Saini
gps = new LocationAddress(getActivity());
if (gps.canGetLocation()) {
  double latitude = gps.getLatitude();
  double longitude = gps.getLongitude();
  Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault());
  //List<Address> addresses =geocoder.getFromLocation(latitude, longitude, 1);

  try {
    List < Address > addresses = geocoder.getFromLocation(latitude, longitude, 1);
    String address = addresses.get(0).getSubLocality();
    String cityName = addresses.get(0).getLocality();
    String stateName = addresses.get(0).getAdminArea();
    txt_paddress.setText(address);
    txt_city.setText(cityName);
    txt_state.setText(stateName);

  } catch (IOException e) {
    e.printStackTrace();
  }
} else {
  gps.showSettingsAlert();
}
9

Utilisez Geocoder. Passez la latitude et la longitude et obtenez le nom et l'adresse de la ville.

try {

    Geocoder geo = new Geocoder(this.getApplicationContext(), Locale.getDefault());
    List < Address > addresses = geo.getFromLocation(latitude, longitude, 1);
    if (addresses.isEmpty()) {
        addres.setText("Waiting for Location");
    } else {
        if (addresses.size() > 0) {
            addres.setText(addresses.get(0).getFeatureName() + ", " + addresses.get(0).getLocality() + ", " + addresses.get(0).getAdminArea() + ", " + addresses.get(0).getCountryName());
            //Toast.makeText(getApplicationContext(), "Address:- " + addresses.get(0).getFeatureName() + addresses.get(0).getAdminArea() + addresses.get(0).getLocality(), Toast.LENGTH_LONG).show();
        }
    }
} catch (Exception e) {
    e.printStackTrace(); // getFromLocation() may sometimes fail
}
2
Shadow

Pour mon pays (Vietnam) getLocality renverra null et addresses.get(0).getAddressLine(0) renverra le quartier pas ville

Je vais donc faire comme ça

Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);

int maxAddressLine = addresses.get(0).getMaxAddressLineIndex();

String countryName = addresses.get(0).getAddressLine(maxAddressLine);
String stateName = addresses.get(0).getAddressLine(maxAddressLine-1);
String cityName = addresses.get(0).getAddressLine(maxAddressLine-2);
1
Phan Van Linh