web-dev-qa-db-fra.com

Obtenez la latitude, la longitude de l'adresse en Android

Je veux obtenir la latitude et la longitude d'un lieu à partir d'une adresse. Je ne veux pas obtenir la latitude et la longitude du GPS ni du réseau.

Je veux que l'utilisateur puisse taper dans TextView l'adresse de l'endroit qu'il veut (par exemple son bureau) et en dessous du champ de texte, certaines suggestions seront affichées, tout comme lorsque vous tapez l'adresse dans l'application google maps. Ensuite, je veux récupérer les coordonnées de l'adresse donnée.

Si cela ne peut pas être fait, existe-t-il un moyen d'obtenir l'adresse via l'application Google Maps elle-même. Peut-être que je pourrais appeler les gmaps depuis mon application et l'utilisateur tapera l'adresse et les gmaps retourneront les coordonnées.

Comment puis-je le faire?

15
Christos Baziotis

L'API Geocoder fournie dans le Android Framework

J'ai déjà travaillé avec le API de géocodage qui existe dans le Android API mais cela ne fonctionne pas sur tous les appareils. En fait, selon mes expériences et celles d'autres, un de nombreux appareils renverront null lors de l'utilisation de l'API de géocodage.

Pour cette raison, j'ai choisi d'utiliser le géocodeur inversé qui fonctionne parfaitement sur tous les appareils, mais nécessite une surcharge supplémentaire en raison de la demande HTTP.

Récupération de la longitude et de la latitude d'une adresse à l'aide de l'API de géocodage inversé

Pour éviter ce problème, il suffit d'utiliser Reverse Geocoding API qui renvoie un objet JSON.

Vous pouvez soit utiliser l'API pour rechercher une adresse via la latitude et la longitude, soit rechercher la latitude et la longitude à partir d'une adresse:

http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true_or_false

Retour:

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "1600",
               "short_name" : "1600",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Amphitheatre Pkwy",
               "short_name" : "Amphitheatre Pkwy",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Mountain View",
               "short_name" : "Mountain View",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Santa Clara",
               "short_name" : "Santa Clara",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "94043",
               "short_name" : "94043",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
         "geometry" : {
            "location" : {
               "lat" : 37.42291810,
               "lng" : -122.08542120
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 37.42426708029149,
                  "lng" : -122.0840722197085
               },
               "southwest" : {
                  "lat" : 37.42156911970850,
                  "lng" : -122.0867701802915
               }
            }
         },
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}

Par la présente, il suffit d'envoyer une requête HTTP à l'API de géocodage inversé avec une adresse entrée par l'utilisateur, puis d'analyser l'objet JSON pour trouver les données dont vous avez besoin.

Un article précédent décrit comment n objet JSON peut être analysé à partir d'une URL .

J'espère que cela t'aides.

16
Demitrian

Vous pouvez utiliser la méthode ci-dessous:

        Geocoder coder = new Geocoder(this);
    try {
        ArrayList<Address> adresses = (ArrayList<Address>) coder.getFromLocationName("Your Address", 50);
        for(Address add : adresses){
            if (statement) {//Controls to ensure it is right address such as country etc.
                double longitude = add.getLongitude();
                double latitude = add.getLatitude();
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
9
Orkun Koçyiğit
/**
 * @method getLocationFromAddress
 * @param strAddress Address/Location String
 * @desc Get searched location points from address and plot/update on map.
 */
public void getLocationFromAddress(String strAddress)
{
    //Create coder with Activity context - this
    Geocoder coder = new Geocoder(this);
    List<Address> address;

    try {
        //Get latLng from String
        address = coder.getFromLocationName(strAddress,5);

        //check for null
        if (address == null) {
            return;
        }

        //Lets take first possibility from the all possibilities.
        Address location=address.get(0);
        LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());

        //Put marker on map on that LatLng
        Marker srchMarker = mMap.addMarker(new MarkerOptions().position(latLng).title("Destination").icon(BitmapDescriptorFactory.fromResource(R.drawable.bb)));

        //Animate and Zoon on that map location
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        mMap.animateCamera(CameraUpdateFactory.zoomTo(15));

    } catch (IOException e)
    {
        e.printStackTrace();
    }
}
2
Rahul Raina

Ce dont vous avez besoin est: http://developer.Android.com/reference/Android/location/Geocoder.html .

Vous pouvez l'utiliser comme ça:

List<Address> result = new Geocoder(context).getFromLocationName(locationName, maxResults);

Vous obtiendrez une liste de Address et vous pourrez ensuite appeler getLatitude et getLongitude sur ces adresses.

0
Brtle