Geo::Hash::XS - Geo::Hash in XS
my $gh = Geo::Hash::XS->new(); my $hash = $gh->encode( $lat, $lon ); # default precision = 32 my $hash = $gh->encode( $lat, $lon, $precision ); my ($lat, $lon) = $gh->decode( $hash );
Geo::Hash::XS encodes and decodes geohash strings, fast.
Currently this module is alpha quality (especially the adjacent() and negihbors() methods, which I just kind of copied the logic from elsewhere). Please submit tests and patches!
adjacent()
negihbors()
Encodes the given $lat and $lon to a geohash. If $precision is not given, automatically adjusts the precision according the the given $lat and $lon values.
$lat
$lon
$precision
If you do not want Geo::Hash::XS to spend time calculating this, explicitly specify $precision.
Decodes $hash to $lat and $lon
Like decode() but decode_to_interval() decodes $hash to $lat_range and $lon_range. Each range is a reference to two element arrays which contains the upper and lower bounds.
decode()
decode_to_interval()
Returns the adjacent geohash. $where denotes the direction, so if you want the block to the right of $hash, you say:
$where
$hash
use Geo::Hash::XS qw(ADJ_RIGHT); my $gh = Geo::Hash::XS->new(); my $adjacent = $gh->adjacent( $hash, ADJ_RIGHT );
Returns the list of neighbors (the blocks surrounding $hash)
Returns the apparent required precision to describe the given latitude and longitude.
Used to specify the direction in adjacent()
Here's the output from running benchmark/encode.pl:
Geo::Hash: 0.02 Geo::Hash::XS: 0.00014 precision = auto... Rate perl xs perl 18332/s -- -98% xs 964744/s 5163% -- precision = 5... Rate perl xs perl 16500/s -- -98% xs 1011557/s 6030% -- precision = 10... Rate perl xs perl 8650/s -- -99% xs 980236/s 11232% -- precision = 20... Rate perl xs perl 4736/s -- -99% xs 858875/s 18035% -- precision = 30... Rate perl xs perl 3050/s -- -100% xs 712136/s 23252% --
Obviously, the benefit of doing this calculation in XS becomes larger with higher precision, but generaly you don't need precision > 10.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://www.perl.com/perl/misc/Artistic.html
Copyright (c) 2010 Daisuke Maki <daisuke@endeworks.jp>
To install Geo::Hash::XS, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Geo::Hash::XS
CPAN shell
perl -MCPAN -e shell install Geo::Hash::XS
For more information on module installation, please visit the detailed CPAN module installation guide.