Rand Stats

Geo::Basic

cpan:BDUGGAN

NAME

Geo::Basic - Basic geospatial functions

SYNOPSIS

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

DESCRIPTION

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

FUNCTIONS

sub geohash-encode

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

sub geohash-decode(
    Str $geo
) returns Hash

Decode a geohash into a latitude and longitude

sub radians

sub radians(
    Real $deg
) returns Mu

Convert degrees to radians

sub km-to-miles

sub km-to-miles(
    Real $km
) returns Mu

Convert kilometers to miles

sub haversine-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

sub haversine-km(
    Real :$lat1,
    Real :$lon1,
    Real :$lat2,
    Real :$lon2
) returns Mu

Calculate the great circle distance in kilometers using the havarsine formula

AUTHOR

Brian Duggan

Original geohash code by Thundergnat on Rosetta Code