comp.lang.ada
 help / color / mirror / Atom feed
From: Gary Scott <scottg@flash.net>
Subject: Re: Earth map transformation in Ada ?
Date: 2000/05/07
Date: 2000-05-07T00:00:00+00:00	[thread overview]
Message-ID: <3914BC75.BB2A9DE1@flash.net> (raw)
In-Reply-To: 3914B7DE.3CCEF170@acenet.com.au

If not too much trouble (or rude of me to ask), I would be overjoyed to
receive such a package.  I've been working on the same thing and have
searched high and low for one so that I didn't have to reinvent the
wheel.


Geoff Bull wrote:
> 
> Reinert Korsnes wrote:
> >
> > Does someone know about available (Earth) map stransformations in Ada ?
> >
> > like:
> >
> > lat,long  <-> x,y (Polar Stereographic)
> >
> > reinert
> 
> I have a package for doing wgs84 calculations, which you may find useful
> as a starting point. I can't remember wehther it produces
> correct answers. Here is an excerpt, I can mail you the whole
> package if you like:
> 
> generic
>    type Float_Type is digits <>;
> package WGS84_Package is
> 
>      --  first  numerical eccentricity
>       e1sqr : constant := (a ** 2 - b ** 2) / (a ** 2) ;
> 
>       --  second numerical eccentricity
>       e2sqr : constant := (a ** 2 - b ** 2) / (b ** 2);
> 
> ...
>    subtype Metres is Float_Type;
>    subtype Radians is Float_Type;
>    subtype Degrees is Float_Type;
> 
>    type ECEF is -- earth centreed earth fixed rectangular coordinate
> system
>       record
>          X : Metres;  --  though equator at prime meridian
>          Y : Metres;  --  though equator 90 degrees east of prime
> meridian
>          Z : Metres;  --  through north pole
>       end record;
> 
> 
>    type Polar is
>       record
>          Latitude : Radians;
>          Longitude : Radians;
>          Altitude : Metres;
>       end record;
> 
>    type Azimuth_Elevation is
>       record
>          Azimuth : Radians;
>          Elevation : Radians;
>          Distance : Metres;
>       end record;
> 
> ...
> 
> package body WGS84_Package is
> 
>     --  converts Latitude, Longitude and Altitude (above ellipsoid) to
> XYZ
>    function To_ECEF (From : in Polar) return ECEF is
>       N : Float_Type := a / sqrt (1.0 - e1sqr * sin (From.Latitude) **
> 2);
>    begin -- To_ECEF
>       return
>         (X => (N + From.Altitude) * cos (From.Latitude) * cos
> (From.Longitude),
> 
>          Y => (N + From.Altitude) * cos (From.Latitude) * sin
> (From.Longitude),
> 
>          Z => (N * (1.0 - e1sqr) + From.Altitude) * sin (From.Latitude)
>          );
>    end To_ECEF;
> 
>    --  converts XYZ to Latitude, Longitude, Altitude (above ellipsoid)
>    function To_Polar (From : in ECEF) return Polar is
>       -- length projected onto equatorial plane;
>       P : Metres := sqrt (From.X ** 2 + From.Y ** 2);
> 
>       T : Float_Type := arctan ((From.Z * a) / (p * b));
> 
>       N : Float_Type;
> 
>       Latitude, Longitude : Radians;
>       Altitude : Metres;
>    begin -- To_Polar
>       Latitude := arctan ((From.Z + e2sqr * b * Sin (T) ** 3)
>                       / (P - e1sqr * a * Cos (T) ** 3));
> 
>       if From.X = 0.0 then
>          Longitude := Pi / 2.0;
>       else
>          Longitude := arctan (From.Y / From.X);
>       end if;
> 
>       N :=  A / Sqrt (1.0 - e1sqr * sin (Latitude) ** 2);
>       Altitude := P / cos (Latitude) - N;
> 
>       return (Latitude, Longitude, Altitude);
> 
>    end To_Polar;
> 
> ...


-- 

Gary Scott
mailto:scottg@flash.net

mailto:webmaster@fortranlib.com
http://www.fortranlib.com

Support the GNU Fortran G95 Project:  http://xena.eas.asu.edu/~andy/




  reply	other threads:[~2000-05-07  0:00 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-05-05  0:00 Earth map transformation in Ada ? Reinert Korsnes
2000-05-05  0:00 ` tmoran
2000-05-06  0:00   ` David C. Hoos, Sr.
2000-05-05  0:00 ` Ted Dennison
2000-05-07  0:00 ` Geoff Bull
2000-05-07  0:00   ` Gary Scott [this message]
2000-05-09  0:00 ` Randy Pugh
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox