The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Geo::Forward - Calculate geographic location from lat, lon, distance, and heading.

SYNOPSIS

  use Geo::Forward;
  my $obj = Geo::Forward->new(); # default "WGS84"
  my ($lat1,$lon1,$faz,$dist)=(38.871022, -77.055874, 62.888507083, 4565.6854);
  my ($lat2,$lon2,$baz) = $obj->forward($lat1,$lon1,$faz,$dist);
  print "Input Lat: $lat1  Lon: $lon1\n";
  print "Input Forward Azimuth: $faz\n";
  print "Input Distance: $dist\n";
  print "Output Lat: $lat2 Lon: $lon2\n";
  print "Output Back Azimuth: $baz\n";

DESCRIPTION

This module is a pure Perl port of the NGS program in the public domain "forward" by Robert (Sid) Safford and Stephen J. Frakes.

CONSTRUCTOR

new

The new() constructor may be called with any parameter that is appropriate to the Geo::Ellipsoid->new() constructor which established the ellipsoid.

  my $obj = Geo::Forward->new(); # default "WGS84"
    

METHODS

set

Method sets the current ellipsoid. This method is called when the object is constructed (default is WGS84).

  $obj->set(); #default WGS84
  $obj->set('Clarke 1866'); #Built in ellipsoids from Geo::Ellipsoid
  $obj->set({a=>1});  #Custom Sphere 1 unit radius

ellipsoid

Method to set or retrieve the current ellipsoid object the ellipsoid oject does not have to be Geo::Ellipsoid but it must be blessed and know $obj->a and $obj->f methods.

forward

This method is the user frontend to the mathematics. This interface will not change in future versions.

  my ($lat2,$lon2,$baz) = $obj->forward($lat1,$lon1,$faz,$dist);

TODO

Add tests for more ellipsoids.

BUGS

LIMITS

No guarantees that Perl handles all of the double precision calculations in the same manner as Fortran.

AUTHOR

Michael R. Davis qw/perl michaelrdavis com/

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

Net::GPSD Geo::Spline Geo::Ellipsoid Geo::Ellipsoids