25

Tôi đang tìm kiếm địa điểm trong các ứng dụng của mình bằng cách sử dụng địa điểm tự động điền của google và bây giờ tôi muốn có được vĩ độ và kinh độ của địa điểm mà tôi đã tìm kiếm. Làm thế nào để có được vĩ độ và kinh độ từ kết quả trả về bởi tự động điền địa điểm api bởi google trong android?nhận Lat Lang từ một địa điểm_id được trả về bởi địa điểm tự động hoàn tất api

+0

Sử dụng bộ mã hóa địa lý. Tham khảo: http://developer.android.com/reference/android/location/Geocoder.html – shyam

+0

API hiện tại không cho phép thực hiện với một yêu cầu vì có thể với API Web. Vui lòng upvote https://issuetracker.google.com/issues/35828699 để yêu cầu tọa độ được hiển thị trong phản hồi dự đoán. – AlexKorovyansky

Trả lời

5

Mỗi địa điểm được trả về trong phản hồi tự động điền địa điểm có Id và chuỗi tham chiếu như được giải thích here.

Sử dụng một trong hai (tốt nhất là Id kể từ khi tham khảo bị phản đối) để truy vấn API Địa điểm cho các thông tin đầy đủ về vị trí đó (bao gồm lat/lng): https://developers.google.com/places/documentation/details#PlaceDetailsRequests

Về bình luận Shyam của - Mã hóa địa lý sẽ chỉ làm việc nếu bạn có một địa chỉ đầy đủ trong phản hồi tự động hoàn tất, không phải lúc nào cũng như vậy. Đồng thời mã hóa địa lý cung cấp danh sách các kết quả có thể do mô tả địa điểm bạn nhận được trong phản hồi tự động hoàn tất không phải là duy nhất. Tùy thuộc vào nhu cầu của bạn, mã hóa địa lý có thể là đủ.

1

Mã hóa địa lý là một giải pháp rất gián tiếp và giống như giải pháp trả lời thứ hai cho biết, nếu bạn làm "Cửa hàng Apple", nó có thể không trả lại địa chỉ đầy đủ. Thay vào đó:

Place_ID chứa mọi thứ bạn cần. Tôi giả sử bạn biết cách lấy place_id từ API Địa điểm (họ có một ví dụ đầy đủ nếu không).

Sau đó kéo một yêu cầu thứ hai cho các chi tiết nơi (bao gồm vĩ độ và kinh độ dưới phần hình học) sử dụng place_id sau tài liệu này: https://developers.google.com/places/documentation/details?utm_source=welovemapsdevelopers&utm_campaign=mdr-devdocs

+0

Điều này rất hữu ích để có được dữ liệu đầy đủ của một địa điểm. – karenms

20

Google Place Details là câu trả lời.

Từ place_id bạn đã nhận, truy vấn Place Chi tiết cái gì đó như https://maps.googleapis.com/maps/api/place/details/json?placeid={placeid}&key={key} và bạn có thể nhận được latlng từ result.geometry.location JSON.

0

đoạn này cho phép có được các vĩ độ và kinh độ của một nơi theo định trở lại vào tự động hoàn toàn

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

Sau đây đoạn mã trong đó sử dụng Google Places API for android làm việc cho tôi

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

Visit Google Places API for Android cho một danh sách đầy đủ các phương pháp để lấy dữ liệu từ một nơi

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

Sử dụng phương pháp này cho nhận được lat và lang từ placeid.

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

Với đoạn mã trên, bạn có thể lấy LatLng cũng như địa chỉ String. Sử dụng LatLng bất cứ nơi nào bạn muốn.

Các vấn đề liên quan