android - 来自 google direction API 的 JSON 解析

标签 android json parsing direction

我想在谷歌地图上逐步解析从起点到终点的方向。对于解析,我使用以下链接:

Google Map Direction API

在那个链接我想解析“maneuver”json 数组。

我怎样才能从那个 json 文件中得到一步一步的指导,我应该在哪里更改我的代码?? 提前谢谢... 除此之外,我的代码显示如下:

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;    

        try {           

            jRoutes = jObject.getJSONArray("routes");

            /** Traversing all routes */
            for(int i=0;i<jRoutes.length();i++){            
                jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs");
                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;
    }   



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

最佳答案

首先你要了解JSONArray & JSONObject,可以关注android-json-parsing-tutorial用于 JSON 解析。

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;    

    try {           

        jRoutes = jObject.getJSONArray("routes");

        /** Traversing all routes */
        for(int i=0;i<jRoutes.length();i++){            
            jLegs = ( (JSONArray)jRoutes.get(i)).getJSONArray("legs");
            List path = new ArrayList<HashMap<String, String>>();

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

                /** Traversing all steps */
                for(int k=0;k<jSteps.length();k++){

                    String html_instructions = jSteps.get(k).getString("html_instructions");
                    String travel_mode = jSteps.get(k).getString("travel_mode");
                    String maneuver = jSteps.get(k).getString("maneuver");

                    String distance_text = jSteps.get(k).getJSONObject("distance").getString("text");
                    String distance_value = jSteps.get(k).getJSONObject("distance").getString("value");

                    String duration_text = jSteps.get(k).getJSONObject("duration").getString("text");
                    String duration_value = jSteps.get(k).getJSONObject("duration").getString("value");

                    String start_lat = jSteps.get(k).getJSONObject("start_location").getString("lat");
                    String start_lon = jSteps.get(k).getJSONObject("start_location").getString("lng");

                    String end_lat = jSteps.get(k).getJSONObject("end_location").getString("lat");
                    String end_lon = jSteps.get(k).getJSONObject("end_location").getString("lng");

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

关于android - 来自 google direction API 的 JSON 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21986750/

相关文章:

android - Android 是否支持 RTP/AVP/TCP?

android - 为什么我的计费服务没有被调用?

php - UTF-8 中的值在 JSON 中被编码为 NULL

c - 解析两个数字 - 高位数字和个位数字

java - 在Android中更新CSV文件后更新Listview

Android SharedPreferences 值未在 BroadcastReceiver 中更新

jquery - 将希腊语与 JSON 结合使用

javascript - 将动态生成的对象数组传递给 onclick 处理程序

python - 使用 Python 查找电子邮件正文中的链接

c++ - RapidXML 以深度优先模式解析 XML