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?
- Mostrar la ubicación actual y los lugares cercanos y la ruta entre dos lugares con la API de Google Maps en Android
- Mostrar la información personalizada de InfoWindow para Android Maps Utility Library for Android
- Google maps glitch en los teléfonos Motorola
- Google Maps v2 Error de autorización. Diferentes SHA1
- Obtención de latitud y longitud de latlng objeto en android
- MapFragment devuelve null
- Mostrar el botón de direcciones en Google Map cuando se abre la ventana de información mediante programación
- Android Google Maps v2: ¿Cómo agregar un marcador con un fragmento de varias líneas?
- Calcular la distancia real recorrida por el móvil
- Acceso a la dirección de casa / trabajo almacenada en Google Maps ("Mi lugar")
- NoClassDefFoundError en la biblioteca Google Play Services V2
- ¿Por qué la firma no es válida en la API de Google Maps para Android?
- Google Maps Lite Mode causa jank en RecyclerView
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.
- La aplicación Phonegap se bloquea cuando cambia de orientación incluso con los cambios de AndroidManifest
- Uso del nuevo ID de Anunciante de Android en un SDK