GEODESY(2)                                             GEODESY(2)

     NAME
          geodesy - Geodesy module

     SYNOPSIS
          include "geodesy.m";
          geodesy := load Geodesy Geodesy->PATH;

          # easting, northing
          Eano: adt{
               e: real;
               n: real;
          };

          # latitude, longitude in radians
          Lalo: adt{
               la: real;
               lo: real;
          };

          OSGB36, Ireland65, ED50, WGS84, ITRS2000, ETRS89: con iota;

          Natgrid, IrishNatgrid, UTMEur, UTM: con iota;

          init: fn(d: int, t: int, z: int);
          format: fn(d: int, t: int, z: int);
          os2en: fn(s: string): (int, Eano);
          en2os: fn(en: Eano): string;
          str2lalo: fn(s: string): (int, Lalo);
          lalo2str: fn(lalo: Lalo): string;
          str2en: fn(s: string): (int, Eano);
          en2lalo: fn(en: Eano): Lalo;
          lalo2en: fn(lalo: Lalo): Eano;
          datum2datum: fn(lalo: Lalo, f: int, t: int): Lalo;

     DESCRIPTION
          Geodesy provides routines to deal with (some) terrestrial
          coordinate systems.

          Eastings and northings are defined by the Eano adt and are
          measured in metres and latitude and longitude (which should
          be in radians) by the Lalo adt. Latitude is in the range
          -π/2 to π/2 radians and longitude in the range -π to π radi-
          ans.

          OSGB36 (Ordnance Survey Great Britain 1936), Ireland65 (Ire-
          land 1965), ED50 (European Datum 1950), WGS84 (World Geode-
          tic System 1984), ITRS2000 (International Terrestrial Refer-
          ence System 2000), and ETRS89 (European Terrestrial Refer-
          ence System 1989) are the current datums defined. Helmert
          transformations are used to convert between them. Note that

     Page 1                       Plan 9             (printed 3/29/24)

     GEODESY(2)                                             GEODESY(2)

          Ireland65 and ED50 are currently not supported and WGS84 and
          ITRS2000 are considered equivalent.

          Natgrid (National Grid), IrishNatgrid (Irish National Grid),
          UTMEur (European Universal Transverse Mercator), and UTM
          (Universal Transverse Mercator) are the current transverse
          Mercator projections supported.

          The following functions are provided

          init The module should always be initialized first. The
               parameters are the required datum (default WGS84),
               transverse Mercator projection (default Natgrid) and
               UTM zone (default 30) if appropriate. Negative values
               or out of range values are ignored.

          format
               Parameters as above. Alters the current settings at any
               time though care must be taken to ensure existing coor-
               dinates are still treated as in their original form.

          os2en
               Converts an Ordnance Survey National Grid reference to
               an easting, northing.  The formats XYen, XYeenn,
               XYeeennn, XYeeeennnn, XYeeeeennnnn, eenn, eeennn,
               eeeennnn, eeeeennnnn and eeeeeennnnnn are allowed. Here
               X and Y are upper case letters, e is an easting digit
               and n is a northing digit. The reference can therefore
               be rounded to the nearest decakilometre, kilometre,
               hectometre, decametre or metre. The first element of
               the returned tuple is zero if the string has an incor-
               rect format.

          en2os
               Converts an easting, northing to an OS reference in the
               form XYeeeeennnnn as  above.

          str2lalo
               Converts a latitude/longitude string to a latitude,
               longitude. The string may have the formats deg[N|S],
               deg:min[N|S] or deg:min:sec[N|S] for latitude,
               deg[E|W], deg:min[E|W] or deg:min:sec[E|W] for longi-
               tude. The latitude must come first, then optional white
               space, then the longitude.  Degrees, minutes and sec-
               onds may be integer or real. Format errors are indi-
               cated as in os2en.

          lalo2str
               Converts a latitude, longitude to string format as
               above. Seconds are given to two decimal places.

          str2en

     Page 2                       Plan 9             (printed 3/29/24)

     GEODESY(2)                                             GEODESY(2)

               Converts a string in OS or latitude/longitude format as
               above to an easting, northing.  Format errors indicated
               as in os2en.

          en2lalo
               Converts an easting, northing to latitude, longitude
               using the current transverse Mercator projection.If the
               latter is UTM or UTMEur the current zone setting will
               be used.

          lalo2en
               Converts latitude, longitude to an easting, northing
               using the current transverse Mercator projection.

          datum2datum
               Approximate (Helmert) transformation of a latitude,
               longitude between any of OSGB36, WGS84, ITRS2000 or
               ETRS89. The `from' datum appears first in the parameter
               list.

     SOURCE
          /module/math/geodesy.m
          /appl/math/geodesy.b

     BUGS
          The module is heavily biased towards Great Britain.

     Page 3                       Plan 9             (printed 3/29/24)