从自动填充位置api返回的place_id获取Lat Lang

我正在使用google autocomplete位置api在我的应用程序中search位置,现在我想获取我search的位置的经度和纬度。 如何从自动完成放置的API返回结果的纬度和经度谷歌在Android?

Solutions Collecting From Web of "从自动填充位置api返回的place_id获取Lat Lang"

下面的代码片段使用Android的Google Places API为我工作

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

访问适用于Android的Google Places API以获取从某个位置检索数据的完整方法列表

Google Place Details是答案。

从您获得的place_id查询地点详细信息,例如https://maps.googleapis.com/maps/api/place/details/json?placeid={placeid}&key={key} ,您可以从中获取latlng result.geometry.location JSON。

在place-autocomplete响应中返回的每个地方都有一个Id和一个引用string,如此处所述。

使用(最好是ID,因为引用已弃用)查询Places API以获取关于该地点的完整信息(包括lat / lng): https : //developers.google.com/places/documentation/details#PlaceDetailsRequests

关于shyam的评论 – 地理编码只有在自动完成响应中得到完整的地址时才会起作用,情况并非总是如此。 此外,地理编码提供了可能的结果列表,因为您在自动填充响应中获取的地点说明不是唯一的。 根据您的需要,地理编码可能就足够了。

地理编码是一个非常间接的解决scheme,就像第二个响应者所说,如果你做“苹果商店”,它可能不会返回完整的地址。 代替:

Place_ID包含您需要的一切。 我假设你知道如何从Places API获取place_id(如果没有的话,他们有一个完整的例子)。

然后使用以下文档中的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(); } }); 

使用此方法从placeid中获取lat和lang。