NAME

Geo::Coder::List - Call many Geo-Coders

VERSION

Version 0.22

SYNOPSIS

Geo::Coder::All and Geo::Coder::Many are great routines but neither quite does what I want. This module's primary use is to allow many backends to be used by HTML::GoogleMaps::V3

SUBROUTINES/METHODS

new

Creates a Geo::Coder::List object.

push

Add an encoder to list of encoders.

use Geo::Coder::List;
use Geo::Coder::GooglePlaces;
# ...
my $list = Geo::Coder::List->new()->push(Geo::Coder::GooglePlaces->new());

Different encoders can be preferred for different locations. For example this code uses geocode.ca for Canada and US addresses, and OpenStreetMap for other places:

my $geo_coderlist = Geo::Coder::List->new()
    ->push({ regex => qr/(Canada|USA|United States)$/, geocoder => Geo::Coder::CA->new() })
    ->push(Geo::Coder::OSM->new());

# Uses Geo::Coder::CA, and if that fails uses Geo::Coder::OSM
my $location = $geo_coderlist->geocode(location => '1600 Pennsylvania Ave NW, Washington DC, USA');
# Only uses Geo::Coder::OSM
if($location = $geo_coderlist->geocode('10 Downing St, London, UK')) {
    print 'The prime minister lives at co-ordinates ',
        $location->{geometry}{location}{lat}, ',',
        $location->{geometry}{location}{lng}, "\n";
}

# It is also possible to limit the number of enquires used by a particular encoder
$geo_coderlist->push({ geocoder => Geo::Coder::GooglePlaces->new(key => '1234', limit => 100) });

geocode

Runs geocode on all of the loaded drivers. See Geo::Coder::GooglePlaces::V3 for an explanation

The name of the Geo-Coder that gave the result is put into the geocode element of the return value, if the value was retrieved from the cache the value will be undefined.

if(defined($location->{'geocoder'})) {
    print 'Location information retrieved using ', $location->{'geocoder'}, "\n";
}

ua

Accessor method to set the UserAgent object used internally by each of the Geo-Coders. You can call env_proxy for example, to get the proxy information from environment variables:

my $geocoder_list = Geo::Coder::List->new();
my $ua = LWP::UserAgent->new();
$ua->env_proxy(1);
$geocoder_list->ua($ua);

Note that unlike Geo::Coders, there is no read method, since that would be pointless.

log

Returns the log of events to help you debug failures, optimize lookup order and fix quota breakage

my @log = @{$geocoderlist->log()};

flush

Clear the log.

AUTHOR

Nigel Horne, <njh at bandsman.co.uk>

BUGS

Please report any bugs or feature requests to bug-geo-coder-list at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Geo-Coder-List. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

There is no reverse_geocode() yet.

SEE ALSO

Geo::Coder::Many Geo::Coder::All Geo::Coder::GooglePlaces

SUPPORT

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

perldoc Geo::Coder::List

You can also look for information at:

LICENSE AND COPYRIGHT

Copyright 2016-2018 Nigel Horne.

This program is released under the following licence: GPL