carolajnn
carolajnn

Reputation: 25

how to get lng and lat from JSON file

I would like to get "lat" and "lng" from my JSON file and add to one array that keeps GeoPoint. I was trying to do it like that but it is not working for me :

protected List<GeoPoint> JsonArray(){
        List<GeoPoint> endp = new ArrayList<GeoPoint>();

        try{
        JSONObject obj = new JSONObject(json);
        JSONArray steps = obj.getJSONArray("routes");
        for(int i=0;i<steps.length();i++){
            JSONObject temp = steps.getJSONObject(i);
            JSONObject ele = temp.optJSONObject("steps").optJSONObject("end_location");
            ele.getJSONObject("lat");
            ele.getJSONObject("lng");

            double lat = Double.parseDouble(ele.getJSONObject("lat").toString());
            double lng = Double.parseDouble(ele.getJSONObject("lng").toString());
            endp.add(new GeoPoint((int)(lat *1E6),(int)(lng * 1E6)));

        }



        }catch (JSONException e) {
            // TODO: handle exception
        }
        return endp;
    }

Here's a part of how looks my JSON file:

{
       "routes" : [
          {
             "bounds" : {
                "northeast" : {
                   "lat" : 41.87999000000001,
                   "lng" : -87.615020
                },
                "southwest" : {
                   "lat" : 29.74674000000001,
                   "lng" : -95.361220
                }
             },
             "copyrights" : "Dane do Mapy ©2013 Google",
             "legs" : [
                {
                   "distance" : {
                      "text" : "1 085 mil",
                      "value" : 1746457
                   },
                   "duration" : {
                      "text" : "16 godz. 39 min",
                      "value" : 59955
                   },
                   "end_address" : "1362 Chenevert Street, Houston, Teksas 77003, Stany Zjednoczone",
                   "end_location" : {
                      "lat" : 29.750110,
                      "lng" : -95.36016000000001
                   },
                   "start_address" : "138-230 South Columbus Drive, Chicago, Illinois 60601, Stany Zjednoczone",
                   "start_location" : {
                      "lat" : 41.87999000000001,
                      "lng" : -87.62075000000002
                   },
                   "steps" : [
                      {
                         "distance" : {
                            "text" : "338 stóp",
                            "value" : 103
                         },
                         "duration" : {
                            "text" : "1 min",
                            "value" : 9
                         },
                         "end_location" : {
                            "lat" : 41.88090,
                            "lng" : -87.62069000000001
                         },
                         "html_instructions" : "Kieruj się \u003cb\u003eS Columbus Dr\u003c/b\u003e na \u003cb\u003epółnoc\u003c/b\u003e w stronę \u003cb\u003eE Monroe St\u003c/b\u003e",
                         "polyline" : {
                            "points" : "}tr~FtlxuOuA@w@@QMUA"
                         },
                         "start_location" : {
                            "lat" : 41.87999000000001,
                            "lng" : -87.62075000000002
                         },
                         "travel_mode" : "DRIVING"
                      },
                      {
                         "distance" : {
                            "text" : "0,2 mil",
                            "value" : 266
                         },
                         "duration" : {
                            "text" : "1 min",
                            "value" : 33
                         },
                         "end_location" : {
                            "lat" : 41.88086000000001,
                            "lng" : -87.61750000000001
                         },
                         "html_instructions" : "Skręć \u003cb\u003ew prawo\u003c/b\u003e w \u003cb\u003eE Monroe St\u003c/b\u003e",
                         "polyline" : {
                            "points" : "szr~FhlxuO?SAyA?_B@yA?iBAaB?WBE@C@A?C?A@A?C?y@?_@"
                         },
                         "start_location" : {
                            "lat" : 41.88090,
                            "lng" : -87.62069000000001
                         },
                         "travel_mode" : "DRIVING"
                      },
                      {
                         "distance" : {
                            "text" : "2,0 mil",
                            "value" : 3186
                         },
                         "duration" : {
                            "text" : "3 min",
                            "value" : 180
                         },
                         "end_location" : {
                            "lat" : 41.85320,
                            "lng" : -87.61470000000001
                         },
                         "html_instructions" : "Skręć \u003cb\u003ew prawo\u003c/b\u003e w \u003cb\u003eU.S. 41 S\u003c/b\u003e",
                         "polyline" : {
                            "points" : "kzr~FjxwuOpMOZ@`PO|ACvDC@?lDCZAfMGjAA`@Av@?^?P?N@P@j@LRFNDRJRHZRb@\\b@^nAjA@@JJXXb@b@z@v@RRp@`@RLr@Xn@Np@J`A@bBOp@Kv@K@?@?@A@?@?@?@?PEvBWxB]fDq@xA]jF_BTIj@QpGuBd@OBAf@SrDyAPGNG@AVKbA_@~@]|@]z@Y`F{AtCy@fHyB"
                         },
                         "start_location" : {
                            "lat" : 41.88086000000001,
                            "lng" : -87.61750000000001
                         },
                         "travel_mode" : "DRIVING"
                      },
                      {
                         "distance" : {
                            "text" : "0,4 mil",
                            "value" : 581
                         },
                         "duration" : {
                            "text" : "1 min",
                            "value" : 30
                         },
                         "end_location" : {
                            "lat" : 41.848390,
                            "lng" : -87.614670
                         },
                         "html_instructions" : "Zjedź \u003cb\u003eInterstate 55 S\u003c/b\u003e w kierunku \u003cb\u003eSaint Louis\u003c/b\u003e",
                         "polyline" : {
                            "points" : "omm~FzfwuOVDPAN?VGlBk@b@M@?JEDAVI`A[dBi@`A[z@UPGZGf@E\\Ab@@VDJBHBTFTHRJPNRNLL\\f@NXLTP\\BF"
                         },
                         "start_location" : {
                            "lat" : 41.85320,
                            "lng" : -87.61470000000001
                         },
                         "travel_mode" : "DRIVING"
                      },

Does anyone knows how can I do it in other way?

Upvotes: 0

Views: 1064

Answers (2)

ρяσѕρєя K
ρяσѕρєя K

Reputation: 132982

parse current json String as to get lat and lng :

JSONObject obj = new JSONObject(json);
        JSONArray steps = obj.getJSONArray("routes");
        for(int i=0;i<steps.length();i++){
            JSONObject temp = steps.getJSONObject(i);

             // get bounds JSONObject 
            JSONObject boundsjsonobj = temp.getJSONObject("bounds");
             // get northeast JSONObject
            JSONObject jsonboj_bounds_northeast= boundsjsonobj.getJSONObject("northeast");
            // get northeast lng and lat 
             String str_northeast_lat=jsonboj_bounds_northeast.getString("lat");
             String str_northeast_lng=jsonboj_bounds_northeast.getString("lng");
             // get southwest JSONObject
             JSONObject jsonboj_bounds_southwest= boundsjsonobj.getJSONObject("southwest");
            // get northeast lng and lat 
             String str_southwest_lat=jsonboj_bounds_southwest.getString("lat");
             String str_southwest_lng=jsonboj_bounds_southwest.getString("lng");

             //get legs JsonArray from routes
             JSONArray jsonarray_legs = temp.getJSONArray("legs");
             for(int j=0;j<jsonarray_legs.length();j++){
                JSONObject jobjlegs = jsonarray_legs.getJSONObject(j);
                 // get end_location json object

                 JSONObject jobjlegs_end_location = jobjlegs.getJSONObject("end_location");
                  String str_end_location_lat==jobjlegs_end_location.getString("lat");
                  String str_end_location_lng==jobjlegs_end_location.getString("lng");

                  // get start_address object


                 JSONObject jobjlegs_start_address = jobjlegs.getJSONObject("start_address");
                  String str_start_address_lat==jobjlegs_start_address.getString("lat");
                  String str_start_address_lng==jobjlegs_start_address.getString("lng");

                  // get steps jsonArray
                  JSONArray jsonarray_steps = jobjlegs.getJSONArray("steps");
                  for(int k=0;k<jsonarray_steps.length();k++){
                JSONObject jobjsteps = jsonarray_steps.getJSONObject(k);

                    // get end_location jsonobject
                     JSONObject jobjsteps_end_location = jobjsteps.getJSONObject("end_location");
                       double latend = Double.parseDouble(jobjsteps_end_location.getString("lat"));
                       double lngend = Double.parseDouble(jobjsteps_end_location.getString("lng"));
                       endp.add(new GeoPoint((int)(latend *1E6),(int)(lngend * 1E6)));

                     // get start_location jsonobject
                     JSONObject jobjsteps_start_location = jobjsteps.getJSONObject("start_location");
                       double latstart = Double.parseDouble(jobjsteps_start_location.getString("lat"));
                       double lngstart = Double.parseDouble(jobjsteps_start_location.getString("lng"));
                  }

             }

        }

Upvotes: 1

Kim Hansson
Kim Hansson

Reputation: 501

Your variable JSONArray steps = obj.getJSONArray("routes"); does not represent the "steps" part of the JSON object, but rather the "routes" part.

Also, you have skipped some of the levels in the JSON hierarchy. With the given JSON, you would need the following steps to traverse the JSON (I have omitted looping over the different arrays, except for the routes array)

JSONArray routes = obj.getJSONArray("routes");
for(int i=0; i < routes.length(); i++){
    // Grab the first route
    JSONObject route = routesArray.getJSONObject(i);
    // Take all legs from the route
    JSONArray legs = route.getJSONArray("legs");
    // Grab first leg
    JSONObject leg = legs.getJSONObject(0);
    // Take all steps from the leg
    JSONArray steps = leg.getJSONArray("steps");
    // Grab first step
    JSONObject step = steps.getJSONObject(0);

    JSONObject endLocation = step.getJSONObject("end_location");
    String lat = endLocation.getString("lat");
    String lng = endLocation.getString("lng");

Reference: JSON parsing of Google Maps API in Android App

Upvotes: 2

Related Questions