在 Android 中与 Google Direction API 保持距离
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20979853/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Getting distance from Google Direction API in Android
提问by Breaking code
For example this link generate the following:
例如,此链接生成以下内容:
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : -20.1765204,
"lng" : 57.6137001
},
"southwest" : {
"lat" : -20.2921672,
"lng" : 57.4472155
}
},
"copyrights" : "Map data ?2014 Google",
"legs" : [
{
"distance" : {
"text" : "24.6 km",
"value" : 24628
},
i want to extract only the distance and display it in android
我只想提取距离并将其显示在 android 中
回答by Prem
To get a distance from a Google Maps you can use Google Directions API and JSON parser to retrieve the distance value.
要从 Google 地图获取距离,您可以使用 Google Directions API 和 JSON 解析器来检索距离值。
Sample Method
样品方法
private double getDistanceInfo(double lat1, double lng1, String destinationAddress) {
StringBuilder stringBuilder = new StringBuilder();
Double dist = 0.0;
try {
destinationAddress = destinationAddress.replaceAll(" ","%20");
String url = "http://maps.googleapis.com/maps/api/directions/json?origin=" + latFrom + "," + lngFrom + "&destination=" + latTo + "," + lngTo + "&mode=driving&sensor=false";
HttpPost httppost = new HttpPost(url);
HttpClient client = new DefaultHttpClient();
HttpResponse response;
stringBuilder = new StringBuilder();
response = client.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
int b;
while ((b = stream.read()) != -1) {
stringBuilder.append((char) b);
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
JSONObject jsonObject = new JSONObject();
try {
jsonObject = new JSONObject(stringBuilder.toString());
JSONArray array = jsonObject.getJSONArray("routes");
JSONObject routes = array.getJSONObject(0);
JSONArray legs = routes.getJSONArray("legs");
JSONObject steps = legs.getJSONObject(0);
JSONObject distance = steps.getJSONObject("distance");
Log.i("Distance", distance.toString());
dist = Double.parseDouble(distance.getString("text").replaceAll("[^\.0123456789]","") );
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return dist;
}
For details on parameters and more details on what are the different options available, please refer this.
有关参数的详细信息以及有关可用不同选项的更多详细信息,请参阅此处。
https://developers.google.com/maps/documentation/directions/
https://developers.google.com/maps/documentation/directions/
回答by Khalil_Java
public class ApiDirectionsAsyncTask extends AsyncTask<URL, Integer, StringBuilder> {
private static final String TAG = makeLogTag(ApiDirectionsAsyncTask.class);
private static final String DIRECTIONS_API_BASE = "https://maps.googleapis.com/maps/api/directions";
private static final String OUT_JSON = "/json";
// API KEY of the project Google Map Api For work
private static final String API_KEY = "YOUR_API_KEY";
@Override
protected StringBuilder doInBackground(URL... params) {
Log.i(TAG, "doInBackground of ApiDirectionsAsyncTask");
HttpURLConnection mUrlConnection = null;
StringBuilder mJsonResults = new StringBuilder();
try {
StringBuilder sb = new StringBuilder(DIRECTIONS_API_BASE + OUT_JSON);
sb.append("?origin=" + URLEncoder.encode("Your origin address", "utf8"));
sb.append("&destination=" + URLEncoder.encode("Your destination address", "utf8"));
sb.append("&key=" + API_KEY);
URL url = new URL(sb.toString());
mUrlConnection = (HttpURLConnection) url.openConnection();
InputStreamReader in = new InputStreamReader(mUrlConnection.getInputStream());
// Load the results into a StringBuilder
int read;
char[] buff = new char[1024];
while ((read = in.read(buff)) != -1){
mJsonResults.append(buff, 0, read);
}
} catch (MalformedURLException e) {
Log.e(TAG, "Error processing Distance Matrix API URL");
return null;
} catch (IOException e) {
System.out.println("Error connecting to Distance Matrix");
return null;
} finally {
if (mUrlConnection != null) {
mUrlConnection.disconnect();
}
}
return mJsonResults;
}
}
I hope that help you!
我希望对你有帮助!
回答by Gautam Surani
String url = getDirectionsUrl(pickupLatLng, dropLatLng);
new GetDisDur().execute(url);
Create URL using latlng
使用 latlng 创建 URL
private String getDirectionsUrl(LatLng origin, LatLng dest) {
String str_origin = "origin=" + origin.latitude + "," + origin.longitude;
String str_dest = "destination=" + dest.latitude + "," + dest.longitude;
String sensor = "sensor=false";
String mode = "mode=driving";
String parameters = str_origin + "&" + str_dest + "&" + sensor + "&" + mode;
String output = "json";
return "https://maps.googleapis.com/maps/api/directions/" + output + "?" + parameters;
}
Class GetDisDur
类GetDisDur
private class GetDisDur extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... url) {
String data = "";
try {
data = downloadUrl(url[0]);
} catch (Exception e) {
Log.d("Background Task", e.toString());
}
return data;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
JSONObject jsonObject = new JSONObject(result);
JSONArray routes = jsonObject.getJSONArray("routes");
JSONObject routes1 = routes.getJSONObject(0);
JSONArray legs = routes1.getJSONArray("legs");
JSONObject legs1 = legs.getJSONObject(0);
JSONObject distance = legs1.getJSONObject("distance");
JSONObject duration = legs1.getJSONObject("duration");
distanceText = distance.getString("text");
durationText = duration.getString("text");
} catch (JSONException e) {
e.printStackTrace();
}
}
}
回答by Android
Just check below link. You will probably get idea of it and try it on your own.
只需检查以下链接。您可能会了解它并自行尝试。
http://about-android.blogspot.in/2010/03/sample-google-map-driving-direction.html
http://about-android.blogspot.in/2010/03/sample-google-map-driving-direction.html
Also you can use Google Distance Matrix API
你也可以使用谷歌距离矩阵 API
https://developers.google.com/maps/documentation/distancematrix/
https://developers.google.com/maps/documentation/distancematrix/