direwolf/external/geotranz/tranmerc.h

210 lines
8.6 KiB
C

#ifndef TRANMERC_H
#define TRANMERC_H
/***************************************************************************/
/* RSC IDENTIFIER: TRANSVERSE MERCATOR
*
* ABSTRACT
*
* This component provides conversions between Geodetic coordinates
* (latitude and longitude) and Transverse Mercator projection coordinates
* (easting and northing).
*
* ERROR HANDLING
*
* This component checks parameters for valid values. If an invalid value
* is found the error code is combined with the current error code using
* the bitwise or. This combining allows multiple error codes to be
* returned. The possible error codes are:
*
* TRANMERC_NO_ERROR : No errors occurred in function
* TRANMERC_LAT_ERROR : Latitude outside of valid range
* (-90 to 90 degrees)
* TRANMERC_LON_ERROR : Longitude outside of valid range
* (-180 to 360 degrees, and within
* +/-90 of Central Meridian)
* TRANMERC_EASTING_ERROR : Easting outside of valid range
* (depending on ellipsoid and
* projection parameters)
* TRANMERC_NORTHING_ERROR : Northing outside of valid range
* (depending on ellipsoid and
* projection parameters)
* TRANMERC_ORIGIN_LAT_ERROR : Origin latitude outside of valid range
* (-90 to 90 degrees)
* TRANMERC_CENT_MER_ERROR : Central meridian outside of valid range
* (-180 to 360 degrees)
* TRANMERC_A_ERROR : Semi-major axis less than or equal to zero
* TRANMERC_INV_F_ERROR : Inverse flattening outside of valid range
* (250 to 350)
* TRANMERC_SCALE_FACTOR_ERROR : Scale factor outside of valid
* range (0.3 to 3.0)
* TM_LON_WARNING : Distortion will result if longitude is more
* than 9 degrees from the Central Meridian
*
* REUSE NOTES
*
* TRANSVERSE MERCATOR is intended for reuse by any application that
* performs a Transverse Mercator projection or its inverse.
*
* REFERENCES
*
* Further information on TRANSVERSE MERCATOR can be found in the
* Reuse Manual.
*
* TRANSVERSE MERCATOR originated from :
* U.S. Army Topographic Engineering Center
* Geospatial Information Division
* 7701 Telegraph Road
* Alexandria, VA 22310-3864
*
* LICENSES
*
* None apply to this component.
*
* RESTRICTIONS
*
* TRANSVERSE MERCATOR has no restrictions.
*
* ENVIRONMENT
*
* TRANSVERSE MERCATOR was tested and certified in the following
* environments:
*
* 1. Solaris 2.5 with GCC, version 2.8.1
* 2. Windows 95 with MS Visual C++, version 6
*
* MODIFICATIONS
*
* Date Description
* ---- -----------
* 10-02-97 Original Code
* 03-02-97 Re-engineered Code
*
*/
/***************************************************************************/
/*
* DEFINES
*/
#define TRANMERC_NO_ERROR 0x0000
#define TRANMERC_LAT_ERROR 0x0001
#define TRANMERC_LON_ERROR 0x0002
#define TRANMERC_EASTING_ERROR 0x0004
#define TRANMERC_NORTHING_ERROR 0x0008
#define TRANMERC_ORIGIN_LAT_ERROR 0x0010
#define TRANMERC_CENT_MER_ERROR 0x0020
#define TRANMERC_A_ERROR 0x0040
#define TRANMERC_INV_F_ERROR 0x0080
#define TRANMERC_SCALE_FACTOR_ERROR 0x0100
#define TRANMERC_LON_WARNING 0x0200
/***************************************************************************/
/*
* FUNCTION PROTOTYPES
* for TRANMERC.C
*/
/* ensure proper linkage to c++ programs */
#ifdef __cplusplus
extern "C" {
#endif
long Set_Transverse_Mercator_Parameters(double a,
double f,
double Origin_Latitude,
double Central_Meridian,
double False_Easting,
double False_Northing,
double Scale_Factor);
/*
* The function Set_Tranverse_Mercator_Parameters receives the ellipsoid
* parameters and Tranverse Mercator projection parameters as inputs, and
* sets the corresponding state variables. If any errors occur, the error
* code(s) are returned by the function, otherwise TRANMERC_NO_ERROR is
* returned.
*
* a : Semi-major axis of ellipsoid, in meters (input)
* f : Flattening of ellipsoid (input)
* Origin_Latitude : Latitude in radians at the origin of the (input)
* projection
* Central_Meridian : Longitude in radians at the center of the (input)
* projection
* False_Easting : Easting/X at the center of the projection (input)
* False_Northing : Northing/Y at the center of the projection (input)
* Scale_Factor : Projection scale factor (input)
*/
void Get_Transverse_Mercator_Parameters(double *a,
double *f,
double *Origin_Latitude,
double *Central_Meridian,
double *False_Easting,
double *False_Northing,
double *Scale_Factor);
/*
* The function Get_Transverse_Mercator_Parameters returns the current
* ellipsoid and Transverse Mercator projection parameters.
*
* a : Semi-major axis of ellipsoid, in meters (output)
* f : Flattening of ellipsoid (output)
* Origin_Latitude : Latitude in radians at the origin of the (output)
* projection
* Central_Meridian : Longitude in radians at the center of the (output)
* projection
* False_Easting : Easting/X at the center of the projection (output)
* False_Northing : Northing/Y at the center of the projection (output)
* Scale_Factor : Projection scale factor (output)
*/
long Convert_Geodetic_To_Transverse_Mercator (double Latitude,
double Longitude,
double *Easting,
double *Northing);
/*
* The function Convert_Geodetic_To_Transverse_Mercator converts geodetic
* (latitude and longitude) coordinates to Transverse Mercator projection
* (easting and northing) coordinates, according to the current ellipsoid
* and Transverse Mercator projection coordinates. If any errors occur, the
* error code(s) are returned by the function, otherwise TRANMERC_NO_ERROR is
* returned.
*
* Latitude : Latitude in radians (input)
* Longitude : Longitude in radians (input)
* Easting : Easting/X in meters (output)
* Northing : Northing/Y in meters (output)
*/
long Convert_Transverse_Mercator_To_Geodetic (double Easting,
double Northing,
double *Latitude,
double *Longitude);
/*
* The function Convert_Transverse_Mercator_To_Geodetic converts Transverse
* Mercator projection (easting and northing) coordinates to geodetic
* (latitude and longitude) coordinates, according to the current ellipsoid
* and Transverse Mercator projection parameters. If any errors occur, the
* error code(s) are returned by the function, otherwise TRANMERC_NO_ERROR is
* returned.
*
* Easting : Easting/X in meters (input)
* Northing : Northing/Y in meters (input)
* Latitude : Latitude in radians (output)
* Longitude : Longitude in radians (output)
*/
#ifdef __cplusplus
}
#endif
#endif /* TRANMERC_H */