例如,此链接生成以下内容:
"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
},
我想只提取距离并在android中显示它
答案 0 :(得分:8)
要与Google地图保持距离,您可以使用Google Directions API和JSON解析器来检索距离值。
示例方法
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;
}
有关参数的详细信息以及有关可用选项的更多详细信息,请参阅此页。
https://developers.google.com/maps/documentation/directions/
答案 1 :(得分:2)
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;
}
}
我希望能帮到你!
答案 2 :(得分:1)
请查看以下链接。您可能会对它有所了解并自行尝试。
http://about-android.blogspot.in/2010/03/sample-google-map-driving-direction.html
您也可以使用Google Distance Matrix API
https://developers.google.com/maps/documentation/distancematrix/
答案 3 :(得分:1)
String url = getDirectionsUrl(pickupLatLng, dropLatLng);
new GetDisDur().execute(url);
使用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;
}
类 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();
}
}
}