studio setmylocationenabled google geolocalizacion demos current android google-maps google-maps-android-api-2 latitude-longitude google-places-api

android - setmylocationenabled - google maps api demos



obtener Lat Lang de un place_id devuelto por autocompletar lugar api (8)

Estoy buscando el lugar en mis aplicaciones usando la API de autocompletar de Google y ahora quiero obtener la latitud y la longitud del lugar que he buscado. ¿Cómo obtener la latitud y la longitud del resultado devuelto por la API de autocompletar lugar en Google en Android?


Cada lugar devuelto en la respuesta de autocompletar lugar tiene una Id y una cadena de referencia como se explica here .

Utilice cualquiera (preferiblemente Id ya que la referencia está en desuso) para consultar la API de Places para obtener la información completa sobre ese lugar (incluido lat / lng): https://developers.google.com/places/documentation/details#PlaceDetailsRequests

Con respecto al comentario de shyam: la codificación geográfica solo funcionará si tienes una dirección completa en la respuesta de autocompletar, que no siempre es el caso. Además, la codificación geográfica ofrece una lista de resultados posibles, ya que la descripción del lugar que obtienes en la respuesta de autocompletar no es única. Dependiendo de sus necesidades, la geocodificación podría ser suficiente.


El siguiente fragmento de código que usa la API de Google Places para Android funcionó para mí

Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId) .setResultCallback(new ResultCallback<PlaceBuffer>() { @Override public void onResult(PlaceBuffer places) { if (places.getStatus().isSuccess()) { final Place myPlace = places.get(0); LatLng queriedLocation = myPlace.getLatLng(); Log.v("Latitude is", "" + queriedLocation.latitude); Log.v("Longitude is", "" + queriedLocation.longitude); } places.release(); } });

Visite la API de Google Places para Android para obtener una lista completa de métodos para recuperar datos de un lugar


Este fragmento permite obtener la latitud y la longitud de un lugar de acuerdo con el identificador en el autocompletar

public class PlacesDetails { private static final String PLACES_API_BASE = "https://maps.googleapis.com/maps/api/place"; private static final String TYPE_AUTOCOMPLETE = "/autocomplete"; private static final String TYPE_DETAIL = "/details"; private static final String OUT_JSON = "/json"; //private static final String API_KEY = "------------ make your specific key ------------; // cle pour le serveur public PlacesDetails() { // TODO Auto-generated constructor stub } public ArrayList<Double> placeDetail(String input) { ArrayList<Double> resultList = null; HttpURLConnection conn = null; StringBuilder jsonResults = new StringBuilder(); try { StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_DETAIL + OUT_JSON); sb.append("?placeid=" + URLEncoder.encode(input, "utf8")); sb.append("&key=" + API_KEY); URL url = new URL(sb.toString()); //Log.e("url", url.toString()); System.out.println("URL: "+url); System.out.println("******************************* connexion au serveur *****************************************"); //Log.e("nous sommes entrai de test la connexion au serveur", "test to connect to the api"); conn = (HttpURLConnection) url.openConnection(); InputStreamReader in = new InputStreamReader(conn.getInputStream()); // Load the results into a StringBuilder int read; char[] buff = new char[1024]; while ((read = in.read(buff)) != -1) { jsonResults.append(buff, 0, read); } System.out.println("le json result"+jsonResults.toString()); } catch (MalformedURLException e) { //Log.e(LOG_TAG, "Error processing Places API URL", e); return resultList; } catch (IOException e) { //Log.e(LOG_TAG, "Error connecting to Places API", e); return resultList; } finally { if (conn != null) { conn.disconnect(); } System.out.println("******************************* fin de la connexion*************************************************"); } try { // Create a JSON object hierarchy from the results //Log.e("creation du fichier Json", "creation du fichier Json"); System.out.println("fabrication du Json Objet"); JSONObject jsonObj = new JSONObject(jsonResults.toString()); //JSONArray predsJsonArray = jsonObj.getJSONArray("html_attributions"); JSONObject result = jsonObj.getJSONObject("result").getJSONObject("geometry").getJSONObject("location"); System.out.println("la chaine Json "+result); Double longitude = result.getDouble("lng"); Double latitude = result.getDouble("lat"); System.out.println("longitude et latitude "+ longitude+latitude); resultList = new ArrayList<Double>(result.length()); resultList.add(result.getDouble("lng")); resultList.add(result.getDouble("lat")); System.out.println("les latitude dans le table"+resultList); } catch (JSONException e) { ///Log.e(LOG_TAG, "Cannot process JSON results", e); } return resultList; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub PlacesDetails pl = new PlacesDetails(); ArrayList<Double> list = new ArrayList<Double>(); list = pl.placeDetail("ChIJbf7h4osSYRARi8SBR0Sh2pI"); System.out.println("resultat de la requette"+list.toString()); } }


La geocodificación es una solución muy indirecta, y como dijo el segundo respondedor, si hace "Apple Store" puede que no devuelva la dirección completa. En lugar:

Place_ID contiene todo lo que necesitas. Supongo que sabes cómo obtener el place_id de la API de Places (tienen un ejemplo completo si no es así).

A continuación, obtenga una segunda solicitud para los detalles del lugar (incluida la latitud y la longitud en la sección de geometría) utilizando el place_id que sigue a esta documentación: https://developers.google.com/places/documentation/details?utm_source=welovemapsdevelopers&utm_campaign=mdr-devdocs



Google Place Details es la respuesta.

Desde el place_id que obtuviste, consulta los detalles de lugar como https://maps.googleapis.com/maps/api/place/details/json?placeid={placeid}&key={key} y puedes obtener lat and lng de result.geometry.location JSON.


Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId) .setResultCallback(new ResultCallback<PlaceBuffer>() { @Override public void onResult(PlaceBuffer places) { if (places.getStatus().isSuccess() && places.getCount() > 0) { final Place myPlace = places.get(0); Log.i(TAG, "Place found: " + myPlace.getName()); LatLng latlangObj = myPlace.getLatLng(); Log.v("latitude:", "" + latlangObj.latitude); Log.v("longitude:", "" + latlangObj.longitude); } else { Log.e(TAG, "Place not found"); } places.release(); } });

Utiliza este método para obtener lat y lang de placeid.


@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == Constant.REQUEST_LOCATION_CODE) { Place place = PlaceAutocomplete.getPlace(this, data); if (place != null) { LatLng latLng = place.getLatLng(); mStringLatitude = String.valueOf(latLng.latitude); mStringLongitude = String.valueOf(latLng.longitude); EditTextAddress.setText(place.getAddress()); } } }

Con el código anterior, puede obtener la LatLng y la dirección de Cadena. Use LatLng donde quiera.