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

GDI/图象编程

开发平台:

Visual C++

  1. #ifndef OMERC_H
  2.   #define OMERC_H
  3. /***************************************************************************/
  4. /* RSC IDENTIFIER: OBLIQUE MERCATOR
  5.  *
  6.  * ABSTRACT
  7.  *
  8.  *    This component provides conversions between Geodetic coordinates
  9.  *    (latitude and longitude in radians) and Oblique Mercator
  10.  *    projection coordinates (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.  *       OMERC_NO_ERROR           : No errors occurred in function
  20.  *       OMERC_LAT_ERROR          : Latitude outside of valid range
  21.  *                                     (-90 to 90 degrees)
  22.  *       OMERC_LON_ERROR          : Longitude outside of valid range
  23.  *                                     (-180 to 360 degrees)
  24.  *       OMERC_ORIGIN_LAT_ERROR   : Origin latitude outside of valid range
  25.  *                                     (-89 to 89 degrees)
  26.  *       OMERC_LAT1_ERROR         : First latitude outside of valid range
  27.  *                                     (-89 to 89 degrees, excluding 0)
  28.  *       OMERC_LAT2_ERROR         : First latitude outside of valid range
  29.  *                                     (-89 to 89 degrees)
  30.  *       OMERC_LON1_ERROR         : First longitude outside of valid range
  31.  *                                     (-180 to 360 degrees)
  32.  *       OMERC_LON2_ERROR         : Second longitude outside of valid range
  33.  *                                     (-180 to 360 degrees)
  34.  *       OMERC_OLAT_POLE_ERROR    : Origin latitude can not be at a pole
  35.  *       OMERC_LAT1_POLE_ERROR    : First latitude can not be at a pole
  36.  *       OMERC_LAT2_POLE_ERROR    : Second latitude can not be at the south pole
  37.  *       OMERC_LAT1_EQUATOR_ERROR : First latitude can not be 0
  38.  *       OMERC_LAT1_LAT2_ERROR    : First and second latitudes can not be equal
  39.  *       OMERC_DIFF_HEMISPHERE_ERROR: First and second latitudes can not be
  40.  *                                     in different hemispheres
  41.  *       OMERC_EASTING_ERROR      : Easting outside of valid range
  42.  *                                     (depends on ellipsoid and projection
  43.  *                                     parameters)
  44.  *       OMERC_NORTHING_ERROR     : Northing outside of valid range
  45.  *                                     (depends on ellipsoid and projection
  46.  *                                     parameters)
  47.  *       OMERC_A_ERROR            : Semi-major axis less than or equal to zero
  48.  *       OMERC_INV_F_ERROR        : Inverse flattening outside of valid range
  49.  *                                     (250 to 350)
  50.  *       OMERC_SCALE_FACTOR_ERROR : Scale factor outside of valid
  51.  *                                     range (0.3 to 3.0)
  52.  *       OMERC_LON_WARNING        : Distortion will result if longitude is 90 degrees or more
  53.  *                                     from the Central Meridian
  54.  *
  55.  * REUSE NOTES
  56.  *
  57.  *    OBLIQUE MERCATOR is intended for reuse by any application that 
  58.  *    performs an Oblique Mercator projection or its inverse.
  59.  *
  60.  * REFERENCES
  61.  *
  62.  *    Further information on OBLIQUE MERCATOR can be found in the Reuse Manual.
  63.  *
  64.  *    OBLIQUE MERCATOR originated from:     U.S. Army Topographic Engineering Center
  65.  *                                          Geospatial Information Division
  66.  *                                          7701 Telegraph Road
  67.  *                                          Alexandria, VA  22310-3864
  68.  *
  69.  * LICENSES
  70.  *
  71.  *    None apply to this component.
  72.  *
  73.  * RESTRICTIONS
  74.  *
  75.  *    OBLIQUE MERCATOR has no restrictions.
  76.  *
  77.  * ENVIRONMENT
  78.  *
  79.  *    OBLIQUE MERCATOR was tested and certified in the following environments:
  80.  *
  81.  *    1. Solaris 2.5 with GCC, version 2.8.1
  82.  *    2. MSDOS with MS Visual C++, version 6
  83.  *
  84.  * MODIFICATIONS
  85.  *
  86.  *    Date              Description
  87.  *    ----              -----------
  88.  *    05-30-00          Original Code
  89.  *    
  90.  *
  91.  */
  92. /***************************************************************************/
  93. /*
  94.  *                              DEFINES
  95.  */
  96. #define OMERC_NO_ERROR                0x0000
  97. #define OMERC_LAT_ERROR               0x0001
  98. #define OMERC_LON_ERROR               0x0002
  99. #define OMERC_ORIGIN_LAT_ERROR        0x0004
  100. #define OMERC_LAT1_ERROR              0x0008
  101. #define OMERC_LAT2_ERROR              0x0010
  102. #define OMERC_LON1_ERROR              0x0020
  103. #define OMERC_LON2_ERROR              0x0040
  104. #define OMERC_LAT1_LAT2_ERROR         0x0080
  105. #define OMERC_DIFF_HEMISPHERE_ERROR   0x0100
  106. #define OMERC_EASTING_ERROR           0x0200
  107. #define OMERC_NORTHING_ERROR          0x0400
  108. #define OMERC_A_ERROR                 0x0800
  109. #define OMERC_INV_F_ERROR             0x1000
  110. #define OMERC_SCALE_FACTOR_ERROR      0x2000
  111. #define OMERC_LON_WARNING             0x4000
  112.  
  113. /***************************************************************************/
  114. /*
  115.  *                              FUNCTION PROTOTYPES
  116.  *                                for OMERC.C
  117.  */
  118. /* ensure proper linkage to c++ programs */
  119.   #ifdef __cplusplus
  120. extern "C" {
  121.   #endif
  122.   long Set_Oblique_Mercator_Parameters(double a,
  123.                                        double f,
  124.                                        double Origin_Latitude,
  125.                                        double Latitude_1,
  126.                                        double Longitude_1,
  127.                                        double Latitude_2,
  128.                                        double Longitude_2,
  129.                                        double False_Easting,
  130.                                        double False_Northing,
  131.                                        double Scale_Factor);
  132. /*
  133.  * The function Set_Oblique_Mercator_Parameters receives the ellipsoid parameters and
  134.  * projection parameters as inputs, and sets the corresponding state
  135.  * variables.  If any errors occur, the error code(s) are returned by the function, 
  136.  * otherwise OMERC_NO_ERROR is returned.
  137.  *
  138.  *    a                 : Semi-major axis of ellipsoid, in meters   (input)
  139.  *    f                 : Flattening of ellipsoid                   (input)
  140.  *    Origin_Latitude   : Latitude, in radians, at which the        (input)
  141.  *                          point scale factor is 1.0
  142.  *    Latitude_1        : Latitude, in radians, of first point lying on
  143.  *                           central line                           (input)
  144.  *    Longitude_1       : Longitude, in radians, of first point lying on
  145.  *                           central line                           (input)
  146.  *    Latitude_2        : Latitude, in radians, of second point lying on
  147.  *                           central line                           (input)
  148.  *    Longitude_2       : Longitude, in radians, of second point lying on
  149.  *                           central line                           (input)
  150.  *    False_Easting     : A coordinate value, in meters, assigned to the
  151.  *                          central meridian of the projection      (input)
  152.  *    False_Northing    : A coordinate value, in meters, assigned to the
  153.  *                          origin latitude of the projection       (input)
  154.  *    Scale_Factor      : Multiplier which reduces distances in the
  155.  *                          projection to the actual distance on the
  156.  *                          ellipsoid                               (input)
  157.  */
  158.   void Get_Oblique_Mercator_Parameters(double *a,
  159.                                        double *f,
  160.                                        double *Origin_Latitude,
  161.                                        double *Latitude_1,
  162.                                        double *Longitude_1,
  163.                                        double *Latitude_2,
  164.                                        double *Longitude_2,
  165.                                        double *False_Easting,
  166.                                        double *False_Northing,
  167.                                        double *Scale_Factor);
  168. /*
  169.  * The function Get_Oblique_Mercator_Parameters returns the current ellipsoid
  170.  * parameters and Oblique Mercator projection parameters.
  171.  *
  172.  *    a                 : Semi-major axis of ellipsoid, in meters  (output)
  173.  *    f                 : Flattening of ellipsoid                  (output)
  174.  *    Origin_Latitude   : Latitude, in radians, at which the       (output)
  175.  *                          point scale factor is 1.0
  176.  *    Latitude_1        : Latitude, in radians, of first point lying on
  177.  *                          central line                           (output)
  178.  *    Longitude_1       : Longitude, in radians, of first point lying on
  179.  *                          central line                           (output)
  180.  *    Latitude_2        : Latitude, in radians, of second point lying on
  181.  *                          central line                           (output)
  182.  *    Longitude_2       : Longitude, in radians, of second point lying on
  183.  *                          central line                           (output)
  184.  *    False_Easting     : A coordinate value, in meters, assigned to the
  185.  *                          central meridian of the projection     (output)
  186.  *    False_Northing    : A coordinate value, in meters, assigned to the
  187.  *                          origin latitude of the projection      (output)
  188.  *    Scale_Factor      : Multiplier which reduces distances in the
  189.  *                          projection to the actual distance on the
  190.  *                          ellipsoid                              (output)
  191.  */
  192.   long Convert_Geodetic_To_Oblique_Mercator(double Latitude,
  193.                                             double Longitude,
  194.                                             double *Easting,
  195.                                             double *Northing);
  196. /*
  197.  * The function Convert_Geodetic_To_Oblique_Mercator converts geodetic (latitude and
  198.  * longitude) coordinates to Oblique Mercator projection (easting and
  199.  * northing) coordinates, according to the current ellipsoid and Oblique Mercator 
  200.  * projection parameters.  If any errors occur, the error code(s) are returned 
  201.  * by the function, otherwise OMERC_NO_ERROR is returned.
  202.  *
  203.  *    Latitude          : Latitude (phi), in radians           (input)
  204.  *    Longitude         : Longitude (lambda), in radians       (input)
  205.  *    Easting           : Easting (X), in meters               (output)
  206.  *    Northing          : Northing (Y), in meters              (output)
  207.  */
  208.   long Convert_Oblique_Mercator_To_Geodetic(double Easting,
  209.                                             double Northing,
  210.                                             double *Latitude,
  211.                                             double *Longitude);
  212. /*
  213.  * The function Convert_Oblique_Mercator_To_Geodetic converts Oblique Mercator projection
  214.  * (easting and northing) coordinates to geodetic (latitude and longitude)
  215.  * coordinates, according to the current ellipsoid and Oblique Mercator projection
  216.  * coordinates.  If any errors occur, the error code(s) are returned by the
  217.  * function, otherwise OMERC_NO_ERROR is returned.
  218.  *
  219.  *    Easting           : Easting (X), in meters                  (input)
  220.  *    Northing          : Northing (Y), in meters                 (input)
  221.  *    Latitude          : Latitude (phi), in radians              (output)
  222.  *    Longitude         : Longitude (lambda), in radians          (output)
  223.  */
  224.   #ifdef __cplusplus
  225. }
  226.   #endif
  227. #endif