# NAME

Geo::ECEF - Converts between ECEF (earth centered earth fixed) coordinates and latitude, longitude and height above ellipsoid.

# SYNOPSIS

``````  use Geo::ECEF;
my \$obj=Geo::ECEF->new(); #WGS84 is the default
my (\$x, \$y, \$z)=\$obj->ecef(39.197807, -77.108574, 55); #Lat (deg), Lon (deg), HAE (meters)
print "X: \$x\tY: \$y\tZ: \$z\n";

my (\$lat, \$lon, \$hae)=\$obj->geodetic(\$x, \$y, \$z); #X (meters), Y (meters), Z (meters)
print "Lat: \$lat  \tLon: \$lon \tHAE \$hae\n";``````

# DESCRIPTION

Geo::ECEF provides two methods ecef and geodetic. The ecef method calculates the X,Y and Z coordinates in the ECEF (earth centered earth fixed) coordinate system from latitude, longitude and height above the ellipsoid. The geodetic method calculates the latitude, longitude and height above ellipsoid from ECEF coordinates.

The formulas were found at http://www.u-blox.ch/ and http://waas.stanford.edu/~wwu/maast/maastWWW1_0.zip.

This code is an object Perl rewrite of a similar package by Morten Sickel, Norwegian Radiation Protection Authority

# CONSTRUCTOR

## new

The new() constructor initializes the ellipsoid method.

``  my \$obj=Geo::ECEF->new("WGS84"); #WGS84 is the default``

# METHODS

## ellipsoid

Method to set or retrieve the current ellipsoid object. The ellipsoid is a Geo::Ellipsoids object.

``````  my \$ellipsoid=\$obj->ellipsoid;  #Default is WGS84

\$obj->ellipsoid('Clarke 1866'); #Built in ellipsoids from Geo::Ellipsoids
\$obj->ellipsoid({a=>1});        #Custom Sphere 1 unit radius``````

## ecef

Method returns X (meters), Y (meters), Z (meters) from lat (degrees), lon (degrees), HAE (meters).

``  my (\$x, \$y, \$z)=\$obj->ecef(39.197807, -77.108574, 55);``

Method returns X (meters), Y (meters), Z (meters) from lat (radians), lon (radians), HAE (meters).

``  my (\$x, \$y, \$z)=\$obj->ecef(0.678, -0.234, 55);``

This method may be copyright Michael Kleder, April 2006 from mathworks.com

## geodetic

Calls the default geodetic method. This user interface will not change,

Method returns latitude (degrees), longitude (degrees), HAE (meters) from X (meters), Y (meters), Z (meters).

``  my (\$lat, \$lon, \$hae)=\$obj->geodetic(\$x, \$y, \$z);``

## geodetic_iterative

Method returns latitude (degrees), longitude (degrees), HAE (meters) from X (meters), Y (meters), Z (meters). This is an iterative calculation.

``  my (\$lat, \$lon, \$hae)=\$obj->geodetic(\$x, \$y, \$z);``

Portions of this method may be...

`````` *************************************************************************
*     Copyright c 2001 The board of trustees of the Leland Stanford     *
*     This script file may be distributed and used freely, provided     *
*     this copyright notice is always kept with it.                     *
*                                                                       *
*     Questions and comments should be directed to Todd Walter at:      *
*     twalter@stanford.edu                                              *
*************************************************************************``````

## geodetic_direct

Method returns latitude (degrees), longitude (degrees), HAE (meters) from X (meters), Y (meters), Z (meters). This is a direct (non-iterative) calculation from the gpsd distribution.

``  my (\$lat, \$lon, \$hae)=\$obj->geodetic(\$x, \$y, \$z);``

This method may be copyright Michael Kleder, April 2006 from mathworks.com

# SUPPORT

DavisNetworks.com supports all Perl applications big or small.

# BUGS

Please log on RT and send email to the geo-perl email list.

# LIMITS

Win32 platforms cannot tell the difference between the deprecated geo::ecef module and the current Geo::ECEF module. The way to tell is if Geo::ECEF->can("new");

# AUTHORS

Michael R. Davis qw/perl michaelrdavis com/

Morten Sickel http://sickel.net/