# 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

## Use this package as a library

### 1. Depend on it

``````
dependencies:
great_circle_distance2: ^1.0.1+1

``````

### 2. Install it

You can install packages from the command line:

with pub:

``````
\$ pub get

``````

with Flutter:

``````
\$ flutter pub get

``````

Alternatively, your editor might support `pub get` or `flutter pub get`. Check the docs for your editor to learn more.

### 3. Import it

Now in your Dart code, you can use:

``````
import 'package:great_circle_distance2/great_circle_distance2.dart';
``````
 Popularity: Describes how popular the package is relative to other packages. [more] 71 Health: Code health derived from static analysis. [more] 98 Maintenance: Reflects how tidy and up-to-date the package is. [more] 100 Overall: Weighted score of the above. [more] 85

We analyzed this package on Apr 4, 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 suggestions

Fix `lib/src/great_circle_distance_base.dart`. (-1.99 points)

Analysis of `lib/src/great_circle_distance_base.dart` reported 4 hints:

line 91 col 7: DO use curly braces for all flow control structures.

line 91 col 13: Unnecessary new keyword.

line 95 col 7: DO use curly braces for all flow control structures.

line 95 col 13: Unnecessary new keyword.

Format `lib/src/formula/harvesine.dart`.

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

Format `lib/src/formula/spherical_lawofcosines.dart`.

Run `dartfmt` to format `lib/src/formula/spherical_lawofcosines.dart`.

Format `lib/src/formula/vincenty.dart`.

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

#### Maintenance suggestions

Maintain an example.

None of the files in the package's `example/` directory matches known example patterns.

Common filename patterns include `main.dart`, `example.dart`, and `great_circle_distance2.dart`. Packages with multiple examples should provide `example/README.md`.