【问题标题】:how to calculate distance and duration for multiple locations using Distance Matrix or other google APIs?如何使用距离矩阵或其他谷歌 API 计算多个位置的距离和持续时间?
【发布时间】:2016-07-28 16:27:21
【问题描述】:

我想计算以下场景的距离和时间,

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

因此,我通过距离矩阵获得路径,然后谷歌地图返回最短的已建立点之间的路径。

但我不想最短,我想通过计算。

请告诉我提示或正确的方法。

【问题讨论】:

  • 有 Google Maps API v2。它以 JSON 格式返回带有名称、距离和时间的路径。使用折线将其绘制在地图上
  • 我怎样才能找到特定的位置距离和持续时间
  • 您可能需要深入研究一下 google 的 api 文档。你是什​​么意思计算通过?详细说明一下吧。

标签: android google-maps-android-api-2 google-directions-api google-distancematrix-api


【解决方案1】:
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");

这将为您提供此处的所有路径。检查日志以获取完整的 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;
    }
}

【讨论】:

  • 这个是距离矩阵api还是方向api
  • 这是我得到的 JSON 响应。 {"distance":{"text":"4.0 km","value":3950},"duration":{"text":"14 mins","value":832},"end_address":" .. ..........
  • 在 JSON 的末尾还有一个 ** "via_waypoint":[] ** 检查谷歌文档以获得解决方案。
  • 感谢您的支持。我如何才能仅找出 via_point 位置的距离和持续时间
  • 我还没有研究它。如果我遇到任何事情,我会告诉你的
猜你喜欢
  • 2011-09-21
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多