NAME
Geo::GeoNames - Perform geographical queries using GeoNames Web Services
SYNOPSIS
use Geo::GeoNames;
my $geo = Geo::GeoNames->new( username => $username );
# make a query based on placename
my $result = $geo->search(q => 'Fredrikstad', maxRows => 2);
# print the first result
print " Name: " . $result->[0]->{name};
print " Longitude: " . $result->[0]->{lng};
print " Lattitude: " . $result->[0]->{lat};
# Make a query based on postcode
my $result = $geo->postalcode_search(
postalcode => "1630", maxRows => 3, style => "FULL"
);
DESCRIPTION
Before you start, get a free GeoNames account and enable it for access to the free web service:
Get an account
Go to http://www.geonames.org/login
Respond to the email
Login and enable your account for free access
http://www.geonames.org/enablefreewebservice
Provides a perl interface to the webservices found at http://api.geonames.org. That is, given a given placename or postalcode, the module will look it up and return more information (longitude, lattitude, etc) for the given placename or postalcode. Wikipedia lookups are also supported. If more than one match is found, a list of locations will be returned.
METHODS
- new
-
$geo = Geo::GeoNames->new( username => '...' ) $geo = Geo::GeoNames->new( username => '...', url => $url )
Constructor for Geo::GeoNames. It returns a reference to an Geo::GeoNames object. You may also pass the url of the webservices to use. The default value is http://api.geonames.org and is the only url, to my knowledge, that provides the services needed by this module. The username parameter is required.
- username( $username )
-
With a single argument, set the GeoNames username and return that username. With no arguments, return the username.
- default_url
-
Returns
http://api.geonames.org
. - url( $url )
-
With a single argument, set the GeoNames url and return that url. With no arguments, return the url.
- geocode( $placename )
-
This function is just an easy access to search. It is the same as saying:
$geo->search( q => $placename );
- search( arg => $arg )
-
Searches for information about a placename. Valid names for arg are as follows:
q => $placename name => $placename name_equals => $placename maxRows => $maxrows startRow => $startrow country => $countrycode continentCode => $continentcode adminCode1 => $admin1 adminCode2 => $admin2 adminCode3 => $admin3 fclass => $fclass featureClass => $fclass, featureCode => $code lang => $lang type => $type style => $style isNameRequired => $isnamerequired tag => $tag name_startsWith => $name_startsWith countryBias => $countryBias cities => $cities operator => $operator searchlang => $searchlang charset => $charset fuzzy => $fuzzy north => $north west => $west east => $east south => $south orderby => $orderby
One, and only one, of q, name, name_equals, or name_startsWith must be supplied to this function.
fclass is deprecated.
For a thorough description of the arguments, see http://www.geonames.org/export/geonames-search.html
- find_nearby_placename( arg => $arg )
-
Reverse lookup for closest placename to a given coordinate. Valid names for arg are as follows:
lat => $lat lng => $lng radius => $radius style => $style maxRows => $maxrows
Both lat and lng must be supplied to this function.
For a thorough descriptions of the arguments, see http://www.geonames.org/export
- find_nearest_address(arg => $arg)
-
Reverse lookup for closest address to a given coordinate. Valid names for arg are as follows:
lat => $lat lng => $lng
Both lat and lng must be supplied to this function.
For a thorough descriptions of the arguments, see http://www.geonames.org/maps/reverse-geocoder.html
US only.
- find_nearest_intersection(arg => $arg)
-
Reverse lookup for closest intersection to a given coordinate. Valid names for arg are as follows:
lat => $lat lng => $lng
Both lat and lng must be supplied to this function.
For a thorough descriptions of the arguments, see http://www.geonames.org/maps/reverse-geocoder.html
US only.
- find_nearby_streets(arg => $arg)
-
Reverse lookup for closest streets to a given coordinate. Valid names for arg are as follows:
lat => $lat lng => $lng
Both lat and lng must be supplied to this function.
For a thorough descriptions of the arguments, see http://www.geonames.org/maps/reverse-geocoder.html
US only.
- postalcode_search(arg => $arg)
-
Searches for information about a postalcode. Valid names for arg are as follows:
postalcode => $postalcode placename => $placename country => $country maxRows => $maxrows style => $style
One, and only one, of postalcode or placename must be supplied to this function.
For a thorough description of the arguments, see http://www.geonames.org/export
- find_nearby_postalcodes(arg => $arg)
-
Reverse lookup for postalcodes. Valid names for arg are as follows:
lat => $lat lng => $lng radius => $radius maxRows => $maxrows style => $style country => $country
Both lat and lng must be supplied to this function.
For a thorough description of the arguments, see http://www.geonames.org/export
- postalcode_country_info
-
Returns a list of all postalcodes found on GeoNames. This function takes no arguments.
- country_info(arg => $arg)
-
Returns country information. Valid names for arg are as follows:
country => $country lang => $lang
For a thorough description of the arguments, see http://www.geonames.org/export
- find_nearby_wikipedia(arg => $arg)
-
Reverse lookup for Wikipedia articles. Valid names for arg are as follows:
lat => $lat lng => $lng radius => $radius maxRows => $maxrows lang => $lang country => $country
Both lat and lng must be supplied to this function.
For a thorough description of the arguments, see http://www.geonames.org/export
- find_nearby_wikipediaby_postalcode(arg => $arg)
-
Reverse lookup for Wikipedia articles. Valid names for arg are as follows:
postalcode => $postalcode country => $country radius => $radius maxRows => $maxrows
Both postalcode and country must be supplied to this function.
For a thorough description of the arguments, see http://www.geonames.org/export
- wikipedia_search(arg => $arg)
-
Searches for Wikipedia articles. Valid names for arg are as follows:
q => $placename maxRows => $maxrows lang => $lang title => $title
q must be supplied to this function.
For a thorough description of the arguments, see http://www.geonames.org/export
- wikipedia_bounding_box(arg => $arg)
-
Searches for Wikipedia articles. Valid names for arg are as follows:
south => $south north => $north east => $east west => $west lang => $lang maxRows => $maxrows
south, north, east, and west and must be supplied to this function.
For a thorough description of the arguments, see http://www.geonames.org/export
- cities(arg => $arg)
-
Returns a list of cities and placenames within the bounding box. Valid names for arg are as follows:
south => $south north => $north east => $east west => $west lang => $lang maxRows => $maxrows
south, north, east, and west and must be supplied to this function.
For a thorough description of the arguments, see http://www.geonames.org/export
- country_code(arg => $arg)
-
Return the country code for a given point. Valid names for arg are as follows:
lat => $lat lng => $lng radius => $radius lang => $lang
Both lat and lng must be supplied to this function.
For a thorough description of the arguments, see http://www.geonames.org/export
- earthquakes(arg => $arg)
-
Returns a list of cities and placenames within the bounding box. Valid names for arg are as follows:
south => $south north => $north east => $east west => $west date => $date minMagnitude => $minmagnitude maxRows => $maxrows
south, north, east, and west and must be supplied to this function.
For a thorough description of the arguments, see http://www.geonames.org/export
- find_nearby_weather(arg => $arg)
-
Return the country code for a given point. Valid names for arg are as follows:
lat => $lat lng => $lng
Both lat and lng must be supplied to this function.
For a thorough description of the arguments, see http://www.geonames.org/export
- get(arg => $arg)
-
Returns information about a given place based on a geonameId.
geonamesId => $geonamesId lang => $lang style => $style (Seems to be ignored, although documented)
geonamesId must be supplied to this function. lang and style are optional.
For a thorough description of the arguments, see http://www.geonames.org/export
RETURNED DATASTRUCTURE
The datastructure returned from methods in this module is an array of hashes. Each array element contains a hash which in turn contains the information about the placename/postalcode.
For example, running the statement
my $result = $geo->search(
q => "Fredrikstad", maxRows => 3, style => "FULL"
);
yields the result:
$VAR1 = {
'population' => {},
'lat' => '59.2166667',
'elevation' => {},
'countryCode' => 'NO',
'adminName1' => "\x{d8}stfold",
'fclName' => 'city, village,...',
'adminCode2' => {},
'lng' => '10.95',
'geonameId' => '3156529',
'timezone' => {
'dstOffset' => '2.0',
'content' => 'Europe/Oslo',
'gmtOffset' => '1.0'
},
'fcode' => 'PPL',
'countryName' => 'Norway',
'name' => 'Fredrikstad',
'fcodeName' => 'populated place',
'alternateNames' => 'Frederikstad,Fredrikstad,Fredrikstad kommun',
'adminCode1' => '13',
'adminName2' => {},
'fcl' => 'P'
};
The elements in the hashes depends on which style is passed to the method, but will always contain name, lng, and lat except for postalcode_country_info(), find_nearest_address(), find_nearest_intersection(), and find_nearby_streets().
BUGS
Not a bug, but the GeoNames services expects placenames to be UTF-8 encoded, and all data received from the webservices are also UTF-8 encoded. So make sure that strings are encoded/decoded based on the correct encoding.
Please report any bugs found or feature requests to https://rt.cpan.org//Dist/Display.html?Queue=geo-geonames
SEE ALSO
http://www.geonames.org/export http://www.geonames.org/export/ws-overview.html
SOURCE AVAILABILITY
The source code for this module is available from Github at https://github.com/briandfoy/geo-geonames
AUTHOR
Per Henrik Johansen, <per.henrik.johansen@gmail.com>
.
Currently maintained by brian d foy, <brian.d.foy@gmail.com>
and Nicolas Mendoza, <mendoza@pvv.ntnu.no>
COPYRIGHT AND LICENSE
Copyright (C) 2007-2008 by Per Henrik Johansen
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.