Geo::Basic - Basic geospatial functions
use Geo::Basic;
my $hash = geohash-encode lat => 51.435, lon => -0.215, precision => 5;
# "gcpue5"
my $decoded = geohash-decode $hash;
# %( lat-max => 51.416016, lat-min => 51.459961,
# lon-max => -0.219727, lon-min => -0.175781 )
my $neighbors = geohash-neighbors $hash;
# [gcpuek gcpueh gcpudu gcpue7 gcpudg gcpue6 gcpue4 gcpudf]
my $distance-km = haversine-km :lat1(51.435), :lon1(-0.215), :lat2(51.435), :lon2(-0.214);
# 0.06931914818231608
my $distance-mi = haversine-miles :lat1(51.435), :lon1(-0.215), :lat2(51.435), :lon2(-0.214);
# 0.04307292175092216
These are a few simple utilities for doing geospatial calculations. The following functions are provided:
* `geohash-encode` -- encode a latitude and longitude into a geohash
* `geohash-decode` -- decode a geohash into a latitude and longitude
* `geohash-neighbors` -- find the neighbors of a geohash
* `haversine-km` -- calculate the distance between two points on the earth in kilometers
* `haversine-miles` -- calculate the distance between two points on the earth in miles
sub geohash-encode(
Rat(Real) :$lat,
Rat(Real) :$lon,
Int :$precision = 9
) returns Mu
Encode a latitude and longitude into a geohash
sub geohash-decode(
Str $geo
) returns Hash
Decode a geohash into a latitude and longitude
sub radians(
Real $deg
) returns Mu
Convert degrees to radians
sub km-to-miles(
Real $km
) returns Mu
Convert kilometers to miles
sub haversine-miles(
Real :$lat1,
Real :$lon1,
Real :$lat2,
Real :$lon2
) returns Mu
Calculate the great circle distance in miles, using the havarsine formula
sub haversine-km(
Real :$lat1,
Real :$lon1,
Real :$lat2,
Real :$lon2
) returns Mu
Calculate the great circle distance in kilometers using the havarsine formula
Brian Duggan
Original geohash code by Thundergnat on Rosetta Code