【问题标题】:JSON parsing from google direction API从谷歌方向 API 解析 JSON
【发布时间】:2014-03-26 01:20:33
【问题描述】:

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

Google Map Direction API

在那个链接我想解析“机动”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;
    }
}

【问题讨论】:

    标签: android json parsing direction


    【解决方案1】:

    首先你要了解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;
    } 
    

    【讨论】:

      猜你喜欢
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多