Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Total distance calculation from LatLng List

Tags:

Im using dart/flutter and the 'package:latlong/latlong.dart' to parse a GPX file into a list of LatLng objects. That is working fine, but the next step is to find the total distance of the route.

The question here is

how can I get the total distance from a list of LatLng objects in Dart?

I have used Haversine formula before in Java, but not sure the best way to implement it using Dart. Any help of suggestion would be greatly appreciated.

Edit

Below is an attempt to get total distance based on the answer below. For some reason though it doesn't add to totalDistance and doesn't return a double.

The below is suppose to iterate through a list of 60+ LatLng objects and find distance between each one, adding to a totalDistance double which is returned at the end of the loop.

 static double getDistanceFromGPSPointsInRoute(List<LatLng> gpsList) {     double totalDistance = 0.0;      for (var i = 0; i < gpsList.length; i++) {       var p = 0.017453292519943295;       var c = cos;       var a = 0.5 -           c((gpsList[i + 1].latitude - gpsList[i].latitude) * p) / 2 +           c(gpsList[i].latitude * p) *               c(gpsList[i + 1].latitude * p) *               (1 - c((gpsList[i + 1].longitude - gpsList[i].longitude) * p)) /               2;       double distance = 12742 * asin(sqrt(a));       totalDistance += distance;       print('Distance is ${12742 * asin(sqrt(a))}');     }     print('Total distance is $totalDistance');     return totalDistance;   } 

Output

flutter: Distance is 0.004143962775784678 flutter: Distance is 0.0041439635323316775 flutter: Distance is 0.007796918986828574 flutter: Distance is 0.007285385943437824 flutter: Distance is 0.006890844300938902 flutter: Distance is 0.006353952460010352 flutter: Distance is 0.005560051252981138 

As you can see above, there is no mention of Total Distance.

Example of LatLng List

flutter: -36.84975 , 174.646685 flutter: -36.849692 , 174.646497 flutter: -36.84967 , 174.646436 flutter: -36.849578 , 174.646264 flutter: -36.849502 , 174.646164 flutter: -36.849367 , 174.646038 flutter: -36.849209 , 174.645959 flutter: -36.849155 , 174.64594 flutter: -36.849107 , 174.645932 flutter: -36.849058 , 174.645922 flutter: -36.848952 , 174.645895 flutter: -36.84886 , 174.645906 flutter: -36.84879 , 174.645913 flutter: -36.848748 , 174.645836 flutter: -36.848744 , 174.645802 
like image 520
Yonkee Avatar asked Jan 11 '19 00:01

Yonkee


People also ask

How do you find the distance between two Latlng?

from math import cos, asin, sqrt, pi def distance(lat1, lon1, lat2, lon2): p = pi/180 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)) #2*R*asin... And for the sake of completeness: Haversine on Wikipedia.

Can you calculate distance from coordinates?

The distance formula is: √[(x₂ - x₁)² + (y₂ - y₁)²]. This works for any two points in 2D space with coordinates (x₁, y₁) for the first point and (x₂, y₂) for the second point.

How to calculate total distance from latlng list in flutter?

How to Calculate Total Distance From LatLng List In Flutter? You can do a loop and find the total distance by using 2 points each time. Here are some added random dummy data to show how it works. This function calculates the distance between two points. You can also try with the below code snippet:

How do I calculate the distance between two locations?

Enter the latitude and longitude of two locations and select calculate. The calculator uses Haversine formula to calculate the distance between the two locations entered.

What is the total distance traveled by the line?

The total distance traveled is 12 units. The distance from a point to a line is the length of the shortest path between that point and the place on the line nearest to it. This path is always the line that is perpendicular (at right angles) to your original line. 1. If you know the coordinates

How do you find the distance between longitude lines?

Note I’ve included a scale bar, but of course the distance between longitude lines gets closer at higher latitudes. The first method is to calculate great circle distances, that account for the curvature of the earth. If we use with unprojected coordinates (ie in lon-lat) then we get great circle distances (in metres).


1 Answers

Try this please. I tested it with Google Maps and works accurately. You can do a loop and find total distance by using 2 points each time. I added some random dummy data to show how it works. Copy this code to https://dartpad.dartlang.org/ and test easily.

import 'dart:math' show cos, sqrt, asin;  void main() {   double calculateDistance(lat1, lon1, lat2, lon2){     var p = 0.017453292519943295;     var c = cos;     var a = 0.5 - c((lat2 - lat1) * p)/2 +            c(lat1 * p) * c(lat2 * p) *            (1 - c((lon2 - lon1) * p))/2;     return 12742 * asin(sqrt(a));   }    List<dynamic> data = [     {       "lat": 44.968046,       "lng": -94.420307     },{       "lat": 44.33328,       "lng": -89.132008     },{       "lat": 33.755787,       "lng": -116.359998     },{       "lat": 33.844843,       "lng": -116.54911     },{       "lat": 44.92057,       "lng": -93.44786     },{       "lat": 44.240309,       "lng": -91.493619     },{       "lat": 44.968041,       "lng": -94.419696     },{       "lat": 44.333304,       "lng": -89.132027     },{       "lat": 33.755783,       "lng": -116.360066     },{       "lat": 33.844847,       "lng": -116.549069     },   ];   double totalDistance = 0;   for(var i = 0; i < data.length-1; i++){     totalDistance += calculateDistance(data[i]["lat"], data[i]["lng"], data[i+1]["lat"], data[i+1]["lng"]);   }   print(totalDistance); } 
like image 124
westdabestdb Avatar answered Oct 09 '22 15:10

westdabestdb