NAME
GIS::Distance - Calculate geographic distances.
SYNOPSIS
use GIS::Distance;
my $gis = GIS::Distance->new();
$gis->formula( 'Polar' ); # Optional, default is Haversine.
my $distance = $gis->distance( $lat1,$lon1 => $lat2,$lon2 );
print $distance->meters();
DESCRIPTION
This perl library aims to provide as many tools to make it as simple as
possible to calculate distances between geographic points, and anything
that can be derived from that.
METHODS
distance
my $distance = $gis->distance( $lat1,$lon1 => $lat2,$lon2 );
Returns a Class::Measure::Length object for the distance between the two
degree lats/lons. The distance is calculated using whatever formula the
object is set to use.
ATTRIBUTES
formula
This is an object who's class inherits from GIS::Distance::Formula. This
object is used to calculate distance. The formula may be specified as
either a blessed object, or as a string, such as "Haversine" or any of
the other formulas.
If you specify the formula as a string then a few different class names
will be searched for. So, if you did:
$gis->formula( 'Haversine' );
Then this list of packages would automatically be looked for. The first
one that exists will be created and used:
GIS::Distance::Formula::Haversine::Fast
GIS::Distance::Formula::Haversine
Haversine
If you are using your own custom formula class make sure it extends()
(Moose) the GIS::Distance::Formula class.
Note that a ::Fast version of the class will be looked for first. By
default the ::Fast versions of the formulas, written in C, are not
available and the pure perl ones will be used instead. If you would like
the ::Fast formulas then install GIS::Distance::Fast and they will be
automatically used.
SEE ALSO
GIS::Distance::Fast - C implmentation of some of the formulas shipped
with GIS::Distance. This greatly increases the speed at which distance
calculations can be made.
FORMULAS
GIS::Distance::Formula::Cosine
GIS::Distance::Formula::GeoEllipsoid
GIS::Distance::Formula::GreatCircle
GIS::Distance::Formula::Haversine
GIS::Distance::Formula::MathTrig
GIS::Distance::Formula::Polar
GIS::Distance::Formula::Vincenty
TODO
* Create a GIS::Coord class that represents a geographic coordinate.
Then modify this module to accept input as either lat/lon pairs, or
as GIS::Coord objects.
* Create an extension to DBIx::Class with the same goal as
Geo::Distance's closest() method.
* Write a super accurate formula module called GIS::Distance::Geoid.
Some very useful info is at .
BUGS
Both the GIS::Distance::Formula::GreatCircle and
GIS::Distance::Formula::Polar formulas are broken. Read their respective
man pages for details.
TEST COVERAGE
---------------------------- ------ ------ ------ ------ ------ ------ ------
File stmt bran cond sub pod time total
---------------------------- ------ ------ ------ ------ ------ ------ ------
blib/lib/GIS/Distance.pm 100.0 n/a n/a 100.0 100.0 24.0 100.0
...b/GIS/Distance/Formula.pm 75.0 n/a n/a 66.7 100.0 1.9 75.0
...istance/Formula/Cosine.pm 100.0 n/a n/a 100.0 100.0 5.9 100.0
...e/Formula/GeoEllipsoid.pm 100.0 n/a n/a 100.0 100.0 3.6 100.0
...ce/Formula/GreatCircle.pm 100.0 n/a n/a 100.0 100.0 5.9 100.0
...ance/Formula/Haversine.pm 100.0 n/a n/a 100.0 100.0 9.1 100.0
...tance/Formula/MathTrig.pm 100.0 n/a n/a 100.0 100.0 2.4 100.0
...Distance/Formula/Polar.pm 100.0 n/a n/a 100.0 100.0 2.7 100.0
...tance/Formula/Vincenty.pm 100.0 50.0 50.0 100.0 100.0 44.6 93.1
Total 98.8 50.0 50.0 97.2 100.0 100.0 96.7
---------------------------- ------ ------ ------ ------ ------ ------ ------
AUTHOR
Aran Clary Deltac
LICENSE
This library is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.