como calcular a distância e duração para vários locais usando Distância Matrix ou outras APIs do Google?

votos
0

Eu quero calcular a distância eo tempo para o cenário a seguir,

Start Point : A 
            A to 1(via)(2 km)(2 min)
            A to 2(via)(5 km)(7 min)
            A to 3(via)(8 km)(13 min)
            A to B(16 km)(22 min)
End Point  : B

por causa disso eu recebo o caminho através de matriz de distância, em seguida, Google Map retorna o menor estabelecida caminho entre os pontos.

Mas eu não quero mais curto, eu quero calcular via.

Por favor, diga-me sugestão ou forma adequada.

Publicado 26/07/2016 em 06:58
fonte usuário
Em outras línguas...                            


1 respostas

votos
0
public class DirectionsJSONParser {

    /**
     * Receives a JSONObject and returns a list of lists containing latitude and longitude
     */
    public List<List<HashMap<String, String>>> parse(JSONObject jObject) {

        List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String, String>>>();
        JSONArray jRoutes = null;
        JSONArray jLegs = null;
        JSONArray jSteps = null;
        String jdist;

        try {

            jRoutes = jObject.optJSONArray("routes");

            /** Traversing all routes */
            for (int i = 0; i < jRoutes.length(); i++) {
                jLegs = ((JSONObject) jRoutes.get(i)).getJSONArray("legs");

Isto lhe dará todos os caminhos aqui. Verifique o Log para completo JSON

                Log.d("TAGTAG2", jLegs.getJSONObject(0).toString());

                Final_maps.distance = Math.ceil(jLegs.getJSONObject(0).getJSONObject("distance").optInt("value"));
                List path = new ArrayList<HashMap<String, String>>();

                /** Traversing all legs */
                for (int j = 0; j < jLegs.length(); j++) {
                    jSteps = ((JSONObject) jLegs.get(j)).getJSONArray("steps");

                    /** Traversing all steps */
                    for (int k = 0; k < jSteps.length(); k++) {
                        String polyline = "";
                        polyline = (String) ((JSONObject) ((JSONObject) jSteps.get(k)).get("polyline")).get("points");
                        List<LatLng> list = decodePoly(polyline);

                        /** Traversing all points */
                        for (int l = 0; l < list.size(); l++) {
                            HashMap<String, String> hm = new HashMap<String, String>();
                            hm.put("lat", Double.toString(((LatLng) list.get(l)).latitude));
                            hm.put("lng", Double.toString(((LatLng) list.get(l)).longitude));
                            path.add(hm);
                        }
                    }
                    routes.add(path);
                }
            }

        } catch (JSONException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }

        return routes;
    }

    /**
     * Method to decode polyline points
     * Courtesy : http://jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java
     */
    private List<LatLng> decodePoly(String encoded) {

        List<LatLng> poly = new ArrayList<LatLng>();
        int index = 0, len = encoded.length();
        int lat = 0, lng = 0;

        while (index < len) {
            int b, shift = 0, result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lat += dlat;

            shift = 0;
            result = 0;
            do {
                b = encoded.charAt(index++) - 63;
                result |= (b & 0x1f) << shift;
                shift += 5;
            } while (b >= 0x20);
            int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
            lng += dlng;

            LatLng p = new LatLng((((double) lat / 1E5)),
                    (((double) lng / 1E5)));
            poly.add(p);
        }

        return poly;
    }
}
Respondeu 26/07/2016 em 07:35
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more