Geodesy: module{ PATH: con "/dis/math/geodesy.dis"; # easting, northing in metres Eano: adt{ e: real; n: real; }; # latitude, longitude in radians Lalo: adt{ la: real; lo: real; }; # datums # WGS84 and ITRS2000 effectively the same OSGB36, Ireland65, ED50, WGS84, ITRS2000, ETRS89: con iota; # transverse Mercator projections Natgrid, IrishNatgrid, UTMEur, UTM: con iota; # call first # d specifies the datum (default WGS84) # t specifies the transverse Mercator projection (default Natgrid) # z specifies the UTM zone if relevant (default 30) # calls format below init: fn(d: int, t: int, z: int); # alters the current datum, transverse Mercator projection and UTM zone # use a negative value to leave unaltered format: fn(d: int, t: int, z: int); # OS string to (easting, northing) and back # formats XYen, XYeenn, XYeeennn, XYeeeennnn, XYeeeeennnnn or # formats eenn, eeennn, eeeennnn, eeeeennnnn, eeeeeennnnnn os2en: fn(s: string): (int, Eano); # returns (0, ...) if bad string format en2os: fn(en: Eano): string; # latitude/longitude string to (latitude, longitude) and back # format latitude longitude # formats deg[N|S], deg:min[N|S], deg:min:sec[N|S] for latitude # formats deg[E|W], deg:min[E|W], deg:min:sec[E|W] for longitude str2lalo: fn(s: string): (int, Lalo); # returns (0, ...) if bad string format lalo2str: fn(lalo: Lalo): string; # general string to (easting, northing) # OS grid or latitude/longitude format as above str2en: fn(s: string): (int, Eano); # returns (0, ...) if bad string format # (easting, northing) to (latitude, longitude) and back en2lalo: fn(en: Eano): Lalo; lalo2en: fn(lalo: Lalo): Eano; # approximate transformations between any of OSGB36, WGS84, ITRS2000, ETRS89 datum2datum: fn(lalo: Lalo, f: int, t: int): Lalo;};
Geodesy: module
{
PATH: con "/dis/math/geodesy.dis";
# easting, northing in metres
Eano: adt{
e: real;
n: real;
};
# latitude, longitude in radians
Lalo: adt{
la: real;
lo: real;
};
# datums
# WGS84 and ITRS2000 effectively the same
OSGB36, Ireland65, ED50, WGS84, ITRS2000, ETRS89: con iota;
# transverse Mercator projections
Natgrid, IrishNatgrid, UTMEur, UTM: con iota;
# call first
# d specifies the datum (default WGS84)
# t specifies the transverse Mercator projection (default Natgrid)
# z specifies the UTM zone if relevant (default 30)
# calls format below
init: fn(d: int, t: int, z: int);
# alters the current datum, transverse Mercator projection and UTM zone
# use a negative value to leave unaltered
format: fn(d: int, t: int, z: int);
# OS string to (easting, northing) and back
# formats XYen, XYeenn, XYeeennn, XYeeeennnn, XYeeeeennnnn or
# formats eenn, eeennn, eeeennnn, eeeeennnnn, eeeeeennnnnn
os2en: fn(s: string): (int, Eano); # returns (0, ...) if bad string format
en2os: fn(en: Eano): string;
# latitude/longitude string to (latitude, longitude) and back
# format latitude longitude
# formats deg[N|S], deg:min[N|S], deg:min:sec[N|S] for latitude
# formats deg[E|W], deg:min[E|W], deg:min:sec[E|W] for longitude
str2lalo: fn(s: string): (int, Lalo); # returns (0, ...) if bad string format
lalo2str: fn(lalo: Lalo): string;
# general string to (easting, northing)
# OS grid or latitude/longitude format as above
str2en: fn(s: string): (int, Eano); # returns (0, ...) if bad string format
# (easting, northing) to (latitude, longitude) and back
en2lalo: fn(en: Eano): Lalo;
lalo2en: fn(lalo: Lalo): Eano;
# approximate transformations between any of OSGB36, WGS84, ITRS2000, ETRS89
datum2datum: fn(lalo: Lalo, f: int, t: int): Lalo;
};