121 votes

Comment trouver la latitude et la longitude d'une adresse ?

Je souhaite afficher l'emplacement d'une adresse dans Google Maps.

Comment obtenir la latitude et la longitude d'une adresse à l'aide de l'API Google Maps ?

0 votes

J'ai eu le même problème. Regardez ma solution ici. stackoverflow.com/a/19170557/2621050

147voto

ud_an Points 2875
public GeoPoint getLocationFromAddress(String strAddress){

Geocoder coder = new Geocoder(this);
List<Address> address;
GeoPoint p1 = null;

try {
    address = coder.getFromLocationName(strAddress,5);
    if (address==null) {
       return null;
    }
    Address location=address.get(0);
    location.getLatitude();
    location.getLongitude();

    p1 = new GeoPoint((double) (location.getLatitude() * 1E6),
                      (double) (location.getLongitude() * 1E6));

    return p1;
    }
}

strAddress est une chaîne de caractères contenant l'adresse. Le site address contient les adresses converties.

1 votes

Il jette le "java.io.IOException service non disponible".

4 votes

Vous devez avoir les bonnes permissions pour pouvoir accéder au service. <uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission Android:name="Android.permission.INTERNET" />

0 votes

Quelle version d'Android api vous construisez l'application vous devez avoir google api disponible j'ai construit avec google api 8. vérifiez que le dossier google api est là dans votre projet. et dans votre fichier manifest ajouter utilise la bibliothèque com.google.Android.maps

92voto

NayAnesh Gupte Points 451

La solution d'Ud_an avec les API mises à jour

Note : LatLng fait partie des services Google Play.

Obligatoire :

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

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

Mise à jour : Si vous avez le SDK 23 et plus, assurez-vous de prendre soin de la permission d'exécution pour l'emplacement.

public LatLng getLocationFromAddress(Context context,String strAddress) {

    Geocoder coder = new Geocoder(context);
    List<Address> address;
    LatLng p1 = null;

    try {
        // May throw an IOException
        address = coder.getFromLocationName(strAddress, 5);
        if (address == null) {
            return null;
        }

        Address location = address.get(0);
        p1 = new LatLng(location.getLatitude(), location.getLongitude() );

    } catch (IOException ex) {

        ex.printStackTrace();
    }

    return p1;
}

2 votes

Merci, ça a marché pour moi, la solution ci-dessus ne fonctionnait pas.

1 votes

Lorsque vous instanciez le Geocoder, vous devez passer le contexte Geocoder coder = new Geocoder(this) ; ou new Geocoder(getApplicationContext) not getActivity() comme indiqué dans la réponse.

1 votes

@Quantumdroid le code ci-dessus est écrit en fragment. Sinon, vous avez tout à fait raison. C'est le contexte.

53voto

Nirav Dangi Points 1655

Si vous voulez placer votre adresse sur la carte de Google, vous pouvez utiliser les moyens suivants

Intent searchAddress = new  Intent(Intent.ACTION_VIEW,Uri.parse("geo:0,0?q="+address));
startActivity(searchAddress);

OU

si vous avez besoin de connaître la longueur de votre adresse, utilisez alors Api Google Place suivant

créer une méthode qui renvoie un JSONObject avec la réponse de la Appel HTTP comme les suivants

public static JSONObject getLocationInfo(String address) {
        StringBuilder stringBuilder = new StringBuilder();
        try {

        address = address.replaceAll(" ","%20");    

        HttpPost httppost = new HttpPost("http://maps.google.com/maps/api/geocode/json?address=" + address + "&sensor=false");
        HttpClient client = new DefaultHttpClient();
        HttpResponse response;
        stringBuilder = new StringBuilder();

            response = client.execute(httppost);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }

        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject = new JSONObject(stringBuilder.toString());
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return jsonObject;
    }

passe maintenant que JSONObject à la méthode getLatLong() comme suit

public static boolean getLatLong(JSONObject jsonObject) {

        try {

            longitute = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
                .getJSONObject("geometry").getJSONObject("location")
                .getDouble("lng");

            latitude = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
                .getJSONObject("geometry").getJSONObject("location")
                .getDouble("lat");

        } catch (JSONException e) {
            return false;

        }

        return true;
    }

J'espère que cela vous aidera, ainsi que d'autres personnes ! Merci !

1 votes

Malheureusement, cette solution ne fonctionne pas avec la connexion mobile de certains opérateurs de téléphonie mobile : la demande renvoie toujours les informations suivantes SUR_LIMITE_DE_RECHERCHE . Ces opérateurs mobiles utilisent la surcharge NAT, en attribuant la même IP à de nombreux appareils...

0 votes

@UmbySlipKnot Pouvez-vous nous en dire plus sur OVER_QUERY_LIMIT ? Qu'est-ce que c'est ? Merci.

7voto

Neutrino Points 1

Le code suivant fonctionnera pour google apiv2 :

public void convertAddress() {
    if (address != null && !address.isEmpty()) {
        try {
            List<Address> addressList = geoCoder.getFromLocationName(address, 1);
            if (addressList != null && addressList.size() > 0) {
                double lat = addressList.get(0).getLatitude();
                double lng = addressList.get(0).getLongitude();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } // end catch
    } // end if
} // end convertAddress

Où l'adresse est la chaîne (123 Testing Rd City State zip) que vous voulez convertir en LatLng.

4voto

Rakesh Gondaliya Points 612

C'est ainsi que vous pouvez trouver la latitude et la longitude de l'endroit où nous avons cliqué sur la carte.

public boolean onTouchEvent(MotionEvent event, MapView mapView) 
{   
    //---when user lifts his finger---
    if (event.getAction() == 1) 
    {                
        GeoPoint p = mapView.getProjection().fromPixels(
            (int) event.getX(),
            (int) event.getY());

        Toast.makeText(getBaseContext(), 
             p.getLatitudeE6() / 1E6 + "," + 
             p.getLongitudeE6() /1E6 , 
             Toast.LENGTH_SHORT).show();
    }                            
    return false;
} 

cela fonctionne bien.

Pour obtenir l'adresse de l'emplacement, nous pouvons utiliser la classe geocoder.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X