NAME
Geo::Coder::Free::OpenAddresses - Provides a geocoding functionality to the data from openaddresses.io
VERSION
Version 0.02
SYNOPSIS
use Geo::Coder::Free::OpenAddresses
# Use a local download of http://results.openaddresses.io/
my $geocoder = Geo::Coder::Free::OpenAddresses->new(openaddr => $ENV{'OPENADDR_HOME'});
$location = $geocoder->geocode(location => '1600 Pennsylvania Avenue NW, Washington DC, USA');
DESCRIPTION
Geo::Coder::Free::OpenAddresses provides an interface to the free geolocation database at http://openadresses.io
Refer to the source URL for licencing information for these files:
To install:
1. download the data from http://results.openaddresses.io/. You will find licencing information on that page. 2. unzip the data into a directory. 3. point the environment variable OPENADDR_HOME to that directory and save in the profile of your choice. 4. run the createdatabases.PL script which imports the data into an SQLite database. This process will take some time.
METHODS
new
$geocoder = Geo::Coder::Free::OpenAddresses->new();
Takes an optional parameter openaddr, which is the base directory of the OpenAddresses data downloaded from http://results.openaddresses.io.
Takes an optional parameter cache, which points to an object that understands get() and set() messages to store data in
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);
When looking for a house number in a street, if that address isn't found but that street is found, a place in the street is given. So "106 Wells Street, Fort Wayne, Allen, Indiana, USA" isn't found, a match for "Wells Street, Fort Wayne, Allen, Indiana, USA" will be given instead. Arguably that's incorrect, but it is the behaviour I want.
reverse_geocode
$location = $geocoder->reverse_geocode(latlng => '37.778907,-122.39732');
To be done.
ua
Does nothing, here for compatibility with other geocoders
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.
The contents of lib/Geo/Coder/Free/OpenAddresses/databases comes from https://github.com/openaddresses/openaddresses/tree/master/us-data.
BUGS
Lots of lookups fail at the moment.
The openaddresses.io code has yet to be compeleted. There are die()s where the code path has yet to be written.
The openaddresses data doesn't cover the globe.
Can't parse and handle "London, England".
Currently only searches US and Canadian data.
SEE ALSO
VWF, openaddresses.
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>`.