Christian Garcia
Christian Garcia

Reputation: 59

How to extract lat lng from JSON using flutter?

I have a JSON data from REST API. How can we extract the lat lng ? I want it to store in array to use in Polylines.

Example JSON:

{"routes":[{"legs":[{"summary":"","weight":825.2,"duration":596.9,"steps":[],"distance":2394},{"summary":"","weight":756.9,"duration":560.6,"steps":[],"distance":2948.2}],"weight_name":"routability","weight":1582.1,"duration":1157.5,"distance":5342.2}],"waypoints":[{"hint":"UeT4id7k-IkeAAAAdQEAAAAAAAAAAAAASjFaQU1xpUEAAAAAAAAAAB4AAAB1AQAAAAAAAAAAAADupQAA_kvMAKlYIQM8TMwArVghAwAA7wouNmBn","distance":4.231665624816857,"name":"Friedrichstraße","location":[13.388798,52.517033]},{"hint":"Z_ghgJOrBIoNAAAADAAAAAAAAAAJAQAAW7-PQOKcyEAAAAAApq6DQg0AAAAMAAAAAAAAAJEAAADupQAAf27MABiJIQOCbswA_4ghAwAAXwUuNmBn","distance":2.7893928415656375,"name":"Torstraße","location":[13.397631,52.529432]},{"hint":"5fchgP___38jAAAAyAAAACsAAABKAAAAsowKQkpQX0Lx6yZCvsQGQiMAAABkAAAAKwAAACUAAADupQAASufMAOdwIQNL58wA03AhAwMAvxAuNmBn","distance":2.2265954222656257,"name":"Platz der Vereinten Nationen","location":[13.428554,52.523239]}],"code":"Ok"}

Upvotes: 0

Views: 1558

Answers (1)

Mariano Zorrilla
Mariano Zorrilla

Reputation: 7686

Here's a full example of how to parse your JSON and extract your lat and long:

import 'dart:convert';

import 'package:flutter/material.dart';

void main() => runApp(Home());

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Example',
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {

  final json = '{"routes":[{"legs":[{"summary":"","weight":825.2,"duration":596.9,"steps":[],"distance":2394},{"summary":"","weight":756.9,"duration":560.6,"steps":[],"distance":2948.2}],"weight_name":"routability","weight":1582.1,"duration":1157.5,"distance":5342.2}],"waypoints":[{"hint":"UeT4id7k-IkeAAAAdQEAAAAAAAAAAAAASjFaQU1xpUEAAAAAAAAAAB4AAAB1AQAAAAAAAAAAAADupQAA_kvMAKlYIQM8TMwArVghAwAA7wouNmBn","distance":4.231665624816857,"name":"Friedrichstraße","location":[13.388798,52.517033]},{"hint":"Z_ghgJOrBIoNAAAADAAAAAAAAAAJAQAAW7-PQOKcyEAAAAAApq6DQg0AAAAMAAAAAAAAAJEAAADupQAAf27MABiJIQOCbswA_4ghAwAAXwUuNmBn","distance":2.7893928415656375,"name":"Torstraße","location":[13.397631,52.529432]},{"hint":"5fchgP___38jAAAAyAAAACsAAABKAAAAsowKQkpQX0Lx6yZCvsQGQiMAAABkAAAAKwAAACUAAADupQAASufMAOdwIQNL58wA03AhAwMAvxAuNmBn","distance":2.2265954222656257,"name":"Platz der Vereinten Nationen","location":[13.428554,52.523239]}],"code":"Ok"}';

  List<LatLong> _getListOfLatLong() {
    List<LatLong> list = [];
    final parse = jsonDecode(json);
    final wayPorts = parse['waypoints'] as List;
    wayPorts.forEach((element) {
      var waypoint = element as Map<String, dynamic>;
      list.add(LatLong(waypoint['location'][0], waypoint['location'][1]));
    });
    return list;
  }

  @override
  void initState() {
    super.initState();
    _getListOfLatLong().forEach((element) {
      print('LAT: ${element.lat} LONG: ${element.long}');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Container(
    );
  }
}

class LatLong {
  double lat;
  double long;

  LatLong(this.lat, this.long);
}

The output I'm getting out of it is the following:

Performing hot restart...
Syncing files to device iPhone 11 Pro Max...
Restarted application in 1,122ms.

flutter: LAT: 13.388798 LONG: 52.517033
flutter: LAT: 13.397631 LONG: 52.529432
flutter: LAT: 13.428554 LONG: 52.523239

Upvotes: 1

Related Questions