Geo::Distance::XS - speed up Geo::Distance
use Geo::Distance::XS; my $geo = Geo::Distance->new; my $distance = $geo->distance(mile => $lon1, $lat1 => $lon2, $lat2);
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.
Geo::Distance::XS
Geo::Distance
NOTE: As of version 0.13, Geo::Distance automatically uses this module if it is installed.
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.12.2:
GIS::Distance::Fast
---- [ 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 Benchmark: running gis_fast, perl, xs for at least 1 CPU seconds... gis_fast: 1 wallclock secs ( 1.06 usr + 0.01 sys = 1.07 CPU) @ 23642.99/s (n=25298) perl: 1 wallclock secs ( 1.11 usr + 0.00 sys = 1.11 CPU) @ 77490.99/s (n=86015) xs: 1 wallclock secs ( 1.00 usr + 0.01 sys = 1.01 CPU) @ 1238753.47/s (n=1251141) Rate gis_fast perl xs gis_fast 23643/s -- -69% -98% perl 77491/s 228% -- -94% xs 1238753/s 5139% 1499% -- ---- [ 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 Benchmark: running gis_fast, perl, xs for at least 1 CPU seconds... gis_fast: 1 wallclock secs ( 1.14 usr + -0.01 sys = 1.13 CPU) @ 19029.20/s (n=21503) perl: 1 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 80387.85/s (n=86015) xs: 2 wallclock secs ( 1.12 usr + -0.01 sys = 1.11 CPU) @ 1458670.27/s (n=1619124) Rate gis_fast perl xs gis_fast 19029/s -- -76% -99% perl 80388/s 322% -- -94% xs 1458670/s 7565% 1715% -- ---- [ 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 Benchmark: running gis_fast, perl, xs for at least 1 CPU seconds... gis_fast: 1 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 23866.04/s (n=25298) perl: 1 wallclock secs ( 1.03 usr + 0.00 sys = 1.03 CPU) @ 75918.45/s (n=78196) xs: 2 wallclock secs ( 1.07 usr + 0.01 sys = 1.08 CPU) @ 1279826.85/s (n=1382213) Rate gis_fast perl xs gis_fast 23866/s -- -69% -98% perl 75918/s 218% -- -94% xs 1279827/s 5263% 1586% -- ---- [ Formula: gcd ] ------------------------------------ perl - distance from LA to NY: 12438.0476860875-9076.08896733252i miles xs - distance from LA to NY: 2443.08796228363 miles gis_fast - distance from LA to NY: 12438.0476860875-9076.08896733252i miles Benchmark: running gis_fast, perl, xs for at least 1 CPU seconds... gis_fast: 2 wallclock secs ( 1.07 usr + 0.00 sys = 1.07 CPU) @ 4185.98/s (n=4479) perl: 1 wallclock secs ( 1.06 usr + 0.00 sys = 1.06 CPU) @ 6339.62/s (n=6720) xs: 2 wallclock secs ( 1.05 usr + 0.00 sys = 1.05 CPU) @ 1310719.05/s (n=1376255) Rate gis_fast perl xs gis_fast 4186/s -- -34% -100% perl 6340/s 51% -- -100% xs 1310719/s 31212% 20575% -- ---- [ 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 Benchmark: running gis_fast, perl, xs for at least 1 CPU seconds... gis_fast: 1 wallclock secs ( 1.13 usr + 0.01 sys = 1.14 CPU) @ 17148.25/s (n=19549) perl: 1 wallclock secs ( 1.07 usr + 0.01 sys = 1.08 CPU) @ 66370.37/s (n=71680) xs: 0 wallclock secs ( 1.07 usr + 0.01 sys = 1.08 CPU) @ 1274310.19/s (n=1376255) Rate gis_fast perl xs gis_fast 17148/s -- -74% -99% perl 66370/s 287% -- -95% xs 1274310/s 7331% 1820% -- ---- [ Formula: tv ] ------------------------------------ perl - distance from LA to NY: 2448.24135235512 miles xs - distance from LA to NY: 2443.80013146211 miles gis_fast - distance from LA to NY: 2448.24135235512 miles Benchmark: running gis_fast, perl, xs for at least 1 CPU seconds... gis_fast: 1 wallclock secs ( 1.05 usr + 0.01 sys = 1.06 CPU) @ 21353.77/s (n=22635) perl: 1 wallclock secs ( 1.13 usr + 0.01 sys = 1.14 CPU) @ 15719.30/s (n=17920) xs: 1 wallclock secs ( 1.04 usr + 0.00 sys = 1.04 CPU) @ 778425.00/s (n=809562) Rate perl gis_fast xs perl 15719/s -- -26% -98% gis_fast 21354/s 36% -- -97% xs 778425/s 4852% 3545% --
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.
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
http://github.com/gray/geo-distance-xs
AnnoCPAN: Annotated CPAN documentation
http://annocpan.org/dist/Geo-Distance-XS
CPAN Ratings
http://cpanratings.perl.org/d/Geo-Distance-XS
RT: CPAN's request tracker
http://rt.cpan.org/Public/Dist/Display.html?Name=Geo-Distance-XS
Search CPAN
http://search.cpan.org/dist/Geo-Distance-XS/
Copyright (C) 2009-2011 gray <gray at cpan.org>, all rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
gray, <gray at cpan.org>
To install Geo::Distance::XS, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Geo::Distance::XS
CPAN shell
perl -MCPAN -e shell install Geo::Distance::XS
For more information on module installation, please visit the detailed CPAN module installation guide.