Geo::What3Words - turn WGS84 coordinates into three word addresses and vice-versa using what3words.com HTTPS API
version 2.0.0
my $w3w = Geo::What3Words->new(); $w3w->pos2words('51.484463,-0.195405'); # returns 'three.example.words' $w3w->pos2words('51.484463,-0.195405', 'ru'); # returns 'три.пример.слова' $w3w->words2pos('three.example.words'); # returns '51.484463,-0.195405' (latitude,longitude)
what3words (http://what3words.com/) divides the world into 57 trillion squares of 3 metres x 3 metres. Each square has been given a 3 word address comprised of 3 words from the dictionary.
This module calls API version 2 (https://docs.what3words.com/api/v2/) to convert coordinates into those 3 word addresses (forward) and 3 words into coordinates (reverse).
Version 1 is deprecated and will stop working December 2016.
You need to sign up at http://what3words.com/login and then register for an API key at http://what3words.com/api/signup”
Creates a new instance. The api key is required.
my $w3w = Geo::What3Words->new( key => 'your-api-key' ); my $w3w = Geo::What3Words->new( key => 'your-api-key', language => 'ru' );
For debugging you can either set logging or provide a callback.
my $w3w = Geo::What3Words->new( key => 'your-api-key', logging => 1 ); # will print debugging output to STDOUT my $callback = sub { my $msg = shift; $my_log4perl_logger->info($msg) }; my $w3w = Geo::What3Words->new( key => 'your-api-key', logging => $callback ); # will log with log4perl.
Check if the remote server is available. This is helpful for debugging or testing, but too slow to run for every conversion.
$w3w->ping();
Tiny wrapper around words_to_position.
$w3w->words2pos('three.example.words'); # returns '51.484463,-0.195405' (latitude,longitude) $w3w->words2pos('does.not.exist'); # returns undef
Tiny wrapper around position_to_words.
$w3w->pos2words('51.484463,-0.195405'); # latitude,longitude # returns 'three.example.words' $w3w->pos2words('51.484463,-0.195405', 'ru'); # returns 'три.пример.слова' $w3w->pos2words('invalid,coords'); # returns undef
Returns 1 if the string looks like three words, 0 otherwise. Does not call the remote API.
$w3w->valid_words_format('one.two.three'); # returns 1
Returns a more verbose response than words2pos.
$w3w->words_to_position('prom.cape.pump'); # { # "crs": { # "type": "link", # "properties": { # "href": "http://spatialreference.org/ref/epsg/4326/ogcwkt/", # "type": "ogcwkt" # } # }, # "words": "prom.cape.pump", # "bounds": { # "southwest": { # "lng": "-0.195426", # "lat":"51.484449" # }, # "northeast": { # "lng": "-0.195383", # "lat": "51.484476" # } # }, # "geometry": { # "lng": "-0.195405", # "lat": "51.484463" # }, # "language": "en", # "map": "http://w3w.co/prom.cape.pump", # "status": { # "status": 200, # "reason": "OK" # }, # "thanks": "Thanks from all of us at index.home.raft for using a what3words API" # }
Returns a more verbose response than pos2words.
$w3w->position_to_words('51.484463,-0.195405') { "crs": { "type": "link", "properties": { "href": "http://spatialreference.org/ref/epsg/4326/ogcwkt/", "type": "ogcwkt" } }, "words": "prom.cape.pump", "bounds": { "southwest": { "lng": "-0.195426", "lat": "51.484449" }, "northeast": { "lng": "-0.195383", "lat": "51.484476" } }, "geometry": { "lng": "-0.195405", "lat": "51.484463" }, "language": "en", "map": "http://w3w.co/prom.cape.pump", "status": { "status": 200, "reason": "OK" }, "thanks": "Thanks from all of us at index.home.raft for using a what3words API" }
Retuns a list of language codes and names.
$w3w->get_languages(); # { # 'languages' => [ # { # 'name' => 'German', # 'name_native' => 'Deutsch', # 'code' => 'de' # }, # { # 'name' => 'English', # 'name_native' => 'English', # 'code' => 'en' # }, # { # 'name' => "Spanish", # 'name_native' => "Español", # 'code' => 'es' # }, # ...
The test suite will use pre-recorded API responses. If you suspect something changed in the API you can force the test suite to use live requests with your API key
PERLLIB=./lib W3W_RECORD_REQUESTS=1 W3W_API_KEY=<your key> perl t/base.t
mtmail <mtmail-cpan@gmx.net>
This software is copyright (c) 2016 by OpenCage Data Limited.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Geo::What3Words, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Geo::What3Words
CPAN shell
perl -MCPAN -e shell install Geo::What3Words
For more information on module installation, please visit the detailed CPAN module installation guide.