Obtener Lat Lang de un place_id devuelto por autocompletar lugar api

Estoy buscando el lugar en mis aplicaciones utilizando el google autocomplete api lugar y ahora quiero obtener latitud y longitud del lugar que he buscado. ¿Cómo obtener la latitud y la longitud del resultado devuelto por autocompletar lugar api por google en android?

El siguiente fragmento de código que utiliza 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(); } }); 

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

Google Place Details es la respuesta.

Desde el place_id que obtuvo, consulte Detalles de lugar como https://maps.googleapis.com/maps/api/place/details/json?placeid={placeid}&key={key} y puede obtener el lat y el lng de result.geometry.location JSON.

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

Utilice cualquiera (preferiblemente Id ya que la referencia está obsoleta) para consultar la información completa sobre ese lugar (incluyendo lat / lng): https://developers.google.com/places/documentation/details#PlaceDetailsRequests

Respecto al comentario de shyam – Geocoding funcionará sólo si tiene una dirección completa en la respuesta de autocompletado que no siempre es el caso. También Geocoding da una lista de posibles resultados ya que la descripción de lugar que obtiene en la respuesta de autocompletado no es única. Dependiendo de sus necesidades, la geocodificación podría ser suficiente.

Ref: – https://developers.google.com/places/android/place-details#get-place El enlace anterior da un objeto de lugar que tendrá lat y largo. El objeto de lugar se desvía de placeid que uno obtiene de lugar autocomplete.

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

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

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

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

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

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

  • Cómo dibujar una ruta utilizando diferentes valores long lat?
  • Plaza en blanco en Google Maps
  • Las API de Google lanzan error de no-crunch para android
  • Utilice google map en cualquier dispositivo. (Sin jugar de google)
  • Diferencia de versión de la API de Google Maps
  • ¿API de Google Play Services de Google para GPS solamente?
  • InfoWindow (Google Maps) captura de un evento de cierre de la ventana
  • Dibujar línea punteada en google maps v2 en lugar de sólido
  • Android Maps: Error de instalación: INSTALL_FAILED_MISSING_SHARED_LIBRARY
  • Android Google Maps - fondo personalizado detrás de todos los marcadores
  • Android "No se pudo encontrar el estilo 'mapViewStyle' en el tema actual" error
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.