The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Linux Build Status Windows Build status Coverage Status Kritika Analysis Status CPAN

Geo::Coder::Free

Provides a geocoding functionality using free databases

VERSION

Version 0.07

SYNOPSIS

use Geo::Coder::Free;

my $geocoder = Geo::Coder::Free->new();
my $location = $geocoder->geocode(location => 'Ramsgate, Kent, UK');

# Use a local download of http://results.openaddresses.io/
my $openaddr_geocoder = Geo::Coder::Freee->new(openaddr => $ENV{'OPENADDR_HOME'});
$location = $openaddr_geocoder->geocode(location => '1600 Pennsylvania Avenue NW, Washington DC, USA');

DESCRIPTION

Geo::Coder::Free provides an interface to free databases by acting as a front-end to Geo::Coder::Free::MaxMind and Geo::Coder::Free::OpenAddresses.

The cgi-bin directory contains a simple DIY geocoding website:

curl 'http://localhost/~user/cgi-bin/page.fcgi?page=query&q=1600+Pennsylvania+Avenue+NW+Washington+DC+USA'

METHODS

new

$geocoder = Geo::Coder::Free->new();

Takes one optional parameter, openaddr, which is the base directory of the OpenAddresses data downloaded from http://results.openaddresses.io.

Takes one optional parameter, directory, which tells the library where to find the MaxMind and GeoNames files admin1db, admin2.db and cities.[sql|csv.gz]. If that parameter isn't given, the module will attempt to find the databases, but that can't be guaranteed.

geocode

$location = $geocoder->geocode(location => $location);

print 'Latitude: ', $location->{'latitude'}, "\n";
print 'Longitude: ', $location->{'longitude'}, "\n";

# TODO:
# @locations = $geocoder->geocode('Portland, USA');
# diag 'There are Portlands in ', join (', ', map { $_->{'state'} } @locations);

reverse_geocode

$location = $geocoder->reverse_geocode(latlng => '37.778907,-122.39732');

To be done.

ua

Does nothing, here for compatibility with other geocoders

run

You can also run this module from the command line:

perl lib/Geo/Coder/Free.pm 1600 Pennsylvania Avenue NW, Washington DC

AUTHOR

Nigel Horne njh@bandsman.co.uk

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

BUGS

Lots of lookups fail at the moment.

The openaddresses.io code has yet to be completed. There are die()s where the code path has yet to be written.

The MaxMind data only contains cities. The openaddresses data doesn't cover the globe.

Can't parse and handle "London, England".

See Geo::Coder::Free::OpenAddresses for instructions creating its SQLite database from http://results.openaddresses.io/.

SEE ALSO

VWF, openaddresses, MaxMind and geonames.

LICENSE AND COPYRIGHT

Copyright 2017-2018 Nigel Horne.

The program code is released under the following licence: GPL for personal use on a single computer. All other users (including Commercial, Charity, Educational, Government) must apply in writing for a licence for use from Nigel Horne at `<njh at nigelhorne.com>`.

This product includes GeoLite2 data created by MaxMind, available from http://www.maxmind.com.