我正在使用google autocomplete位置api在我的應用中搜索位置,現在我想獲取我搜索的位置的經度和緯度。如何獲取自動填充返回的結果緯度和經度放置在Android谷歌API?從自動完成位置api返回的place_id獲取Lat Lang
回答
在地址自動填充響應中返回的每個地方都有一個Id和一個參考字符串,如here所解釋的。
二者必選其一(最好標識,因爲參考不建議使用)來查詢有關該地點的完整信息的地方API(包括緯度/經度): https://developers.google.com/places/documentation/details#PlaceDetailsRequests
關於希亞姆的評論 - 如果你有一個地理編碼只會工作自動完成響應中的完整地址並非總是如此。此外,地理編碼提供了可能的結果列表,因爲您在自動填充響應中獲得的地點說明不是唯一的。根據您的需求,地理編碼可能就足夠了。
地理編碼是一個非常間接的解決方案,就像第二個響應者說的,如果你做「Apple Store」,它可能不會返回完整的地址。相反:
Place_ID包含您需要的一切。我假設你知道如何從Places API獲取place_id(如果沒有,他們有一個完整的例子)。
然後,使用place_id本文檔以下拉該地點的信息(包括下的幾何形狀部分緯度和經度)的第二請求: https://developers.google.com/places/documentation/details?utm_source=welovemapsdevelopers&utm_campaign=mdr-devdocs
這對於獲取某個地方的完整數據非常有用。 – karenms 2017-11-03 22:30:04
Google Place Details就是答案。
從place_id
你有,查詢詳細地點像https://maps.googleapis.com/maps/api/place/details/json?placeid={placeid}&key={key}
,你可以從result.geometry.location
JSON得到lat
和lng
。
這個片段允許根據所述標識符返回到自動完成
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());
}
}
價獲得位置的緯度和經度: - https://developers.google.com/places/android/place-details#get-place 上述鏈接給出了一個位置目標將有lat和長。地點對象是從地方自動完成的地方派生的。
它採用谷歌Places API的爲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 for Android的方法的完整列表,從一個地方獲取數據
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獲取經緯度和朗。
@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());
}
}
}
通過上面的代碼,就可以得到經緯度以及字符串的地址。在任何你想要的地方使用LatLng。
- 1. Google Places API未返回place_id
- 2. 自動完成textview google地方api描述 - > place_id
- 3. 即使將lat long設置爲其他位置,地點自動完成總是返回芝加哥結果
- 4. 。位置自動完成
- 5. 從php/mysql獲取值自動完成
- 6. QScintilla從自動完成獲取QStringlist
- 7. 從JQUERY獲取ID自動完成
- 8. 獲取自動完成
- 9. jQuery的自動完成返回數組
- 10. jQueryUI的的自動完成HTML位置
- 11. 移動jQueryUI自動完成位置
- 12. 谷歌地圖bangalore的自動完成位置API
- 13. 自動完成不返回輸出
- 14. php自動完成返回複選框
- 15. jQuery自動完成 - 返回多個值
- 16. jQueryUI自動完成返回404
- 17. jQuery與Django自動完成返回404
- 18. primefaces自動完成選擇返回null
- 19. jquery自動完成返回值
- 20. jquery自動完成返回數據
- 21. Yammer /自動完成/排名返回401
- 22. jquery自動完成不返回值val()
- 23. 檢索國家/地區的位置lang/lat列表
- 24. 谷歌地圖自動完成提示不匹配而返回的位置
- 25. 從jQuery自動完成發回價值返回到PHP
- 26. 自動完成代碼位置問題
- 27. UITextView自動完成氣泡位置
- 28. ASP.NET MVC自動完成位置?
- 29. jquery-ui自動完成位置
- 30. JQuery UI自動完成位置
使用地理編碼器。請參閱:http://developer.android.com/reference/android/location/Geocoder.html – shyam 2014-09-19 08:06:15
當前的API不允許通過一個請求來完成它,因爲它可以通過Web API進行。請注意https://issuetracker.google。com/issues/35828699來請求在預測響應中暴露的座標。 – AlexKorovyansky 2018-02-01 07:32:09