Получить Lat Lang из place_id, возвращенного автозаполнением api

Я ищу место в своих приложениях, используя автозаполнение google api, и теперь я хочу получить широту и долготу того места, которое я искал. Как получить широту и долготу из результата, возвращаемого автозаполнением api в google в android?

Следующий фрагмент кода, который использует API Google Places для android, работал для меня

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

Посетите Google Places API для Android, чтобы получить полный список методов для извлечения данных из места

Сведения о Google Place – это ответ.

Из place_id вы получите запрос «Детали места», например https://maps.googleapis.com/maps/api/place/details/json?placeid={placeid}&key={key} и вы можете получить lat и lng из result.geometry.location JSON.

Каждое место, возвращенное в место, ответ автозаполнения имеет Id и ссылочную строку, как описано здесь .

Используйте либо (желательно Id, поскольку ссылка устарела), чтобы запросить API-интерфейс Places для получения полной информации об этом месте (включая lat / lng): https://developers.google.com/places/documentation/details#PlaceDetailsRequests

Что касается комментария shyam – геокодирование будет работать, только если вы получили полный адрес в ответе автозаполнения, что не всегда так. Также геокодирование дает список возможных результатов, поскольку описание места, которое вы получаете в ответе автозаполнения, не уникально. В зависимости от ваших потребностей геокодирования может быть достаточно.

Ссылка: https://developers.google.com/places/android/place-details#get-place . Вышеупомянутая ссылка дает объект места, который будет иметь длину и длину. Объект места деактивирован из места, который получает от автозаполнения места.

Геокодирование – очень косвенное решение, и, как сказал второй ответчик, если вы делаете «Apple Store», он не может вернуть полный адрес. Вместо:

Place_ID содержит все необходимое. Я предполагаю, что вы знаете, как получить place_id из API Places (у них есть полный пример, если нет).

Затем вытащите второй запрос для деталей места (включая широту и долготу в разделе геометрии), используя place_id, следуя этой документации: https://developers.google.com/places/documentation/details?utm_source=welovemapsdevelopers&utm_campaign=mdr-devdocs

Этот фрагмент позволяет получить широту и долготу места в соответствии с идентификатором обратно в автоматическое завершение

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

Используйте этот метод для получения lat и lang из placeid.