我希望获得两个位置之间的总持续时间和距离以及航点。我使用的方法是给我距离和持续时间,但没有路标。所以任何人都可以帮助我吗?我的方法如下所示......
public String getDistance(final double lat1, final double lon1, final double lat2, final double lon2){
Thread thread=new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL("https://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lon1 + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric&mode=driving&key="+getResources().getString(R.string.google_maps_server_key));
final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
InputStream in = new BufferedInputStream(conn.getInputStream());
response = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
JSONObject jsonObject = new JSONObject(response);
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");
parsedDistance=distance.getString("text");
JSONObject duration= steps.getJSONObject("duration");
parsedDuration=duration.getString("text");
} catch (IOException | JSONException e) {
e.printStackTrace();
}
}
});
thread.start();
try {
thread.join();
Toast.makeText(this, parsedDistance + " Distance", Toast.LENGTH_SHORT).show();
Toast.makeText(this, parsedDuration + " Duration", Toast.LENGTH_SHORT).show();
} catch (InterruptedException e) {
e.printStackTrace();
}
return parsedDistance;
}
答案 0 :(得分:2)
public void parseJson(JSONObject jObject) {
List<List<HashMap<String, String>>> routes = new ArrayList<>();
JSONArray jRoutes;
JSONArray jLegs;
JSONArray jSteps;
JSONObject jDistance = null;
JSONObject jDuration = null;
long totalDistance = 0;
int totalSeconds = 0;
try {
jRoutes = jObject.getJSONArray("routes");
/* Traversing all routes */
for (int i = 0; i < jRoutes.length(); i++) {
jLegs = ((JSONObject) jRoutes.get(i)).getJSONArray("legs");
/* Traversing all legs */
for (int j = 0; j < jLegs.length(); j++) {
jDistance = ((JSONObject) jLegs.get(j)).getJSONObject("distance");
totalDistance = totalDistance + Long.parseLong(jDistance.getString("value"));
/** Getting duration from the json data */
jDuration = ((JSONObject) jLegs.get(j)).getJSONObject("duration");
totalSeconds = totalSeconds + Integer.parseInt(jDuration.getString("value"));
}
}
double dist = totalDistance / 1000.0;
Log.d("distance", "Calculated distance:" + dist);
int days = totalSeconds / 86400;
int hours = (totalSeconds - days * 86400) / 3600;
int minutes = (totalSeconds - days * 86400 - hours * 3600) / 60;
int seconds = totalSeconds - days * 86400 - hours * 3600 - minutes * 60;
Log.d("duration", days + " days " + hours + " hours " + minutes + " mins" + seconds + " seconds");
} catch (JSONException e) {
e.printStackTrace();
}
}
JSONObject jObject = new JSONObject(result);
parseJson(jObject);
答案 1 :(得分:0)
尝试下面的代码在Map Fragment和ArrayList points上绘制路径点=你从api响应点得到的数组listList
PolylineOptions rectOptions = new PolylineOptions();
LatLng polLatLng = null;
if (points.size() > 0) {
ArrayList<LatLng> pathPoint = new ArrayList<LatLng>();
for (int k = 0; k < points.size(); k++) {
double polLat = points.get(k).latitude;
double polLng = points.get(k).longitude;
pathPoint.add(new LatLng(polLat, polLng));
polLatLng = new LatLng(polLat, polLng);
}
double startLatitude = points.get(0).latitude;
double startLongitude = points.get(0).longitude;
double endLatitude = points.get(points.size() - 1).latitude;
double endLongitude = points.get(points.size() - 1).longitude;
LatLng start = new LatLng(startLatitude, startLongitude);
LatLng end = new LatLng(endLatitude, endLongitude);
mMap.addMarker(new MarkerOptions().position(start).title("start"));
mMap.addMarker(new MarkerOptions().position(end).title("end"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(polLatLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(10));
rectOptions.addAll(pathPoint);
rectOptions.width(10);
rectOptions.color(Color.BLUE);
mMap.addPolyline(rectOptions);
mMap是GoogleMap的对象。
答案 2 :(得分:-2)
此方法可帮助您从两点获得距离
Location.distanceBetween(double startLatitude, double startLongitude
,double endLatitude, double endLongitude, float[] results);