eckert6.h
上传用户:oybseng
上传日期:2015-04-27
资源大小:7831k
文件大小:7k
源码类别:

GDI/图象编程

开发平台:

Visual C++

  1. #ifndef ECKERT6_H
  2.   #define ECKERT6_H
  3. /***************************************************************************/
  4. /* RSC IDENTIFIER: ECKERT6
  5.  *
  6.  * ABSTRACT
  7.  *
  8.  *    This component provides conversions between Geodetic coordinates
  9.  *    (latitude and longitude in radians) and Eckert VI projection coordinates
  10.  *    (easting and northing in meters).
  11.  *
  12.  * ERROR HANDLING
  13.  *
  14.  *    This component checks parameters for valid values.  If an invalid value
  15.  *    is found, the error code is combined with the current error code using
  16.  *    the bitwise or.  This combining allows multiple error codes to be
  17.  *    returned. The possible error codes are:
  18.  *
  19.  *          ECK6_NO_ERROR           : No errors occurred in function
  20.  *          ECK6_LAT_ERROR          : Latitude outside of valid range
  21.  *                                      (-90 to 90 degrees)
  22.  *          ECK6_LON_ERROR          : Longitude outside of valid range
  23.  *                                      (-180 to 360 degrees)
  24.  *          ECK6_EASTING_ERROR      : Easting outside of valid range
  25.  *                                      (False_Easting +/- ~18,000,000 m,
  26.  *                                       depending on ellipsoid parameters)
  27.  *          ECK6_NORTHING_ERROR     : Northing outside of valid range
  28.  *                                      (False_Northing +/- 0 to ~8,000,000 m,
  29.  *                                       depending on ellipsoid parameters)
  30.  *          ECK6_CENT_MER_ERROR     : Central meridian outside of valid range
  31.  *                                      (-180 to 360 degrees)
  32.  *          ECK6_A_ERROR            : Semi-major axis less than or equal to zero
  33.  *          ECK6_INV_F_ERROR        : Inverse flattening outside of valid range
  34.  *                     (250 to 350s)
  35.  *
  36.  * REUSE NOTES
  37.  *
  38.  *    ECKERT6 is intended for reuse by any application that performs a
  39.  *    Eckert VI projection or its inverse.
  40.  *
  41.  * REFERENCES
  42.  *
  43.  *    Further information on ECKERT6 can be found in the Reuse Manual.
  44.  *
  45.  *    ECKERT6 originated from :  U.S. Army Topographic Engineering Center
  46.  *                                Geospatial Information Division
  47.  *                                7701 Telegraph Road
  48.  *                                Alexandria, VA  22310-3864
  49.  *
  50.  * LICENSES
  51.  *
  52.  *    None apply to this component.
  53.  *
  54.  * RESTRICTIONS
  55.  *
  56.  *    ECKERT6 has no restrictions.
  57.  *
  58.  * ENVIRONMENT
  59.  *
  60.  *    ECKERT6 was tested and certified in the following environments:
  61.  *
  62.  *    1. Solaris 2.5 with GCC 2.8.1
  63.  *    2. MS Windows 95 with MS Visual C++ 6
  64.  *
  65.  * MODIFICATIONS
  66.  *
  67.  *    Date              Description
  68.  *    ----              -----------
  69.  *    04/16/99          Original Code
  70.  *
  71.  */
  72. /***************************************************************************/
  73. /*
  74.  *                              DEFINES
  75.  */
  76.   #define ECK6_NO_ERROR           0x0000
  77.   #define ECK6_LAT_ERROR          0x0001
  78.   #define ECK6_LON_ERROR          0x0002
  79.   #define ECK6_EASTING_ERROR      0x0004
  80.   #define ECK6_NORTHING_ERROR     0x0008
  81.   #define ECK6_CENT_MER_ERROR     0x0020
  82.   #define ECK6_A_ERROR            0x0040
  83.   #define ECK6_INV_F_ERROR        0x0080
  84. /***************************************************************************/
  85. /*
  86.  *                              FUNCTION PROTOTYPES
  87.  *                                for ECKERT6.C
  88.  */
  89. /* ensure proper linkage to c++ programs */
  90.   #ifdef __cplusplus
  91. extern "C" {
  92.   #endif
  93.   long Set_Eckert6_Parameters(double a,
  94.                               double f,
  95.                               double Central_Meridian,
  96.                               double False_Easting,
  97.                               double False_Northing);
  98. /*
  99.  * The function Set_Eckert6_Parameters receives the ellipsoid parameters and
  100.  * Eckert VI projection parameters as inputs, and sets the corresponding state
  101.  * variables.  If any errors occur, the error code(s) are returned by the 
  102.  * function, otherwise ECK6_NO_ERROR is returned.
  103.  *
  104.  *    a                 : Semi-major axis of ellipsoid, in meters   (input)
  105.  *    f                 : Flattening of ellipsoid         (input)
  106.  *    Central_Meridian  : Longitude in radians at the center of     (input)
  107.  *                          the projection
  108.  *    False_Easting     : A coordinate value in meters assigned to the
  109.  *                          central meridian of the projection.     (input)
  110.  *    False_Northing    : A coordinate value in meters assigned to the
  111.  *                          origin latitude of the projection       (input)
  112.  */
  113.   void Get_Eckert6_Parameters(double *a,
  114.                               double *f,
  115.                               double *Central_Meridian,
  116.                               double *False_Easting,
  117.                               double *False_Northing);
  118. /*
  119.  * The function Get_Eckert6_Parameters returns the current ellipsoid
  120.  * parameters and Eckert VI projection parameters.
  121.  *
  122.  *    a                 : Semi-major axis of ellipsoid, in meters   (output)
  123.  *    f                 : Flattening of ellipsoid         (output)
  124.  *    Central_Meridian  : Longitude in radians at the center of     (output)
  125.  *                          the projection
  126.  *    False_Easting     : A coordinate value in meters assigned to the
  127.  *                          central meridian of the projection.     (output)
  128.  *    False_Northing    : A coordinate value in meters assigned to the
  129.  *                          origin latitude of the projection       (output)
  130.  */
  131.   long Convert_Geodetic_To_Eckert6 (double Latitude,
  132.                                     double Longitude,
  133.                                     double *Easting,
  134.                                     double *Northing);
  135. /*
  136.  * The function Convert_Geodetic_To_Eckert6 converts geodetic (latitude and
  137.  * longitude) coordinates to Eckert VI projection easting, and northing
  138.  * coordinates, according to the current ellipsoid and Eckert VI projection
  139.  * parameters.  If any errors occur, the error code(s) are returned by the
  140.  * function, otherwise ECK6_NO_ERROR is returned.
  141.  *
  142.  *    Latitude          : Latitude (phi) in radians           (input)
  143.  *    Longitude         : Longitude (lambda) in radians       (input)
  144.  *    Easting           : Easting (X) in meters               (output)
  145.  *    Northing          : Northing (Y) in meters              (output)
  146.  */
  147.   long Convert_Eckert6_To_Geodetic(double Easting,
  148.                                    double Northing,
  149.                                    double *Latitude,
  150.                                    double *Longitude);
  151. /*
  152.  * The function Convert_Eckert6_To_Geodetic converts Eckert VI projection
  153.  * easting and northing coordinates to geodetic (latitude and longitude)
  154.  * coordinates, according to the current ellipsoid and Eckert VI projection
  155.  * coordinates.  If any errors occur, the error code(s) are returned by the
  156.  * function, otherwise ECK6_NO_ERROR is returned.
  157.  *
  158.  *    Easting           : Easting (X) in meters                  (input)
  159.  *    Northing          : Northing (Y) in meters                 (input)
  160.  *    Latitude          : Latitude (phi) in radians              (output)
  161.  *    Longitude         : Longitude (lambda) in radians          (output)
  162.  */
  163.   #ifdef __cplusplus
  164. }
  165.   #endif
  166. #endif /* ECKERT6_H */