Geo::Distance::Google - Google Maps Distance API
use Geo::Distance::Google; my $geo = Geo::Distance::Google->new; my $distance = $geo->distance( # sears tower... wacker tower whatever origins => '233 S. Wacker Drive Chicago, Illinois 60606', destinations => '1600 Amphitheatre Parkway, Mountain View, CA' ); printf "The distance between: %s and %s is %s\n", $distance->[0]->{origin_address}, $distance->[0]->{destinations}->[0]->{address}, $distance->[0]->{destinations}->[0]->{distance}->{text};
Geo::Distance::Google provides a distance and duration functionality using Google Maps API.
Create new geo distance object.
$geo = Geo::Distance::Google->new( https => 1 ); $geo = Geo::Distance::Google->new( language => 'ru' ); $geo = Geo::Distance::Google->new( gl => 'ca' );
ua - LWP::UserAgent object or compatiable
host - url of api host
language - Google's response will be in this language (when possible by google)
region - region for usage
sensor - true (1) when pulling data from GPS sensor
mode - mode of transport (default: driving)
avoid - restrictions applied to directions (supports 'tolls' or 'highways')
https - set to true will make requests with https
debug - true will output internal debugging info
You can optionally use your Maps Premier Client ID, by passing your client code as the client parameter and your private key as the key parameter. The URL signing for Premier Client IDs requires the Digest::HMAC_SHA1 and MIME::Base64 modules. To test your client, set the environment variables GMAP_CLIENT and GMAP_KEY before running 02_v3_live.t
client
key
GMAP_CLIENT=your_id GMAP_KEY='your_key' make test
$distance = $geo->distance( origins => '233 S. Wacker Drive Chicago, Illinois 60606', destinations => '1600 Amphitheatre Parkway, Mountain View, CA' ) # multiple origins $distance = $geo->distance( origins => [ 'One MetLife Stadium Drive, East Rutherford, New Jersey 07073, United States', '602 Jamestown Avenue, San Francisco, California 94124' ], destinations => '1265 Lombardi Avenue, Green Bay, Wisconsin 54304' ); # lat and lng $distance => $geo->distance( origins => '34.101063,-118.3385319', destinations => '34.1613743,118.1676149' );
Queries $geo to Google Maps distance API and returns list reference that contains each origin to destination mapping.
Data returned from second example above looks like:
[ { 'origin_address' => 'MetLife Stadium, 102 Stadium Rd, East Rutherford, NJ 07073, USA', 'destinations' => [ { 'distance' => { 'value' => 1587392, 'text' => '1,587 km' }, 'status' => 'OK', 'duration' => { 'value' => 60332, 'text' => '16 hours 46 mins' }, 'address' => '1265 Lombardi Ave, Green Bay, WI 54304, USA' } ] }, { 'origin_address' => '602 Jamestown Ave, San Francisco, CA 94124, USA', 'destinations' => [ { 'distance' => { 'value' => 3615562, 'text' => '3,616 km' }, 'status' => 'OK', 'duration' => { 'value' => 127697, 'text' => '1 day 11 hours' }, 'address' => '1265 Lombardi Ave, Green Bay, WI 54304, USA' } ] } ]
When you'd like to pass non-ascii string as a location, you should pass it as either UTF-8 bytes or Unicode flagged string.
Accessor method to get and set UserAgent object used internally. You can call env_proxy for example, to get the proxy information from environment variables:
$coder->ua->env_proxy;
You can also set your own User-Agent object:
$coder->ua( LWPx::ParanoidAgent->new );
Set to true to get extra debugging information
Encodes url
Decodes url
Creates google friendly signature
Returns raw json response from google API request
I borrowed much of this inital code from Geo::Coder::Google, it sped up much of my work and was a great help. Thanks.
Geo::Coder::Google
Lee Carmichael, <lcarmich at cpan.org>
<lcarmich at cpan.org>
Please report any bugs or feature requests to bug-geo-distance-google at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Geo-Distance-Google. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
bug-geo-distance-google at rt.cpan.org
You can find documentation for this module with the perldoc command.
perldoc Geo::Distance::Google
You can also look for information at:
RT: CPAN's request tracker (report bugs here)
https://github.com/lecar-red/Geo-Distance-Google/issues
AnnoCPAN: Annotated CPAN documentation
http://annocpan.org/dist/Geo-Distance-Google
CPAN Ratings
http://cpanratings.perl.org/d/Geo-Distance-Google
Search CPAN
http://search.cpan.org/dist/Geo-Distance-Google/
Add support to distance method for explicit latitude and longtitude parameters (support by hand encoding as 'lat|lng'
Add tests for method based changes to attributes avoid, mode and units
Add tests for API keys
Add tests for imperial units
Geo::Distance, Geo::Coder::Google
List of supported languages: http://spreadsheets.google.com/pub?key=p9pdwsai2hDMsLkXsoM05KQ&gid=1
API Docs: http://code.google.com/apis/maps/documentation/distancematrix/,
To install Geo::Distance::Google, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Geo::Distance::Google
CPAN shell
perl -MCPAN -e shell install Geo::Distance::Google
For more information on module installation, please visit the detailed CPAN module installation guide.