From 33a0dbb24efc727c7277eaddd90b2a1a1ac631e5 Mon Sep 17 00:00:00 2001 From: suresh Date: Wed, 26 Apr 2023 13:10:56 +0530 Subject: [PATCH] Add distance to map lat lang --- android/app/src/main/AndroidManifest.xml | 2 +- assets/images/pickup_marker.png | Bin 2588 -> 3997 bytes lib/location_controller.dart | 2 +- lib/order_tracking_page.dart | 122 ++++++++++++++++------- 4 files changed, 89 insertions(+), 37 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 2a79e4e..2387030 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -49,6 +49,6 @@ android:name="flutterEmbedding" android:value="2" /> + android:value="AIzaSyDJpK9RVhlBejtJu9xSGfneuTN6HOfJgSM"/> diff --git a/assets/images/pickup_marker.png b/assets/images/pickup_marker.png index a8b0258034a4bf1e616342d4dc0e8834aad0eacf..04c4e95abab9cd6ef8ba0f80dfc079eb18428130 100644 GIT binary patch literal 3997 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 extends GetxController { /*final Rx locationPosition = const LatLng(12.90618717, 77.5844983).obs;*/ final Rx locationPosition = - const LatLng(17.491659, 78.391983).obs; + const LatLng(0, 0).obs; bool locationServiceActive = true; diff --git a/lib/order_tracking_page.dart b/lib/order_tracking_page.dart index 2d41de8..f39fad2 100644 --- a/lib/order_tracking_page.dart +++ b/lib/order_tracking_page.dart @@ -1,10 +1,13 @@ import 'dart:async'; import 'dart:developer'; +import 'dart:math'; + import 'package:flutter/material.dart'; import 'package:flutter_polyline_points/flutter_polyline_points.dart'; import 'package:get/get.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:location/location.dart'; import 'location_controller.dart'; @@ -26,22 +29,16 @@ class OrderTrackingPageState extends State { PolylinePoints polylinePoints = PolylinePoints(); double latitude=0; double longitude=0; + LocationData? currentLocation; - String googleAPiKey ="AIzaSyBOigf-qg4v_aD0Jrx2wFOMNzObxXrfDEM"; + String googleAPiKey ="AIzaSyDJpK9RVhlBejtJu9xSGfneuTN6HOfJgSM"; Set markers = {}; Map polylines = {}; LatLng startLocation = const LatLng(17.416806,78.4521704); - - LocationController locationController = Get.put(LocationController()); - - - - - - + double distance = 0.0; @override void initState() { @@ -52,7 +49,7 @@ class OrderTrackingPageState extends State { ever(locationController.locationPosition, (value) { if (value != null) { - log("${value.latitude} ${value.longitude}"); + // log("${value.latitude} ${value.longitude}"); var latitude = value.latitude; var longitude = value.longitude; startLocation = LatLng(latitude, longitude); @@ -61,6 +58,7 @@ class OrderTrackingPageState extends State { }); getDirections(endLocation); //fetch direction polylines from Google API + } getDirections(endLocation) async { @@ -100,8 +98,24 @@ class OrderTrackingPageState extends State { polylineCoordinates.add(LatLng(point.latitude, point.longitude)); } } else { - log(result.errorMessage ?? "Something went wrong"); + // log(result.errorMessage ?? "Something went wrong"); } + +//polulineCoordinates is the List of longitute and latidtude. + double totalDistance = 0; + for(var i = 0; i < polylineCoordinates.length-1; i++){ + totalDistance += calculateDistance( + polylineCoordinates[i].latitude, + polylineCoordinates[i].longitude, + polylineCoordinates[i+1].latitude, + polylineCoordinates[i+1].longitude); + } + print(totalDistance); + + setState(() { + distance = totalDistance; + }); + addPolyLine(polylineCoordinates); } @@ -109,9 +123,9 @@ class OrderTrackingPageState extends State { PolylineId id = const PolylineId("poly"); Polyline polyline = Polyline( polylineId: id, - color: Colors.red, + color: Colors.deepPurpleAccent, points: polylineCoordinates, - width: 4, + width: 8, ); polylines[id] = polyline; @@ -125,31 +139,69 @@ class OrderTrackingPageState extends State { setState(() {}); } + + double calculateDistance(lat1, lon1, lat2, lon2){ + var p = 0.017453292519943295; + var a = 0.5 - cos((lat2 - lat1) * p)/2 + + cos(lat1 * p) * cos(lat2 * p) * + (1 - cos((lon2 - lon1) * p))/2; + return 12742 * asin(sqrt(a)); + } + + + + @override Widget build(BuildContext context) { return Scaffold( - body: GoogleMap( - //Map widget from google_maps_flutter package - zoomGesturesEnabled: true, - //enable Zoom in, out on map - initialCameraPosition: CameraPosition( - //innital position in map - target: startLocation, //initial position - zoom: 8.0, //initial zoom level - ), - markers: markers, - //markers to show on map - polylines: Set.of(polylines.values), - //polylines - mapType: MapType.normal, - //map type - onMapCreated: (controller) { - //method called when map is created - if (!mapController.isCompleted) { - mapController.complete(controller); - } - }, - ), + body: Stack( + children: [ + GoogleMap( + //Map widget from google_maps_flutter package + zoomGesturesEnabled: true, + //enable Zoom in, out on map + initialCameraPosition: CameraPosition( + //innital position in map + target: startLocation, //initial position + zoom: 8.0, //initial zoom level + ), + + markers: markers, + //markers to show on map + polylines: Set.of(polylines.values), + //polylines + mapType: MapType.normal, + //map type + onMapCreated: (controller) { + //method called when map is created + if (!mapController.isCompleted) { + mapController.complete(controller); + } + }, + + ), + + const SizedBox( + height: 95, + ), + + Positioned( + bottom: 100, + left: 50, + child: Container( + child: Card( + child: Container( + padding: EdgeInsets.all(20), + child: Text("Total Distance: " + distance.toStringAsFixed(2) + " KM", + style: TextStyle(fontSize: 20, fontWeight:FontWeight.bold)) + ), + ) + )), + ], + ) + + ); + } }