how to get total distance and duration between two location along with waypoint in google map

孤街醉人 提交于 2019-12-11 07:22:13

问题


i want to get total duration and distance between two location along with waypoints. the methodwhich i'm using is giving me distance and duration but without waypoints. so can any one help me? my method look like below...

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

回答1:


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




回答2:


Try below code to draw way point on Map Fragment and ArrayList points = which you get from api response points arrayList

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 is the object of GoogleMap.




回答3:


This method will help you to get the distance from two points

   Location.distanceBetween(double startLatitude, double startLongitude
                             ,double endLatitude, double endLongitude, float[] results);


来源:https://stackoverflow.com/questions/43679802/how-to-get-total-distance-and-duration-between-two-location-along-with-waypoint

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!