当在Android Maps Polyline中找不到路线时



i m使用以下代码从一个位置到另一个位置以获取多线线。在某些地方之间,找不到路线,并将无效值传递给AddPolyline。如何避免这种情况。是否有必须做的事情。或我们处理这种情况的其他方法。您的帮助将不胜感激。

class DirectionsJSONParser {
/** Receives a JSONObject and returns a list of lists containing latitude and longitude */
List<List<HashMap>> parse(JSONObject jObject){
List<List<HashMap>> routes = new ArrayList<>() ;
JSONArray jRoutes;
JSONArray jLegs;
JSONArray jSteps;
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<>();
        /** 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<>();
                    hm.put("lat", Double.toString((list.get(l)).latitude) );
                    hm.put("lng", Double.toString((list.get(l)).longitude) );
                    path.add(hm);
                }
            }
            routes.add(path);
        }
    }
} catch (JSONException e) {
    e.printStackTrace();
}catch (Exception e){
}

return routes;

}

您可以使用JSON响应的overview_polyline标签的值以获取编码格式的整个路径,而不是将其解码为List<LatLng>

...
JSONObject jsonRoot = new JSONObject(jsonStringBuilder.toString());
JSONArray jsonRoutes = jsonRoot.getJSONArray("routes");
if (jsonRoutes.length() >= 1) {
    JSONObject jsonRoute = jsonRoutes.getJSONObject(0);
    JSONObject overviewPolyline = jsonRoute.getJSONObject("overview_polyline");
    String overviewPolylineEncodedPoints = overviewPolyline.getString("points");
    routePoints = decodePoly(overviewPolylineEncodedPoints);
}
...
//
// 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<>();
    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;
}

您也可以使用PolyUtil类解码编码的各个群。

最新更新