Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.d4mdp.plesir.util;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import com.google.android.gms.maps.model.LatLng;
- 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>>();
- ArrayList<String> direction=new ArrayList<String>();
- for(int a=0;a<jLegs.length();a++){
- JSONObject json_data=jLegs.getJSONObject(a);
- JSONObject json_data2=json_data.getJSONObject("distance");
- direction.add(json_data2.getString("text"));
- //System.out.println(json_data);
- //System.out.println(direction.get(a));
- }
- /** 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 : 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;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement