Geo::Distance::XS(3) speed up Geo::Distance

## SYNOPSIS

use Geo::Distance::XS;
my \$geo = Geo::Distance->new;
my \$distance = \$geo->distance(mile => \$lon1, \$lat1 => \$lon2, \$lat2);

## DESCRIPTION

The "Geo::Distance::XS" module provides faster C implementations of the distance calculations found in "Geo::Distance". See the documentation for that module for usage.

NOTE: As of version 0.13, Geo::Distance automatically uses this module if it is installed.

## FORMULAS

In addition to the formulas offered in "Geo::Distance", this module implements the additional formulas:

## alt: Andoyer-Lambert-Thomas Formula

This is faster than the Vincenty formula, but trades a bit of accuracy.

## PERFORMANCE

This distribution contains a benchmarking script which compares "Geo::Distance::XS" with "Geo::Distance" and "GIS::Distance::Fast". These are the results on a MacBook 2GHz with Perl 5.14.2:

```    ---- [ Formula: hsin ] ------------------------------------
perl     - distance from LA to NY: 2443.08796228363 miles
xs       - distance from LA to NY: 2443.08796228363 miles
gis_fast - distance from LA to NY: 2443.08796228363 miles
Rate gis_fast     perl       xs
gis_fast   24802/s       --     -70%     -98%
perl       81919/s     230%       --     -92%
xs       1003704/s    3947%    1125%       --
---- [ Formula: tv ] ------------------------------------
perl     - distance from LA to NY: 2448.24135235512 miles
xs       - distance from LA to NY: 2448.2413523656 miles
gis_fast - distance from LA to NY: 2448.24135235512 miles
Rate     perl gis_fast       xs
perl      18101/s       --     -19%     -95%
gis_fast  22330/s      23%       --     -94%
xs       345717/s    1810%    1448%       --
---- [ Formula: polar ] ------------------------------------
perl     - distance from LA to NY: 2766.02509696782 miles
xs       - distance from LA to NY: 2766.02509696782 miles
gis_fast - distance from LA to NY: 2766.02509696782 miles
Rate gis_fast     perl       xs
gis_fast   19200/s       --     -78%     -98%
perl       87682/s     357%       --     -93%
xs       1214700/s    6227%    1285%       --
---- [ Formula: cos ] ------------------------------------
perl     - distance from LA to NY: 2443.08796228363 miles
xs       - distance from LA to NY: 2443.08796228363 miles
gis_fast - distance from LA to NY: 2443.08796228363 miles
Rate gis_fast     perl       xs
gis_fast   24435/s       --     -69%     -98%
perl       78913/s     223%       --     -93%
xs       1147836/s    4597%    1355%       --
---- [ Formula: gcd ] ------------------------------------
perl     - distance from LA to NY: 2443.08796228363 miles
xs       - distance from LA to NY: 2443.08796228363 miles
gis_fast - distance from LA to NY: 2443.08796228363 miles
Rate gis_fast     perl       xs
gis_fast   18270/s       --     -75%     -98%
perl       74472/s     308%       --     -93%
xs       1102769/s    5936%    1381%       --
---- [ Formula: mt ] ------------------------------------
perl     - distance from LA to NY: 2443.08796228363 miles
xs       - distance from LA to NY: 2443.08796228363 miles
gis_fast - distance from LA to NY: 2443.08796228363 miles
Rate gis_fast     perl       xs
gis_fast   17935/s       --     -75%     -98%
perl       71739/s     300%       --     -94%
xs       1135525/s    6231%    1483%       --
```

This distribution contains another benchmarking script which compares only the XS formulas over several different coordinates:

```            Rate    tv  hsin   alt   cos    mt   gcd polar
tv     16906/s    --  -90%  -90%  -91%  -91%  -91%  -92%
hsin  165414/s  878%    --   -4%   -8%  -10%  -13%  -17%
alt   172032/s  918%    4%    --   -5%   -7%   -9%  -14%
cos   180326/s  967%    9%    5%    --   -2%   -5%  -10%
mt    184357/s  991%   11%    7%    2%    --   -3%   -8%
gcd   189253/s 1019%   14%   10%    5%    3%    --   -6%
polar 200386/s 1085%   21%   16%   11%    9%    6%    --
Calculated length for short distance:
alt  : 40.3740136064528 miles
cos  : 40.3095459813536 miles
gcd  : 40.3095459813294 miles
hsin : 40.3095459813294 miles
mt   : 40.3095459813536 miles
polar: 46.7467797109043 miles
tv   : 40.3740136384531 miles
Calculated length for long distance:
alt  : 2448.24135691376 miles
cos  : 2443.08796228363 miles
gcd  : 2443.08796228363 miles
hsin : 2443.08796228363 miles
mt   : 2443.08796228363 miles
polar: 2766.02509696782 miles
tv   : 2448.2413523656 miles
Calculated length for nearly antipodes:
alt  : 12340.6455133245 miles
cos  : 12340.327635068 miles
gcd  : 12340.327635068 miles
hsin : 12340.327635068 miles
mt   : 12340.327635068 miles
polar: 12368.4764642469 miles
tv   : 12340.7483034002 miles
Calculated length for antipodes:
alt  : 12429.86673988 miles
cos  : 219.005548031861 miles
gcd  : 12438.0476860875 miles
hsin : 12438.0475680956 miles
mt   : 219.005548031861 miles
polar: 12438.0476860875 miles
tv   : 12370.1885059814 miles
Calculated length for polar antipodes:
alt  : 12429.86673988 miles
cos  : 12438.0476860875 miles
gcd  : 12438.0476860875 miles
hsin : 12438.0476860875 miles
mt   : 12438.0476860875 miles
polar: 12438.0476860875 miles
tv   : 12429.8667398787 miles
```

## REQUESTS AND BUGS

Please report any bugs or feature requests to <http://rt.cpan.org/Public/Bug/Report.html?Queue=Geo-Distance-XS>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

## SUPPORT

You can find documentation for this module with the perldoc command.

```    perldoc Geo::Distance::XS
```

You can also look for information at:

• GitHub Source Repository
• AnnoCPAN: Annotated CPAN documentation
• CPAN Ratings
• RT: CPAN's request tracker
• Search CPAN