# Great-circle distance #

Calculate the great-circle distance between two points (having Latitude,Longitude) on the surface of Earth You can get the distance using the Spherical law of cosines, Haversine formula or Vincenty`s formula

The great-circle distance is the shortest distance between two points on the surface of a sphere

A diagram illustrating great-circle distance (drawn in red) between two points on a sphere, P and Q. Two antipodal points, u and v, are also depicted.

By CheCheDaWaff (Own work) [CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0)], via Wikimedia Commons

Included in this library:

• Spherical law of cosines
• Haversine formula
• Vincenty` formula (por from the Android implementation)

Disclaimer: The earth is not quite a sphere. This means that errors(0.3%,0.5% errors) from assuming spherical geometry might be considerable depending on the points; so: don't trust your life on this value

Usage example:

final lat1 = 41.139129;
final lon1 = 1.402244;

final lat2 = 41.139074;
final lon2 = 1.402315;

var gcd = new GreatCircleDistance.fromDegrees(latitude1: lat1, longitude1: lon1, latitude2: lat2, longitude2: lon2);

print('Distance from location 1 to 2 using the Haversine formula is: \${gcd.haversineDistance()}');
print('Distance from location 1 to 2 using the Spherical Law of Cosines is: \${gcd.sphericalLawOfCosinesDistance()}');
print('Distance from location 1 to 2 using the Vicenty`s formula is: \${gcd.vincentyDistance()}');

Check Wikipedia for detailed description on Great-circle distance

# Changelog #

## 0.0.1 #

• Initial version for the great-circle distance (Spherical law of cosines, Haversine formula and Vincenty` formula)

## 0.0.2 #

• Minor update to sample code

## 0.0.5 #

• Update descriptions

## 0.0.6 #

• Minor test update, added travis integration

## 1.0.0 #

Added coordinates validation. A coordinate is considered invalid if it meets at least one of the following criteria:

• Its latitude is greater than 90 degrees or less than -90 degrees.
• Its longitude is greater than 180 degrees or less than -180 degrees.

## 1.0.1 #

Remove upper bound Dart SDK constraint

thanks to @bramvbilsen for pointing it out and for the PR

example/great_circle_distance_example.dart

import 'package:great_circle_distance/great_circle_distance.dart';

main() {
final lat1 = 41.139129;
final lon1 = 1.402244;

final lat2 = 41.139074;
final lon2 = 1.402315;

var gcd = new GreatCircleDistance.fromDegrees(
latitude1: lat1, longitude1: lon1, latitude2: lat2, longitude2: lon2);

print(
'Distance from location 1 to 2 using the Haversine formula is: \${gcd.haversineDistance()}');
print('Distance from location 1 to 2 using the Spherical Law of Cosines is: \${gcd
.sphericalLawOfCosinesDistance()}');
print(
'Distance from location 1 to 2 using the Vicenty`s formula is: \${gcd.vincentyDistance()}');
}

## Use this package as a library

### 1. Depend on it

dependencies:
great_circle_distance: ^1.0.1

### 2. Install it

You can install packages from the command line:

with pub:

\$ pub get

### 3. Import it

Now in your Dart code, you can use:

import 'package:great_circle_distance/great_circle_distance.dart';

 Popularity: Describes how popular the package is relative to other packages. [more] 78 Health: Code health derived from static analysis. [more] 55 Maintenance: Reflects how tidy and up-to-date the package is. [more] 0 Overall: Weighted score of the above. [more] 56

We analyzed this package on Mar 31, 2020, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

• Dart: 2.7.1
• pana: 0.13.6

#### Health issues and suggestions

Fix lib/src/great_circle_distance_base.dart. (-26.86 points)

Analysis of lib/src/great_circle_distance_base.dart failed with 1 error, 5 hints, including:

line 61 col 68: Undefined name 'PI'.

line 1 col 8: Unused import: 'dart:math'.

line 90 col 13: DO use curly braces for all flow control structures.

line 90 col 19: Unnecessary new keyword.

line 94 col 13: DO use curly braces for all flow control structures.

Fix lib/src/formula/spherical_lawofcosines.dart. (-25 points)

Analysis of lib/src/formula/spherical_lawofcosines.dart failed with 1 error:

line 10 col 49: Undefined name 'PI'.

Format lib/great_circle_distance.dart.

Run dartfmt to format lib/great_circle_distance.dart.

Format lib/src/formula/harvesine.dart.

Run dartfmt to format lib/src/formula/harvesine.dart.

Format lib/src/formula/vincenty.dart.

Run dartfmt to format lib/src/formula/vincenty.dart.

#### Maintenance issues and suggestions

No valid SDK. (-20 points)

The analysis could not detect a valid SDK that can use this package.

Package is too old. (-100 points)

The package was last published more than two years ago.

#### Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=1.20.1 <3.0.0
Dev dependencies
test ^0.12.0